[clang] d412047 - [clang][Interp] Fix "Initializing" zero-size arrays

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 8 22:04:51 PDT 2024


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]; }


        


More information about the cfe-commits mailing list