https://github.com/MagentaTreehouse created https://github.com/llvm/llvm-project/pull/97338
In the second loop in `Sema::CheckCXXDefaultArguments`, we don't need to re-examine the first parameter with a default argument. Dropped the first iteration of that loop. In addition, use the preferred early `continue` for the if-statement in the loop. >From a5b2046e2ac1fc69d9dbb0e7b387ac0317b9d3f4 Mon Sep 17 00:00:00 2001 From: Mingyi Chen <cmingy...@gmail.com> Date: Mon, 1 Jul 2024 15:27:11 -0400 Subject: [PATCH] [clang][Sema] Improve `Sema::CheckCXXDefaultArguments` In the second loop in `Sema::CheckCXXDefaultArguments`, we don't need to re-examine the first parameter with a default argument. Dropped the first iteration of that loop. In addition, use the preferred early `continue` for the if-statement in the loop. --- clang/lib/Sema/SemaDeclCXX.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 59487bf57baa9..86f9e78c11dd4 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -1630,9 +1630,6 @@ void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) { /// function declaration are well-formed according to C++ /// [dcl.fct.default]. void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) { - unsigned NumParams = FD->getNumParams(); - unsigned ParamIdx = 0; - // This checking doesn't make sense for explicit specializations; their // default arguments are determined by the declaration we're specializing, // not by FD. @@ -1642,6 +1639,9 @@ void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) { if (FTD->isMemberSpecialization()) return; + unsigned NumParams = FD->getNumParams(); + unsigned ParamIdx = 0; + // Find first parameter with a default argument for (; ParamIdx < NumParams; ++ParamIdx) { ParmVarDecl *Param = FD->getParamDecl(ParamIdx); @@ -1654,21 +1654,21 @@ void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) { // with a default argument shall have a default argument supplied in this or // a previous declaration, unless the parameter was expanded from a // parameter pack, or shall be a function parameter pack. - for (; ParamIdx < NumParams; ++ParamIdx) { + for (++ParamIdx; ParamIdx < NumParams; ++ParamIdx) { ParmVarDecl *Param = FD->getParamDecl(ParamIdx); - if (!Param->hasDefaultArg() && !Param->isParameterPack() && - !(CurrentInstantiationScope && - CurrentInstantiationScope->isLocalPackExpansion(Param))) { - if (Param->isInvalidDecl()) - /* We already complained about this parameter. */; - else if (Param->getIdentifier()) - Diag(Param->getLocation(), - diag::err_param_default_argument_missing_name) - << Param->getIdentifier(); - else - Diag(Param->getLocation(), - diag::err_param_default_argument_missing); - } + if (Param->hasDefaultArg() || Param->isParameterPack() || + (CurrentInstantiationScope && + CurrentInstantiationScope->isLocalPackExpansion(Param))) + continue; + if (Param->isInvalidDecl()) + /* We already complained about this parameter. */; + else if (Param->getIdentifier()) + Diag(Param->getLocation(), + diag::err_param_default_argument_missing_name) + << Param->getIdentifier(); + else + Diag(Param->getLocation(), + diag::err_param_default_argument_missing); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits