[clang] [clang][bytecode] Use visitExpr() in interpretCall (PR #152857)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Sat Aug 9 08:14:37 PDT 2025
https://github.com/tbaederr updated https://github.com/llvm/llvm-project/pull/152857
>From 32238383ce50ce65d368e6c4b58a721f7387ae6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Sat, 9 Aug 2025 15:38:40 +0200
Subject: [PATCH] [clang][bytecode] Use visitExpr() in interpretCall
This is the correct function to use and it will create a variable scope.
Fixes #152822
---
clang/lib/AST/ByteCode/EvalEmitter.cpp | 5 +----
clang/test/AST/ByteCode/functions.cpp | 5 +++++
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/clang/lib/AST/ByteCode/EvalEmitter.cpp b/clang/lib/AST/ByteCode/EvalEmitter.cpp
index 9ed61c7b0be78..68f46c113ff28 100644
--- a/clang/lib/AST/ByteCode/EvalEmitter.cpp
+++ b/clang/lib/AST/ByteCode/EvalEmitter.cpp
@@ -98,10 +98,7 @@ bool EvalEmitter::interpretCall(const FunctionDecl *FD, const Expr *E) {
this->Params.insert({PD, {0, false}});
}
- if (!this->visit(E))
- return false;
- PrimType T = Ctx.classify(E).value_or(PT_Ptr);
- return this->emitPop(T, E);
+ return this->visitExpr(E, /*DestroyToplevelScope=*/false);
}
void EvalEmitter::emitLabel(LabelTy Label) { CurrentLabel = Label; }
diff --git a/clang/test/AST/ByteCode/functions.cpp b/clang/test/AST/ByteCode/functions.cpp
index 36e7bb32b2d86..3c00de0102e5a 100644
--- a/clang/test/AST/ByteCode/functions.cpp
+++ b/clang/test/AST/ByteCode/functions.cpp
@@ -708,3 +708,8 @@ namespace NoDiags {
return true;
}
}
+
+namespace EnableIfWithTemporary {
+ struct A { ~A(); };
+ int &h() __attribute__((enable_if((A(), true), ""))); // both-warning {{clang extension}}
+}
More information about the cfe-commits
mailing list