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

Reply via email to