aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/AST/ByteCode/Interp.cpp
diff options
context:
space:
mode:
authorTimm Baeder <tbaeder@redhat.com>2025-04-25 08:54:34 +0200
committerGitHub <noreply@github.com>2025-04-25 08:54:34 +0200
commit5eca2ddeba6d05f0b1cf2193d56d059502122d00 (patch)
tree08867c0ed9c5fa99f396ff2fae063e8dc12cf4dd /clang/lib/AST/ByteCode/Interp.cpp
parent205d399f3026ad766a63fd20becc1476469cfa69 (diff)
downloadllvm-5eca2ddeba6d05f0b1cf2193d56d059502122d00.zip
llvm-5eca2ddeba6d05f0b1cf2193d56d059502122d00.tar.gz
llvm-5eca2ddeba6d05f0b1cf2193d56d059502122d00.tar.bz2
[clang][bytecode] Don't diagnose const extern reads in CPCE mode (#137285)
They might become constexpr later.
Diffstat (limited to 'clang/lib/AST/ByteCode/Interp.cpp')
-rw-r--r--clang/lib/AST/ByteCode/Interp.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/clang/lib/AST/ByteCode/Interp.cpp b/clang/lib/AST/ByteCode/Interp.cpp
index 23fd894..9d7cea0 100644
--- a/clang/lib/AST/ByteCode/Interp.cpp
+++ b/clang/lib/AST/ByteCode/Interp.cpp
@@ -396,10 +396,12 @@ bool CheckExtern(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {
(Ptr.getDeclDesc()->asVarDecl() == S.EvaluatingDecl))
return true;
- if (!S.checkingPotentialConstantExpression() && S.getLangOpts().CPlusPlus) {
- const auto *VD = Ptr.getDeclDesc()->asValueDecl();
- diagnoseNonConstVariable(S, OpPC, VD);
- }
+ if (S.checkingPotentialConstantExpression() && S.getLangOpts().CPlusPlus &&
+ Ptr.isConst())
+ return false;
+
+ const auto *VD = Ptr.getDeclDesc()->asValueDecl();
+ diagnoseNonConstVariable(S, OpPC, VD);
return false;
}
@@ -740,12 +742,12 @@ bool CheckLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
AccessKinds AK) {
if (!CheckLive(S, OpPC, Ptr, AK))
return false;
+ if (!CheckExtern(S, OpPC, Ptr))
+ return false;
if (!CheckConstant(S, OpPC, Ptr))
return false;
if (!CheckDummy(S, OpPC, Ptr, AK))
return false;
- if (!CheckExtern(S, OpPC, Ptr))
- return false;
if (!CheckRange(S, OpPC, Ptr, AK))
return false;
if (!CheckActive(S, OpPC, Ptr, AK))