[clang] 7645823 - [clang][Interp] Don't require StmtExpr result to be an expression
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 13 22:34:12 PDT 2024
Author: Timm Bäder
Date: 2024-07-14T07:28:02+02:00
New Revision: 7645823564a34db84f0da53e53e38eb0ceb429ec
URL: https://github.com/llvm/llvm-project/commit/7645823564a34db84f0da53e53e38eb0ceb429ec
DIFF: https://github.com/llvm/llvm-project/commit/7645823564a34db84f0da53e53e38eb0ceb429ec.diff
LOG: [clang][Interp] Don't require StmtExpr result to be an expression
It can be a statement containing an expression.
Added:
Modified:
clang/lib/AST/Interp/Compiler.cpp
clang/test/CodeGenCXX/cxx1z-constexpr-if.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/Compiler.cpp b/clang/lib/AST/Interp/Compiler.cpp
index 48e7519f8f89d..209fb54ecdcb5 100644
--- a/clang/lib/AST/Interp/Compiler.cpp
+++ b/clang/lib/AST/Interp/Compiler.cpp
@@ -3073,13 +3073,13 @@ bool Compiler<Emitter>::VisitStmtExpr(const StmtExpr *E) {
}
assert(S == Result);
- // This better produces a value (i.e. is an expression).
if (const Expr *ResultExpr = dyn_cast<Expr>(S)) {
if (DiscardResult)
return this->discard(ResultExpr);
return this->delegate(ResultExpr);
}
- return false;
+
+ return this->visitStmt(S);
}
return BS.destroyLocals();
diff --git a/clang/test/CodeGenCXX/cxx1z-constexpr-if.cpp b/clang/test/CodeGenCXX/cxx1z-constexpr-if.cpp
index d14e36406a45e..5a11afb8dec40 100644
--- a/clang/test/CodeGenCXX/cxx1z-constexpr-if.cpp
+++ b/clang/test/CodeGenCXX/cxx1z-constexpr-if.cpp
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -std=c++1z %s -emit-llvm -fblocks -triple x86_64-apple-darwin10 -o - | FileCheck %s --implicit-check-not=should_not_be_used
+// RUN: %clang_cc1 -std=c++1z %s -emit-llvm -fblocks -triple x86_64-apple-darwin10 -o - -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=should_not_be_used
void should_be_used_1();
void should_be_used_2();
More information about the cfe-commits
mailing list