Author: Timm Baeder
Date: 2026-01-02T09:48:41+01:00
New Revision: ab56c9bfbc6832f66abe13417b5804c5f1b1a02d

URL: 
https://github.com/llvm/llvm-project/commit/ab56c9bfbc6832f66abe13417b5804c5f1b1a02d
DIFF: 
https://github.com/llvm/llvm-project/commit/ab56c9bfbc6832f66abe13417b5804c5f1b1a02d.diff

LOG: [clang][bytecode] Check isActive() in EvalEmitter::speculate() (#174183)

If this opcode is being jumped-over, we have to ignore it.

Fixes #172191

Added: 
    

Modified: 
    clang/lib/AST/ByteCode/EvalEmitter.cpp
    clang/test/AST/ByteCode/builtin-constant-p.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/ByteCode/EvalEmitter.cpp 
b/clang/lib/AST/ByteCode/EvalEmitter.cpp
index 2ed5147a15491..cf3cc1b17133c 100644
--- a/clang/lib/AST/ByteCode/EvalEmitter.cpp
+++ b/clang/lib/AST/ByteCode/EvalEmitter.cpp
@@ -155,6 +155,8 @@ bool EvalEmitter::fallthrough(const LabelTy &Label) {
 }
 
 bool EvalEmitter::speculate(const CallExpr *E, const LabelTy &EndLabel) {
+  if (!isActive())
+    return true;
   size_t StackSizeBefore = S.Stk.size();
   const Expr *Arg = E->getArg(0);
   if (!this->visit(Arg)) {

diff  --git a/clang/test/AST/ByteCode/builtin-constant-p.cpp 
b/clang/test/AST/ByteCode/builtin-constant-p.cpp
index 315a907949c34..c6b074e403bed 100644
--- a/clang/test/AST/ByteCode/builtin-constant-p.cpp
+++ b/clang/test/AST/ByteCode/builtin-constant-p.cpp
@@ -148,3 +148,15 @@ static void foo(int i) 
__attribute__((__diagnose_if__(!__builtin_constant_p(i),
 static void bar(int i) {
   foo(15); // expected-error {{not constant}}
 }
+
+namespace Inactive {
+  int foo() {
+    if ((__extension__(
+            0 ? __extension__({ (1 ? 0 : (__builtin_constant_p("plane"))); })
+              : 0)) == 0) {
+    }
+
+    return 0;
+  }
+
+}


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to