[Bug c++/68531] New: incorrect code for VLA in C++
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Nov 25 05:18:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68531
Bug ID: 68531
Summary: incorrect code for VLA in C++
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
G++ accepts variable length arrays as an extension but generates the wrong code
for some basic uses cases of such arrays: it allows changes in the value of a
variable that determines the number of elements in a VLA type to affect the
bound of the VLA after it has been defined.
When compiled with gcc (in C mode), or by Clang in either C or C++ modes, the
following program compiles and runs successfully to completion. However, when
compiled with g++, either today's trunk or as far back as 4.5.3 (the oldest I
tested), it aborts.
$ cat x.c && /build/gcc-trunk-svn/gcc/xgcc -B /build/gcc-trunk-svn/gcc -Wall
-Wextra -Wpedantic -xc++ x.c && ./a.out
int main ()
{
int nelems = 7;
typedef char A [nelems];
nelems = 2;
A a;
if (sizeof (A) != 7 || sizeof a != 7) __builtin_abort ();
}
x.c: In function ‘int main()’:
x.c:5:27: warning: ISO C++ forbids variable length array ‘A’ [-Wvla]
typedef char A [nelems];
^
Aborted (core dumped)
More information about the Gcc-bugs
mailing list