Author: Timm Bäder Date: 2024-03-06T12:34:50+01:00 New Revision: 86b630092f9a5139c4c4d627f1e0504e8f549bce
URL: https://github.com/llvm/llvm-project/commit/86b630092f9a5139c4c4d627f1e0504e8f549bce DIFF: https://github.com/llvm/llvm-project/commit/86b630092f9a5139c4c4d627f1e0504e8f549bce.diff LOG: [clang][Interp] Allow getFieldPtr ops on null pointers in C Added: Modified: clang/lib/AST/Interp/Interp.h clang/test/AST/Interp/c.c Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h index baa1b8e9071ab9..9c3d58d5619c46 100644 --- a/clang/lib/AST/Interp/Interp.h +++ b/clang/lib/AST/Interp/Interp.h @@ -1224,7 +1224,8 @@ inline bool GetPtrGlobal(InterpState &S, CodePtr OpPC, uint32_t I) { inline bool GetPtrField(InterpState &S, CodePtr OpPC, uint32_t Off) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - if (S.inConstantContext() && !CheckNull(S, OpPC, Ptr, CSK_Field)) + if (S.getLangOpts().CPlusPlus && S.inConstantContext() && + !CheckNull(S, OpPC, Ptr, CSK_Field)) return false; if (CheckDummy(S, OpPC, Ptr)) { diff --git a/clang/test/AST/Interp/c.c b/clang/test/AST/Interp/c.c index a5270172cfc7b4..8de6139efbea09 100644 --- a/clang/test/AST/Interp/c.c +++ b/clang/test/AST/Interp/c.c @@ -79,6 +79,11 @@ int a2[(intptr_t)&((struct y*)0)->y]; // all-warning {{folded to constant array} const struct y *yy = (struct y*)0; const intptr_t L = (intptr_t)(&(yy->y)); // all-error {{not a compile-time constant}} +_Static_assert((long)&((struct y*)0)->y > 0, ""); // pedantic-ref-warning {{GNU extension}} \ + // pedantic-ref-note {{this conversion is not allowed in a constant expression}} \ + // pedantic-expected-warning {{GNU extension}} \ + // pedantic-expected-note {{this conversion is not allowed in a constant expression}} + const ptr diff _t m = &m + 137 - &m; _Static_assert(m == 137, ""); // pedantic-ref-warning {{GNU extension}} \ // pedantic-expected-warning {{GNU extension}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits