Bug#462745: gcc-4.2: for (;;) { .. } while (..); doesn't give error
Timo Sirainen <tss@iki.fi> writes:
> On 27.1.2008, at 13.53, Ludovic Brenta wrote:
>
>> Timo Sirainen writes:
>>> for (;;) {
>>> } while (xyz);
>>>
>>> gcc gives no kind of an error or warning. It just ignores the while
>>> (). Also
>>> tested that this happens with gcc 3.3 and 4.3-20080116-1.
>>
>> Of course. This is legal C or C++ code consisting of an empty for
>> loop followed by an empty while loop. If you think this is a problem,
>> switch to Ada.
>
> Sorry, the indentation messed up my mind.
The language should be designed in such a way that indentation can
never mess up ones's mind; and the compiler should detect and report
all the stupid errors so you can concentrate on the difficult ones.
Consider:
for J in Some_Array'Range loop
Foo (J);
while Some_Condition; -- syntax error
-----
for J in Some_Array'Range loop
Foo (J);
end loop;
while Some_Condition; -- syntax error
-----
for J in Some_Array'Range loop
Foo (J);
end loop;
while Some_Condition loop
end loop; -- syntax error
-----
for J in Some_Array'Range loop
Foo (J);
end loop;
while Some_Condition loop
null;
end loop; -- OK, finally
Yes, in Ada you must say so when a loop is intentionally empty! And
the resulting program, after scrutiny by the compiler, obeys the Law
of Least Astonishment.
--
Ludovic Brenta.
Reply to: