Author: Timm Bäder Date: 2024-04-09T07:04:35+02:00 New Revision: d4120477130a5f9e472753068dcc627baddc44f6
URL: https://github.com/llvm/llvm-project/commit/d4120477130a5f9e472753068dcc627baddc44f6 DIFF: https://github.com/llvm/llvm-project/commit/d4120477130a5f9e472753068dcc627baddc44f6.diff LOG: [clang][Interp] Fix "Initializing" zero-size arrays getIndex() returns 0 here, so we were trying to initalize the 0th element. Fixes #88018 Added: Modified: clang/lib/AST/Interp/Pointer.cpp clang/test/AST/Interp/arrays.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Pointer.cpp b/clang/lib/AST/Interp/Pointer.cpp index af60ced0e10e9e..53998cc3233c94 100644 --- a/clang/lib/AST/Interp/Pointer.cpp +++ b/clang/lib/AST/Interp/Pointer.cpp @@ -177,6 +177,10 @@ void Pointer::initialize() const { if (isStatic() && Base == 0) return; + // Nothing to do for these. + if (Desc->getNumElems() == 0) + return; + InitMapPtr &IM = getInitMap(); if (!IM) IM = diff --git a/clang/test/AST/Interp/arrays.cpp b/clang/test/AST/Interp/arrays.cpp index 2443992f75fb7d..607d67bde020c0 100644 --- a/clang/test/AST/Interp/arrays.cpp +++ b/clang/test/AST/Interp/arrays.cpp @@ -566,3 +566,7 @@ char melchizedek[2200000000]; typedef decltype(melchizedek[1] - melchizedek[0]) ptr diff _t; constexpr ptr diff _t d1 = &melchizedek[0x7fffffff] - &melchizedek[0]; // ok constexpr ptr diff _t d3 = &melchizedek[0] - &melchizedek[0x80000000u]; // ok + +/// GH#88018 +const int SZA[] = {}; +void testZeroSizedArrayAccess() { unsigned c = SZA[4]; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits