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