aboutsummaryrefslogtreecommitdiff
path: root/clang/test
diff options
context:
space:
mode:
authorYanzuo Liu <zwuis@outlook.com>2025-07-29 11:53:02 +0800
committerGitHub <noreply@github.com>2025-07-29 11:53:02 +0800
commitb39160ddfb625bd57f9113471b15cda748151a10 (patch)
treef5d048b00526e3c30d542d6a8af26ab63b611590 /clang/test
parent7c14c5380a510d8df20be8c681821c1ed558e39c (diff)
downloadllvm-b39160ddfb625bd57f9113471b15cda748151a10.zip
llvm-b39160ddfb625bd57f9113471b15cda748151a10.tar.gz
llvm-b39160ddfb625bd57f9113471b15cda748151a10.tar.bz2
[Clang][Sema] Expression in assumption attribute should be full expression (#150814)
Add missing `ActOnFinishFullExpr` to `BuildCXXAssumeExpr`. We did it during template instantiation but forgot non-template case.
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Parser/cxx23-assume.cpp2
-rw-r--r--clang/test/SemaCXX/cxx23-assume.cpp8
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/test/Parser/cxx23-assume.cpp b/clang/test/Parser/cxx23-assume.cpp
index 269fb7e..375c908 100644
--- a/clang/test/Parser/cxx23-assume.cpp
+++ b/clang/test/Parser/cxx23-assume.cpp
@@ -5,7 +5,7 @@ void f(int x, int y) {
[[assume(1)]];
[[assume(1.0)]];
[[assume(1 + 2 == 3)]];
- [[assume(x ? 1 : 2)]];
+ [[assume(x ? 1 : 2)]]; // expected-warning {{converting the result of '?:' with integer constants to a boolean always evaluates to 'true'}}
[[assume(x && y)]];
[[assume(true)]] [[assume(true)]];
diff --git a/clang/test/SemaCXX/cxx23-assume.cpp b/clang/test/SemaCXX/cxx23-assume.cpp
index 726cb3b..99a82d9 100644
--- a/clang/test/SemaCXX/cxx23-assume.cpp
+++ b/clang/test/SemaCXX/cxx23-assume.cpp
@@ -8,6 +8,14 @@
struct A{};
struct B{ explicit operator bool() { return true; } };
+// This should be the first test case of this file.
+void IsActOnFinishFullExprCalled() {
+ // Do not add other test cases to this function.
+ // Make sure `ActOnFinishFullExpr` is called and creates `ExprWithCleanups`
+ // to avoid assertion failure.
+ [[assume(B{})]]; // expected-warning {{assumption is ignored because it contains (potential) side-effects}} // ext-warning {{C++23 extension}}
+}
+
template <bool cond>
void f() {
[[assume(cond)]]; // ext-warning {{C++23 extension}}