[clang] [clang][Sema] Improve `Sema::CheckCXXDefaultArguments` (PR #97338)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 1 12:50:09 PDT 2024
https://github.com/MagentaTreehouse updated https://github.com/llvm/llvm-project/pull/97338
>From 87c77b32ac2d13f738ec9b94b3c683e3fc4e3885 Mon Sep 17 00:00:00 2001
From: Mingyi Chen <cmingyi01 at 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 | 30 ++++++++++++++----------------
1 file changed, 14 insertions(+), 16 deletions(-)
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 59487bf57baa9..12f6629d44395 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,19 @@ 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)
+ 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);
- }
+ else
+ Diag(Param->getLocation(), diag::err_param_default_argument_missing);
}
}
More information about the cfe-commits
mailing list