What does a break with a statement expression do for each frontend? Is
it even valid to have a break there(without a statement expression)?
If it is valid, what does each standard say about the break there? If
they say the same thing then I say both frontends should behave the
same but if the c standard says a break should apply to the outer one
then we should follow that for statement expressions also.
On Jun 29, 2010, at 9:20 AM, "doug dot gregor at gmail dot com" <gcc-bugzi...@gcc.gnu.org
> wrote:
The following program exhibits different behavior with gcc vs. g++:
dgregor$ cat t.c
#include <stdio.h>
int main()
{
int i;
for( i = 0; i < 3; )
for( ; ; ({ i++; break; }) )
printf( "%d\n", i );
}
With gcc, the break in the statement expression applies to the outer
"for"
loop, so we get just "0" as output:
dgregor$ gcc t.c && ./a.out
0
with g++, the break in the statement expression applies to the inner
"for"
loop, so we get "0" "1" and "2" as the output:
dgregor$ g++ t.c && ./a.out
0
1
2
g++ seems to have the right behavior here, and in any case g++ can't
really be
changed now: Qt's foreach macro depends on having "break" bind to
the inner for
loop.
--
Summary: Break in increment expression of "for" statement
inconsistent with g++
Product: gcc
Version: 4.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: doug dot gregor at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44715