https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69517

--- Comment #17 from Martin Sebor <msebor at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #16)

The bug here is in G++ accepting a VLA initializer with more elements than
there is room for in the VLA, and then trashing the stack at runtime with the
extra elements.  It is a regression with respect to GCC 4.9.3 which implements
C++ VLAs as specified in n3639
(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html).  This is
documented in GCC 4.9 changes (https://gcc.gnu.org/gcc-4.9/changes.html) which
highlights the feature using the following example:

  void f(int n) {
    int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3
    ...

VLAs were subsequently removed from C++, and also partially (but not
completely) removed from G++, which causes C++ programs developed and tested
with G++ 4.9 to break when ported to a later version.

C++ VLAs will be safer to use with the patch referenced in comment #9.  It
patch had to be reverted from GCC 6.0 because it caused problems in Java.  Java
has been removed and I plan/hope to resubmit the patch for GCC 8.  (I wanted to
do it for GCC 7 but didn't get to it.)

Reply via email to