[clang] [Clang] Remove the special-casing for RequiresExprBodyDecl in BuildResolvedCallExpr() after fd87d765c0 (PR #111277)
Younan Zhang via cfe-commits
cfe-commits at lists.llvm.org
Sat Oct 5 22:05:08 PDT 2024
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 <zyn7109 at 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
More information about the cfe-commits
mailing list