Error message for unreachable code
    Oskar Linde 
    oskar.lindeREM at OVEgmail.com
       
    Fri Apr  7 05:56:54 PDT 2006
    
    
  
Hi,
The following code:
void main() {
	char[0] x;
	if (x.length > 0) {
		char y = x[0];
	}
}
Refuses to compile with the following error message:
zeroarray.d(4): array index [0] is outside array bounds [0 .. 0]
And before someone asks why I would declare a zero length static array I 
  better tell that this is occurs in template code where the type of x 
can be both static and dynamic arrays.
My current workaround looks like this:
template ZeroLengthStaticArray(X:X[0]) {
	alias X ZeroLengthStaticArray;
}
void main() {
	char[0] x;
	static if(!is(ZeroLengthStaticArray!(typeof(x)))) {
		if (x.length > 0) {
			char y = x[0];
		}
	}
}
(There are of course other ways, but they all make the code less readable.)
I realize that this could potentially be problematic to correct. I could 
live with the workaround, especially if it is anything but trivial to fix.
I see this as an interesting case of where DMD issues an error for valid 
code, where a typical C compiler at most would issue a warning. The 
generated code (with or without const folding) will be correct. I would 
like to hear why DMD considers the above an error while for instance 
functions without return values are not.
/Oskar
    
    
More information about the Digitalmars-d
mailing list