Compilation failure

bearophile bearophileHUGS at lycos.com
Sun Jul 8 14:59:34 PDT 2012


> When I put tmp1 outside the main loop, it compiles fine and 
> gives the expected output.
> When tmp1 is put inside the main loop, the compiler seems to 
> get stuck in a loop?

> //immutable int[] tmp1 = [1, 2]; // compiles
>
> void main()
> {	
> 	immutable int[] tmp1 = [1, 2]; // does not compile
> 	
> 	int[tmp1.length] tmp2 = tmp1;
> 	
> 	tmp2[] += 1;



Generally the  int[tmp1.length]  syntax tries to define a 
fixed-sized array, but currently in D there are no 
VariableLengthArrays of C99, there are only dynamic arrays and 
fixed-sized arrays, so the size must be known at compile-time. 
But when tmp1 is defined inside the main, it is a dynamic array, 
so its length isn't a compile-time known value. This explains why 
it doesn't compile if tmp1 is defined inside the main().

The large number of the same error message is small a compiler 
diagnostic bug, that should be reported in bugzilla.

When tmp1 is defined globally, dmd is doing something different, 
in some way it sees global immutables almost  as enums... I don't 
know if this is present in D specs.

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list