diff options
author | Yanzuo Liu <zwuis@outlook.com> | 2025-07-29 11:53:02 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-29 11:53:02 +0800 |
commit | b39160ddfb625bd57f9113471b15cda748151a10 (patch) | |
tree | f5d048b00526e3c30d542d6a8af26ab63b611590 /clang/test | |
parent | 7c14c5380a510d8df20be8c681821c1ed558e39c (diff) | |
download | llvm-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.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/cxx23-assume.cpp | 8 |
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}} |