[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: