https://github.com/zyn0217 updated https://github.com/llvm/llvm-project/pull/111277
>From 995603864598bcb826db8477406ee5f17bbe0548 Mon Sep 17 00:00:00 2001 From: Younan Zhang <zyn7...@gmail.com> Date: Sun, 6 Oct 2024 12:46:21 +0800 Subject: [PATCH] [Clang] Remove the special-casing for RequiresExprBodyDecl in BuildResolvedCallExpr() after fd87d765c0 --- clang/lib/Sema/SemaExpr.cpp | 3 +- clang/lib/Sema/TreeTransform.h | 2 +- clang/test/SemaCXX/PR84020.cpp | 23 -------------- .../instantiate-requires-expr.cpp | 31 +++++++++++++++++++ 4 files changed, 33 insertions(+), 26 deletions(-) delete mode 100644 clang/test/SemaCXX/PR84020.cpp diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ae7bcedfb28c73..959f0739f03fb9 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -6963,8 +6963,7 @@ ExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, } if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl)) - if (!isa<RequiresExprBodyDecl>(CurContext) && - Method->isImplicitObjectMemberFunction()) + if (Method->isImplicitObjectMemberFunction()) return ExprError(Diag(LParenLoc, diag::err_member_call_without_object) << Fn->getSourceRange() << 0); diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 76efc9fe831854..ed9412c93c62b3 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -13907,7 +13907,7 @@ bool TreeTransform<Derived>::TransformOverloadExprDecls(OverloadExpr *Old, } AllEmptyPacks &= Decls.empty(); - }; + } // C++ [temp.res]/8.4.2: // The program is ill-formed, no diagnostic required, if [...] lookup for diff --git a/clang/test/SemaCXX/PR84020.cpp b/clang/test/SemaCXX/PR84020.cpp deleted file mode 100644 index 8ea5dcc4527ae7..00000000000000 --- a/clang/test/SemaCXX/PR84020.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// RUN: %clang_cc1 -std=c++20 -verify %s -// RUN: %clang_cc1 -std=c++23 -verify %s -// expected-no-diagnostics - -struct B { - template <typename S> - void foo(); - - void bar(); -}; - -template <typename T, typename S> -struct A : T { - auto foo() { - static_assert(requires { T::template foo<S>(); }); - static_assert(requires { T::bar(); }); - } -}; - -int main() { - A<B, double> a; - a.foo(); -} diff --git a/clang/test/SemaTemplate/instantiate-requires-expr.cpp b/clang/test/SemaTemplate/instantiate-requires-expr.cpp index 20a19d731ae169..a1f5456156a06f 100644 --- a/clang/test/SemaTemplate/instantiate-requires-expr.cpp +++ b/clang/test/SemaTemplate/instantiate-requires-expr.cpp @@ -237,3 +237,34 @@ constexpr bool e_v = true; static_assert(e_v<bool>); } // namespace GH73885 + +namespace GH84020 { + +struct B { + template <typename S> void foo(); + void bar(); +}; + +template <typename T, typename S> struct A : T { + void foo() { + static_assert(requires { T::template foo<S>(); }); + static_assert(requires { T::bar(); }); + } +}; + +template class A<B, double>; + +} // namespace GH84020 + +namespace GH110785 { + +struct Foo { + static void f(auto) requires(false) {} + void f(int) {} + + static_assert([](auto v) { + return requires { f(v); }; + } (0) == false); +}; + +} // namespace GH110785 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits