diff options
author | Timm Baeder <tbaeder@redhat.com> | 2025-04-25 08:54:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-25 08:54:34 +0200 |
commit | 5eca2ddeba6d05f0b1cf2193d56d059502122d00 (patch) | |
tree | 08867c0ed9c5fa99f396ff2fae063e8dc12cf4dd /clang/lib/AST/ByteCode/Interp.cpp | |
parent | 205d399f3026ad766a63fd20becc1476469cfa69 (diff) | |
download | llvm-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.cpp | 14 |
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)) |