https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82874
Bug ID: 82874 Summary: invalid array index accepted in constexpr context Product: gcc Version: 8.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: --- The call to function f() in the test case below has undefined behavior because the array index is out of bounds. As a result, it is required to be diagnosed (according to [expr.const] of C++ 14). However, G++ silently accepts it. See also bug 82872 for a problem in a related area. #include <stddef.h> struct S { int i, a[1]; }; constexpr int f () { return offsetof (S, a[__PTRDIFF_MAX__ / 2]); } constexpr int i = f (); In contrast to the above, the following (also undefined) program is diagnosed as expected: #include <stddef.h> constexpr int f () { struct S { int a[1]; }; return offsetof (S, a[__PTRDIFF_MAX__]); } constexpr int i = f (); t.C:10:21: in constexpr expansion of ‘f()’ t.C:10:22: error: overflow in constant expression [-fpermissive] constexpr int i = f (); ^