Author: Timm Bäder Date: 2024-03-04T13:31:36+01:00 New Revision: c089fa5a729e217d0c0d4647656386dac1a1b135
URL: https://github.com/llvm/llvm-project/commit/c089fa5a729e217d0c0d4647656386dac1a1b135 DIFF: https://github.com/llvm/llvm-project/commit/c089fa5a729e217d0c0d4647656386dac1a1b135.diff LOG: [clang][Interp] Fix assertion in InitElem{,Pop} ops ... when the pointer is an unknown size array. Added: Modified: clang/lib/AST/Interp/Interp.h clang/test/AST/Interp/arrays.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h index 84f65a33bef361..3d49f73a567621 100644 --- a/clang/lib/AST/Interp/Interp.h +++ b/clang/lib/AST/Interp/Interp.h @@ -1448,6 +1448,8 @@ template <PrimType Name, class T = typename PrimConv<Name>::T> bool InitElem(InterpState &S, CodePtr OpPC, uint32_t Idx) { const T &Value = S.Stk.pop<T>(); const Pointer &Ptr = S.Stk.peek<Pointer>().atIndex(Idx); + if (Ptr.isUnknownSizeArray()) + return false; if (!CheckInit(S, OpPC, Ptr)) return false; Ptr.initialize(); @@ -1460,6 +1462,8 @@ template <PrimType Name, class T = typename PrimConv<Name>::T> bool InitElemPop(InterpState &S, CodePtr OpPC, uint32_t Idx) { const T &Value = S.Stk.pop<T>(); const Pointer &Ptr = S.Stk.pop<Pointer>().atIndex(Idx); + if (Ptr.isUnknownSizeArray()) + return false; if (!CheckInit(S, OpPC, Ptr)) return false; Ptr.initialize(); diff --git a/clang/test/AST/Interp/arrays.cpp b/clang/test/AST/Interp/arrays.cpp index 2bf6e9ef35119f..4b112d7fdddfdb 100644 --- a/clang/test/AST/Interp/arrays.cpp +++ b/clang/test/AST/Interp/arrays.cpp @@ -138,6 +138,8 @@ constexpr int dependent[4] = { static_assert(dependent[2] == dependent[0], ""); static_assert(dependent[3] == dependent[1], ""); +union { char x[]; } r = {0}; + #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc99-extensions" #pragma clang diagnostic ignored "-Winitializer-overrides" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits