Skip to content

[clang][bytecode] Don't diagnose const assignments...#192593

Merged
tbaederr merged 1 commit intollvm:mainfrom
tbaederr:const-assign
Apr 17, 2026
Merged

[clang][bytecode] Don't diagnose const assignments...#192593
tbaederr merged 1 commit intollvm:mainfrom
tbaederr:const-assign

Conversation

@tbaederr
Copy link
Copy Markdown
Contributor

... when we're in CPCE mode.

@llvmbot llvmbot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" clang:bytecode Issues for the clang bytecode constexpr interpreter labels Apr 17, 2026
@llvmbot
Copy link
Copy Markdown
Member

llvmbot commented Apr 17, 2026

@llvm/pr-subscribers-clang

Author: Timm Baeder (tbaederr)

Changes

... when we're in CPCE mode.


Full diff: https://github.com/llvm/llvm-project/pull/192593.diff

2 Files Affected:

  • (modified) clang/lib/AST/ByteCode/Interp.cpp (+5-3)
  • (modified) clang/test/AST/ByteCode/cxx20.cpp (+9)
diff --git a/clang/lib/AST/ByteCode/Interp.cpp b/clang/lib/AST/ByteCode/Interp.cpp
index 17d194355208d..f5fb9f6b7bbfa 100644
--- a/clang/lib/AST/ByteCode/Interp.cpp
+++ b/clang/lib/AST/ByteCode/Interp.cpp
@@ -579,9 +579,11 @@ bool CheckConst(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {
   if (llvm::is_contained(S.InitializingBlocks, Ptr.block()))
     return true;
 
-  const QualType Ty = Ptr.getType();
-  const SourceInfo &Loc = S.Current->getSource(OpPC);
-  S.FFDiag(Loc, diag::note_constexpr_modify_const_type) << Ty;
+  if (!S.checkingPotentialConstantExpression()) {
+    const QualType Ty = Ptr.getType();
+    const SourceInfo &Loc = S.Current->getSource(OpPC);
+    S.FFDiag(Loc, diag::note_constexpr_modify_const_type) << Ty;
+  }
   return false;
 }
 
diff --git a/clang/test/AST/ByteCode/cxx20.cpp b/clang/test/AST/ByteCode/cxx20.cpp
index 4c4624d7505e2..43115416451ec 100644
--- a/clang/test/AST/ByteCode/cxx20.cpp
+++ b/clang/test/AST/ByteCode/cxx20.cpp
@@ -1345,3 +1345,12 @@ namespace ExpandOnOPTEPointers {
   }
   static_assert(test());
 }
+
+namespace ConstIntPotentialConstantExpr {
+  /// NO error about a constexpr function that's never a constant expression.
+  constexpr int Const() {
+    const int a = 10; // both-note {{declared const here}}
+    a = 20; // both-error {{cannot assign to variable 'a' with const-qualified type 'const int'}}
+    return 1;
+  }
+}

@tbaederr tbaederr merged commit ede75e5 into llvm:main Apr 17, 2026
14 checks passed
alexfh pushed a commit to alexfh/llvm-project that referenced this pull request Apr 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clang:bytecode Issues for the clang bytecode constexpr interpreter clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants