http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49779
Summary: Wrong code generated for while loop with guard
containing continue
Product: gcc
Version: 4.6.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: [email protected]
ReportedBy: [email protected]
GCC turns a program that should loop forever into one that terminates:
$ cat q.c
int main() {
do {
while (({ continue; 1; })) {
return 1;
}
} while (0);
return 0;
}
$ gcc q.c
$ a.out && echo yes
yes
Apparently, GCC erroneously associates the `continue' to the outer `do' loop.