https://github.com/c8ef updated https://github.com/llvm/llvm-project/pull/110773
>From 59c8706f4bb83228fb476d3205d96f767080a0fc Mon Sep 17 00:00:00 2001 From: c8ef <c...@outlook.com> Date: Wed, 2 Oct 2024 08:54:59 +0800 Subject: [PATCH 1/2] this diagose --- clang/lib/Parse/ParseDecl.cpp | 15 +-------------- clang/lib/Sema/SemaExprCXX.cpp | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index a04eed9873c0d4..122a05be1c039a 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -7950,21 +7950,8 @@ void Parser::ParseParameterDeclarationClause( // Parse a C++23 Explicit Object Parameter // We do that in all language modes to produce a better diagnostic. SourceLocation ThisLoc; - if (getLangOpts().CPlusPlus && Tok.is(tok::kw_this)) { + if (getLangOpts().CPlusPlus && Tok.is(tok::kw_this)) ThisLoc = ConsumeToken(); - // C++23 [dcl.fct]p6: - // An explicit-object-parameter-declaration is a parameter-declaration - // with a this specifier. An explicit-object-parameter-declaration - // shall appear only as the first parameter-declaration of a - // parameter-declaration-list of either: - // - a member-declarator that declares a member function, or - // - a lambda-declarator. - // - // The parameter-declaration-list of a requires-expression is not such - // a context. - if (DeclaratorCtx == DeclaratorContext::RequiresExpr) - Diag(ThisLoc, diag::err_requires_expr_explicit_object_parameter); - } ParsedTemplateInfo TemplateInfo; ParseDeclarationSpecifiers(DS, TemplateInfo, AS_none, diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index b30414a8a8277a..e4d9c63651ea24 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -9519,15 +9519,28 @@ Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, } else if (Param->getType().hasQualifiers()) { Diag(Param->getBeginLoc(), diag::err_void_param_qualified); } - } - - if (Param->hasDefaultArg()) + } else if (Param->hasDefaultArg()) { // C++2a [expr.prim.req] p4 // [...] A local parameter of a requires-expression shall not have a // default argument. [...] Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument); - // Ignore default argument and move on + // Ignore default argument and move on + } else if (Param->isExplicitObjectParameter()) { + // C++23 [dcl.fct]p6: + // An explicit-object-parameter-declaration is a parameter-declaration + // with a this specifier. An explicit-object-parameter-declaration + // shall appear only as the first parameter-declaration of a + // parameter-declaration-list of either: + // - a member-declarator that declares a member function, or + // - a lambda-declarator. + // + // The parameter-declaration-list of a requires-expression is not such + // a context. + Diag(Param->getBeginLoc(), + diag::err_requires_expr_explicit_object_parameter); + Param->setExplicitObjectParameterLoc(SourceLocation()); + } Param->setDeclContext(Body); // If this has an identifier, add it to the scope stack. >From 52d566845574da6b274d2a8187fe8a5f6e47bfcd Mon Sep 17 00:00:00 2001 From: c8ef <c...@outlook.com> Date: Wed, 2 Oct 2024 09:08:51 +0800 Subject: [PATCH 2/2] this diagose loc --- clang/lib/Sema/SemaExprCXX.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index e4d9c63651ea24..d490452e91c3bb 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -9537,7 +9537,7 @@ Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, // // The parameter-declaration-list of a requires-expression is not such // a context. - Diag(Param->getBeginLoc(), + Diag(Param->getExplicitObjectParamThisLoc(), diag::err_requires_expr_explicit_object_parameter); Param->setExplicitObjectParameterLoc(SourceLocation()); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits