www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - DMD 0.129 segfaults when input files are specified in wrong order

Consider these three modules:

module datastream;

template DataStreamability(T)
   // Basic D types.
   static if (is(T==wchar))
     const int isStreamable = true;

     void write(wchar* val)

module vector;

private import datastream;

struct Vector(T)
   static if (DataStreamability!(T).isStreamable)
     void writeTo()

module main;

private import datastream;
private import vector;

int main(char [][] args)
   Vector!(wchar) str;
   return 0;

If you compile them, sometimes DMD segfaults, sometimes not. It depends on  
the order of the files that is given in the call to DMD:

dmd vector.d main.d datastream.d

dmd vector.d datastream.d main.d

dmd datastream.d vector.d main.d

dmd main.d vector.d datastream.d
gcc main.o vector.o datastream.o -o main -lphobos -lpthread -lm

dmd main.d datastream.d vector.d
gcc main.o datastream.o vector.o -o main -lphobos -lpthread -lm

dmd datastream.d main.d vector.d
gcc datastream.o main.o vector.o -o datastream -lphobos -lpthread -lm

The german "Speicherzugriffsfehler" means segmentation violation. 1-3  
segfault, 4-6 not. The difference is that in 1-3 vector is compiled before  
main, while in 4-6 it is compiled afterwards. This is the verbose (-v)  
output of DMD:

parse     datastream
parse     vector
parse     main
semantic  datastream
semantic  vector
semantic  main
semantic2 datastream
semantic2 vector
semantic2 main
semantic3 datastream
semantic3 vector
semantic3 main
code      datastream
code      vector
generating code for function 'write'

Ok i hope that helps.

Aug 11 2005