Author: Timm Bäder Date: 2024-06-06T17:43:40+02:00 New Revision: e9174ba789531b26709764b4f404ec368b77db44
URL: https://github.com/llvm/llvm-project/commit/e9174ba789531b26709764b4f404ec368b77db44 DIFF: https://github.com/llvm/llvm-project/commit/e9174ba789531b26709764b4f404ec368b77db44.diff LOG: [clang][Interp] Always decay root array pointers to the first element This is similar to what the current interpreter does. Added: Modified: clang/lib/AST/Interp/Interp.h clang/test/AST/Interp/arrays.cpp clang/test/AST/Interp/literals.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h index 1248eeb79cbfa..98caea5c70147 100644 --- a/clang/lib/AST/Interp/Interp.h +++ b/clang/lib/AST/Interp/Interp.h @@ -2194,7 +2194,7 @@ inline bool ArrayDecay(InterpState &S, CodePtr OpPC) { if (!CheckRange(S, OpPC, Ptr, CSK_ArrayToPointer)) return false; - if (!Ptr.isUnknownSizeArray() || Ptr.isDummy()) { + if (Ptr.isRoot() || !Ptr.isUnknownSizeArray() || Ptr.isDummy()) { S.Stk.push<Pointer>(Ptr.atIndex(0)); return true; } diff --git a/clang/test/AST/Interp/arrays.cpp b/clang/test/AST/Interp/arrays.cpp index 6146d41c5ff57..6f6fca8c1cfd8 100644 --- a/clang/test/AST/Interp/arrays.cpp +++ b/clang/test/AST/Interp/arrays.cpp @@ -615,3 +615,11 @@ namespace OnePastEndSub { constexpr A a[3][3]; constexpr int diff 2 = &a[1][3] - &a[1][0]; /// Used to crash. } + +static int same_entity_2[3]; +constexpr int *get2() { + // This is a redeclaration of the same entity, even though it doesn't + // inherit the type of the prior declaration. + extern int same_entity_2[]; + return same_entity_2; +} diff --git a/clang/test/AST/Interp/literals.cpp b/clang/test/AST/Interp/literals.cpp index 27b2af7db0da0..5a29013a053a2 100644 --- a/clang/test/AST/Interp/literals.cpp +++ b/clang/test/AST/Interp/literals.cpp @@ -1209,7 +1209,7 @@ namespace incdecbool { constexpr int externvar1() { // both-error {{never produces a constant expression}} extern char arr[]; // ref-note {{declared here}} return arr[0]; // ref-note {{read of non-constexpr variable 'arr'}} \ - // expected-note {{array-to-pointer decay of array member without known bound is not supported}} + // expected-note {{indexing of array without known bound}} } #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits