Author: Timm Bäder Date: 2024-05-22T17:31:34+02:00 New Revision: 3c67c227f2e16accd3cdb3aeb4c845edabd2f6c4
URL: https://github.com/llvm/llvm-project/commit/3c67c227f2e16accd3cdb3aeb4c845edabd2f6c4 DIFF: https://github.com/llvm/llvm-project/commit/3c67c227f2e16accd3cdb3aeb4c845edabd2f6c4.diff LOG: [clang][Interp] Test non-active union access Added: Modified: clang/lib/AST/Interp/Interp.cpp clang/test/AST/Interp/unions.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Interp.cpp b/clang/lib/AST/Interp/Interp.cpp index 1ed2ff30bdd05..cac678352e2ce 100644 --- a/clang/lib/AST/Interp/Interp.cpp +++ b/clang/lib/AST/Interp/Interp.cpp @@ -457,10 +457,10 @@ bool CheckLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr) { return false; if (!CheckRange(S, OpPC, Ptr, AK_Read)) return false; - if (!CheckInitialized(S, OpPC, Ptr, AK_Read)) - return false; if (!CheckActive(S, OpPC, Ptr, AK_Read)) return false; + if (!CheckInitialized(S, OpPC, Ptr, AK_Read)) + return false; if (!CheckTemporary(S, OpPC, Ptr, AK_Read)) return false; if (!CheckMutable(S, OpPC, Ptr)) diff --git a/clang/test/AST/Interp/unions.cpp b/clang/test/AST/Interp/unions.cpp index 08ca39c3cb089..004e500de064f 100644 --- a/clang/test/AST/Interp/unions.cpp +++ b/clang/test/AST/Interp/unions.cpp @@ -1,8 +1,6 @@ // RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=expected,both %s // RUN: %clang_cc1 -verify=ref,both %s -// both-no-diagnostics - union U { int a; int b; @@ -10,5 +8,5 @@ union U { constexpr U a = {12}; static_assert(a.a == 12, ""); - - +static_assert(a.b == 0, ""); // both-error {{not an integral constant expression}} \ + // both-note {{read of member 'b' of union with active member 'a'}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits