diff --git a/clang/lib/AST/ByteCode/Interp.cpp b/clang/lib/AST/ByteCode/Interp.cpp index 17cf3ccdeb6a94..65b4c0a9cb7660 100644 --- a/clang/lib/AST/ByteCode/Interp.cpp +++ b/clang/lib/AST/ByteCode/Interp.cpp @@ -620,6 +620,8 @@ bool CheckFinalLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr) { return false; if (!CheckTemporary(S, OpPC, Ptr, AK_Read)) return false; + if (!CheckWeak(S, OpPC, Ptr)) + return false; if (!CheckMutable(S, OpPC, Ptr)) return false; return true; diff --git a/clang/test/CodeGenCXX/weak-init.cpp b/clang/test/CodeGenCXX/weak-init.cpp index 634021f38f854c..d9b17d9ca74f87 100644 --- a/clang/test/CodeGenCXX/weak-init.cpp +++ b/clang/test/CodeGenCXX/weak-init.cpp @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -emit-llvm %s -o - -fexperimental-new-constant-interpreter | FileCheck %s extern const int W __attribute__((weak)) = 99; const int S = 77;