@@ -6927,7 +6927,7 @@ void Sema::AddOverloadCandidate(
69276927 bool PartialOverloading, bool AllowExplicit, bool AllowExplicitConversions,
69286928 ADLCallKind IsADLCandidate, ConversionSequenceList EarlyConversions,
69296929 OverloadCandidateParamOrder PO, bool AggregateCandidateDeduction,
6930- bool HasMatchedPackOnParmToNonPackOnArg ) {
6930+ bool StrictPackMatch ) {
69316931 const FunctionProtoType *Proto
69326932 = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
69336933 assert(Proto && "Functions without a prototype cannot be overloaded");
@@ -6947,7 +6947,7 @@ void Sema::AddOverloadCandidate(
69476947 Expr::Classification::makeSimpleLValue(), Args,
69486948 CandidateSet, SuppressUserConversions,
69496949 PartialOverloading, EarlyConversions, PO,
6950- HasMatchedPackOnParmToNonPackOnArg );
6950+ StrictPackMatch );
69516951 return;
69526952 }
69536953 // We treat a constructor like a non-member function, since its object
@@ -6990,8 +6990,7 @@ void Sema::AddOverloadCandidate(
69906990 CandidateSet.getRewriteInfo().getRewriteKind(Function, PO);
69916991 Candidate.IsADLCandidate = llvm::to_underlying(IsADLCandidate);
69926992 Candidate.ExplicitCallArguments = Args.size();
6993- Candidate.HasMatchedPackOnParmToNonPackOnArg =
6994- HasMatchedPackOnParmToNonPackOnArg;
6993+ Candidate.StrictPackMatch = StrictPackMatch;
69956994
69966995 // Explicit functions are not actually candidates at all if we're not
69976996 // allowing them in this context, but keep them around so we can point
@@ -7563,7 +7562,7 @@ void Sema::AddMethodCandidate(
75637562 Expr::Classification ObjectClassification, ArrayRef<Expr *> Args,
75647563 OverloadCandidateSet &CandidateSet, bool SuppressUserConversions,
75657564 bool PartialOverloading, ConversionSequenceList EarlyConversions,
7566- OverloadCandidateParamOrder PO, bool HasMatchedPackOnParmToNonPackOnArg ) {
7565+ OverloadCandidateParamOrder PO, bool StrictPackMatch ) {
75677566 const FunctionProtoType *Proto
75687567 = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
75697568 assert(Proto && "Methods without a prototype cannot be overloaded");
@@ -7594,8 +7593,7 @@ void Sema::AddMethodCandidate(
75947593 Candidate.TookAddressOfOverload =
75957594 CandidateSet.getKind() == OverloadCandidateSet::CSK_AddressOfOverloadSet;
75967595 Candidate.ExplicitCallArguments = Args.size();
7597- Candidate.HasMatchedPackOnParmToNonPackOnArg =
7598- HasMatchedPackOnParmToNonPackOnArg;
7596+ Candidate.StrictPackMatch = StrictPackMatch;
75997597
76007598 bool IgnoreExplicitObject =
76017599 (Method->isExplicitObjectMemberFunction() &&
@@ -7805,8 +7803,7 @@ void Sema::AddMethodTemplateCandidate(
78057803 AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
78067804 ActingContext, ObjectType, ObjectClassification, Args,
78077805 CandidateSet, SuppressUserConversions, PartialOverloading,
7808- Conversions, PO,
7809- Info.hasMatchedPackOnParmToNonPackOnArg());
7806+ Conversions, PO, Info.hasStrictPackMatch());
78107807}
78117808
78127809/// Determine whether a given function template has a simple explicit specifier
@@ -7894,7 +7891,7 @@ void Sema::AddTemplateOverloadCandidate(
78947891 PartialOverloading, AllowExplicit,
78957892 /*AllowExplicitConversions=*/false, IsADLCandidate, Conversions, PO,
78967893 Info.AggregateDeductionCandidateHasMismatchedArity,
7897- Info.hasMatchedPackOnParmToNonPackOnArg ());
7894+ Info.hasStrictPackMatch ());
78987895}
78997896
79007897bool Sema::CheckNonDependentConversions(
@@ -8016,8 +8013,7 @@ void Sema::AddConversionCandidate(
80168013 CXXConversionDecl *Conversion, DeclAccessPair FoundDecl,
80178014 CXXRecordDecl *ActingContext, Expr *From, QualType ToType,
80188015 OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit,
8019- bool AllowExplicit, bool AllowResultConversion,
8020- bool HasMatchedPackOnParmToNonPackOnArg) {
8016+ bool AllowExplicit, bool AllowResultConversion, bool StrictPackMatch) {
80218017 assert(!Conversion->getDescribedFunctionTemplate() &&
80228018 "Conversion function templates use AddTemplateConversionCandidate");
80238019 QualType ConvType = Conversion->getConversionType().getNonReferenceType();
@@ -8062,8 +8058,7 @@ void Sema::AddConversionCandidate(
80628058 Candidate.FinalConversion.setAllToTypes(ToType);
80638059 Candidate.Viable = true;
80648060 Candidate.ExplicitCallArguments = 1;
8065- Candidate.HasMatchedPackOnParmToNonPackOnArg =
8066- HasMatchedPackOnParmToNonPackOnArg;
8061+ Candidate.StrictPackMatch = StrictPackMatch;
80678062
80688063 // Explicit functions are not actually candidates at all if we're not
80698064 // allowing them in this context, but keep them around so we can point
@@ -8266,7 +8261,7 @@ void Sema::AddTemplateConversionCandidate(
82668261 AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
82678262 CandidateSet, AllowObjCConversionOnExplicit,
82688263 AllowExplicit, AllowResultConversion,
8269- Info.hasMatchedPackOnParmToNonPackOnArg ());
8264+ Info.hasStrictPackMatch ());
82708265}
82718266
82728267void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
@@ -10618,9 +10613,8 @@ bool clang::isBetterOverloadCandidate(
1061810613 isa<CXXConstructorDecl>(Cand2.Function))
1061910614 return isa<CXXConstructorDecl>(Cand1.Function);
1062010615
10621- if (Cand1.HasMatchedPackOnParmToNonPackOnArg !=
10622- Cand2.HasMatchedPackOnParmToNonPackOnArg)
10623- return Cand2.HasMatchedPackOnParmToNonPackOnArg;
10616+ if (Cand1.StrictPackMatch != Cand2.StrictPackMatch)
10617+ return Cand2.StrictPackMatch;
1062410618
1062510619 // -- F1 is a non-template function and F2 is a function template
1062610620 // specialization, or, if not that,
0 commit comments