Compiler does some flow analysis with -O..?
Jarrett Billingsley
jarrett.billingsley at gmail.com
Thu Apr 9 07:19:02 PDT 2009
Try this.
void main()
{
int x = void;
int y = 3;
if(y < 10)
x += 5;
else
x = 2;
}
Notice that x is uninitialized, so "x += 5;" shouldn't work.
If you compile this, even with -w, DMD happily accepts it. But if you
throw -O, it gives the error:
dtest.d(187): Error: variable x used before set
This seems to be a relatively recent development, and doesn't seem to
be documented. It's also very surprising that it only happens when -O
is thrown.
I like it a lot. Could this functionality be formalized and extended
(i.e. to include accesses to variables declared like "int x;", like it
says in the spec)?
More information about the Digitalmars-d
mailing list