https://github.com/imdj updated https://github.com/llvm/llvm-project/pull/132919

>From 8ed77e7bb4d26ad5b2f87d65c77e3faa4539502c Mon Sep 17 00:00:00 2001
From: Imad Aldij <o...@imadij.com>
Date: Tue, 25 Mar 2025 13:54:49 +0200
Subject: [PATCH] Remove the restriction that local parameters in
 constraint-expressions can only appear as unevaluated operands

---
 clang/lib/Sema/SemaExpr.cpp                           | 11 -----------
 .../expr.prim/expr.prim.req/nested-requirement.cpp    |  7 -------
 2 files changed, 18 deletions(-)

diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 3af6d6c23438f..fa8eeb644c179 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -396,17 +396,6 @@ bool Sema::DiagnoseUseOfDecl(NamedDecl *D, 
ArrayRef<SourceLocation> Locs,
           targetDiag(*Locs.begin(), diag::err_thread_unsupported);
   }
 
-  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) &&
-      !isUnevaluatedContext()) {
-    // C++ [expr.prim.req.nested] p3
-    //   A local parameter shall only appear as an unevaluated operand
-    //   (Clause 8) within the constraint-expression.
-    Diag(Loc, 
diag::err_requires_expr_parameter_referenced_in_evaluated_context)
-        << D;
-    Diag(D->getLocation(), diag::note_entity_declared_at) << D;
-    return true;
-  }
-
   return false;
 }
 
diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.req/nested-requirement.cpp 
b/clang/test/CXX/expr/expr.prim/expr.prim.req/nested-requirement.cpp
index 763d983d20f61..eaef4441c10f8 100644
--- a/clang/test/CXX/expr/expr.prim/expr.prim.req/nested-requirement.cpp
+++ b/clang/test/CXX/expr/expr.prim/expr.prim.req/nested-requirement.cpp
@@ -37,13 +37,6 @@ namespace std_example {
   static_assert(D<T1>);
   template<D T> struct D_check {}; // expected-note{{because 'short' does not 
satisfy 'D'}}
   using dc1 = D_check<short>; // expected-error{{constraints not satisfied for 
class template 'D_check' [with T = short]}}
-
-  template<typename T>
-  concept C2 = requires (T a) {
-      requires sizeof(a) == 4; // OK
-      requires a == 0; // expected-note{{because 'a == 0' would be invalid: 
constraint variable 'a' cannot be used in an evaluated context}}
-    };
-  static_assert(C2<int>); // expected-note{{because 'int' does not satisfy 
'C2'}} expected-error{{static assertion failed}}
 }
 
 template<typename T>

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to