https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119180
Bug ID: 119180 Summary: GCC Accepts Non-Standard Variable-Length Arrays (VLAs) in C++ Without Warnings Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: qurong at ios dot ac.cn Target Milestone: --- GCC compiles code containing variable-length arrays (VLAs) and lambda captures of VLAs without diagnostics, while Clang/MSVC correctly reject it. This violates C++ standard rules (C++11 §8.3.4) and may mislead developers into writing non-portable code. **Steps to Reproduce**: 1. Save the following code as `test.cpp`: ```cpp template <typename T> struct Container { void f(int i) { int ar[i]; // Non-standard VLA [&ar] { (void)ar; }(); // Lambda capture of VLA } }; int main() { Container<int> obj; obj.f(5); return 0; } 2. Compile with GCC: g++ -std=c++11 test.cpp Expected Result: Compilation fails with errors about VLAs being forbidden in ISO C++, or at least issues a warning when extensions are enabled. Actual Result: GCC compiles the code silently (or with -pedantic warns but still succeeds). Environment: Compiler: GCC 13.2.0 Flags: -std=c++11 Proposal: Enhance Warnings: Emit a warning by default for VLAs in C++ mode (similar to -Wvla in C). Reject lambda captures of VLAs explicitly. Documentation Update: Clarify VLA support as a GNU extension in C++ mode. Additional Notes: Standard References: C++11 §8.3.4: Array dimensions must be constant expressions. C++11 §5.1.2: Lambda captures require complete types. Impact: Non-portable code may fail on other compilers. Compiler Explorer link: https://godbolt.org/z/YdEn56Gq1