https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70741
Bug ID: 70741
Summary: segfault when jumping into statement expression in
array initializer
Product: gcc
Version: 5.2.1
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: donald.chai at synopsys dot com
Target Milestone: ---
Preface:
1) Apologies if this is the wrong component.
2) Yes, this code is crazy. I was testing our own compiler. :)
GCC 5.x segfaults on the below code in C++ mode.
$ cat test.c
void testE_statement() {
int x[10] = {
({ L: 0; })
};
goto L;
}
$ gcc-5 -c test.c
test.c: In function ‘testE_statement’:
test.c:5:5: error: jump into statement expression
goto L;
^
test.c:3:12: note: label ‘L’ defined here
({ L: 0; })
$ gcc-5 -c -x c++ test.c
test.c: In function ‘void testE_statement()’:
test.c:1:6: internal compiler error: Segmentation fault
void testE_statement() {
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
$ gcc-5 --version
gcc-5 (Ubuntu 5.2.1-23ubuntu1~12.04) 5.2.1 20151031
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
GCC 4.9 appears to do something somewhat reasonable:
$ cat test.cpp
#include <cstdio>
int main() {
int iters = 0;
int x[10] = {
({ printf("0\n"); iters; }),
({ L: iters++; printf("1\n"); iters; })
};
if (iters < 2)
goto L;
printf("x[0]: %d\n", x[0]);
printf("x[1]: %d\n", x[1]);
}
$ gcc-4.9 test.cpp
$ ./a.out
0
1
1
x[0]: 0
x[1]: 2