diff options
author | Ahmed Charles <ace2001ac@gmail.com> | 2012-02-25 11:00:22 +0000 |
---|---|---|
committer | Ahmed Charles <ace2001ac@gmail.com> | 2012-02-25 11:00:22 +0000 |
commit | 13a140caba448a66ffcc5ff0d32a87d6e4f4ad3f (patch) | |
tree | 4c9eabc3b789a4864cc8c84242255694e597e17a | |
parent | 5297d71e8c85f9b04dc31c690e91c6a2f7eddb90 (diff) |
ArrayRef'ize various functions in the AST/Parser/Sema.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151447 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/Expr.h | 3 | ||||
-rw-r--r-- | include/clang/Parse/Parser.h | 3 | ||||
-rw-r--r-- | include/clang/Sema/Overload.h | 2 | ||||
-rw-r--r-- | include/clang/Sema/Sema.h | 26 | ||||
-rw-r--r-- | lib/AST/Expr.cpp | 14 | ||||
-rw-r--r-- | lib/Parse/ParseExpr.cpp | 8 | ||||
-rw-r--r-- | lib/Sema/SemaCast.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaCodeComplete.cpp | 36 | ||||
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 9 | ||||
-rw-r--r-- | lib/Sema/SemaExprCXX.cpp | 24 | ||||
-rw-r--r-- | lib/Sema/SemaInit.cpp | 41 | ||||
-rw-r--r-- | lib/Sema/SemaLookup.cpp | 23 | ||||
-rw-r--r-- | lib/Sema/SemaOverload.cpp | 255 | ||||
-rw-r--r-- | lib/Sema/SemaTemplateDeduction.cpp | 10 |
14 files changed, 236 insertions, 220 deletions
diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 741b47e560..e053fd7002 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -669,8 +669,7 @@ public: return const_cast<Expr*>(this)->IgnoreParenNoopCasts(Ctx); } - static bool hasAnyTypeDependentArguments(Expr** Exprs, unsigned NumExprs); - static bool hasAnyValueDependentArguments(Expr** Exprs, unsigned NumExprs); + static bool hasAnyTypeDependentArguments(llvm::ArrayRef<Expr *> Exprs); static bool classof(const Stmt *T) { return T->getStmtClass() >= firstExprConstant && diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index e7834edac7..89d1bb80da 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -1336,8 +1336,7 @@ private: SmallVectorImpl<SourceLocation> &CommaLocs, void (Sema::*Completer)(Scope *S, Expr *Data, - Expr **Args, - unsigned NumArgs) = 0, + llvm::ArrayRef<Expr *> Args) = 0, Expr *Data = 0); /// ParenParseOption - Control what ParseParenExpression will parse. diff --git a/include/clang/Sema/Overload.h b/include/clang/Sema/Overload.h index d745b4befb..751d605342 100644 --- a/include/clang/Sema/Overload.h +++ b/include/clang/Sema/Overload.h @@ -780,7 +780,7 @@ namespace clang { void NoteCandidates(Sema &S, OverloadCandidateDisplayKind OCD, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, const char *Opc = 0, SourceLocation Loc = SourceLocation()); }; diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h index a3a5d4ea03..cc264698da 100644 --- a/include/clang/Sema/Sema.h +++ b/include/clang/Sema/Sema.h @@ -1500,13 +1500,13 @@ public: void AddOverloadCandidate(FunctionDecl *Function, DeclAccessPair FoundDecl, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, OverloadCandidateSet& CandidateSet, bool SuppressUserConversions = false, bool PartialOverloading = false, bool AllowExplicit = false); void AddFunctionCandidates(const UnresolvedSetImpl &Functions, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, OverloadCandidateSet& CandidateSet, bool SuppressUserConversions = false); void AddMethodCandidate(DeclAccessPair FoundDecl, @@ -1519,7 +1519,7 @@ public: DeclAccessPair FoundDecl, CXXRecordDecl *ActingContext, QualType ObjectType, Expr::Classification ObjectClassification, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, OverloadCandidateSet& CandidateSet, bool SuppressUserConversions = false); void AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl, @@ -1528,13 +1528,13 @@ public: TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ObjectType, Expr::Classification ObjectClassification, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, OverloadCandidateSet& CandidateSet, bool SuppressUserConversions = false); void AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl, TemplateArgumentListInfo *ExplicitTemplateArgs, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, OverloadCandidateSet& CandidateSet, bool SuppressUserConversions = false); void AddConversionCandidate(CXXConversionDecl *Conversion, @@ -1551,7 +1551,7 @@ public: DeclAccessPair FoundDecl, CXXRecordDecl *ActingContext, const FunctionProtoType *Proto, - Expr *Object, Expr **Args, unsigned NumArgs, + Expr *Object, llvm::ArrayRef<Expr*> Args, OverloadCandidateSet& CandidateSet); void AddMemberOperatorCandidates(OverloadedOperatorKind Op, SourceLocation OpLoc, @@ -1569,7 +1569,7 @@ public: OverloadCandidateSet& CandidateSet); void AddArgumentDependentLookupCandidates(DeclarationName Name, bool Operator, SourceLocation Loc, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, TemplateArgumentListInfo *ExplicitTemplateArgs, OverloadCandidateSet& CandidateSet, bool PartialOverloading = false, @@ -1618,7 +1618,7 @@ public: FunctionDecl *Fn); void AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet, bool PartialOverloading = false); @@ -1815,7 +1815,7 @@ public: void ArgumentDependentLookup(DeclarationName Name, bool Operator, SourceLocation Loc, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, ADLResult &Functions, bool StdNamespaceIsAssociated = false); @@ -1834,7 +1834,7 @@ public: bool EnteringContext = false, const ObjCObjectPointerType *OPT = 0); - void FindAssociatedClassesAndNamespaces(Expr **Args, unsigned NumArgs, + void FindAssociatedClassesAndNamespaces(llvm::ArrayRef<Expr *> Args, AssociatedNamespaceSet &AssociatedNamespaces, AssociatedClassSet &AssociatedClasses); @@ -2444,7 +2444,7 @@ public: bool DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs = 0, - Expr **Args = 0, unsigned NumArgs = 0); + llvm::ArrayRef<Expr *> Args = llvm::ArrayRef<Expr *>()); ExprResult LookupInObjCMethod(LookupResult &LookUp, Scope *S, IdentifierInfo *II, @@ -4835,7 +4835,7 @@ public: TemplateDeductionResult DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate, TemplateArgumentListInfo *ExplicitTemplateArgs, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info); @@ -6388,7 +6388,7 @@ public: void CodeCompleteTag(Scope *S, unsigned TagSpec); void CodeCompleteTypeQualifiers(DeclSpec &DS); void CodeCompleteCase(Scope *S); - void CodeCompleteCall(Scope *S, Expr *Fn, Expr **Args, unsigned NumArgs); + void CodeCompleteCall(Scope *S, Expr *Fn, llvm::ArrayRef<Expr *> Args); void CodeCompleteInitializer(Scope *S, Decl *D); void CodeCompleteReturn(Scope *S); void CodeCompleteAfterIf(Scope *S); diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 37df90407d..92e901a93b 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -2528,24 +2528,14 @@ bool Expr::isImplicitCXXThis() const { /// hasAnyTypeDependentArguments - Determines if any of the expressions /// in Exprs is type-dependent. -bool Expr::hasAnyTypeDependentArguments(Expr** Exprs, unsigned NumExprs) { - for (unsigned I = 0; I < NumExprs; ++I) +bool Expr::hasAnyTypeDependentArguments(llvm::ArrayRef<Expr *> Exprs) { + for (unsigned I = 0; I < Exprs.size(); ++I) if (Exprs[I]->isTypeDependent()) return true; return false; } -/// hasAnyValueDependentArguments - Determines if any of the expressions -/// in Exprs is value-dependent. -bool Expr::hasAnyValueDependentArguments(Expr** Exprs, unsigned NumExprs) { - for (unsigned I = 0; I < NumExprs; ++I) - if (Exprs[I]->isValueDependent()) - return true; - - return false; -} - bool Expr::isConstantInitializer(ASTContext &Ctx, bool IsForRef) const { // This function is attempting whether an expression is an initializer // which can be evaluated at compile-time. isEvaluatable handles most diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index 62d1f494be..fe8d464229 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/lib/Parse/ParseExpr.cpp @@ -1332,7 +1332,8 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) { CommaLocsTy CommaLocs; if (Tok.is(tok::code_completion)) { - Actions.CodeCompleteCall(getCurScope(), LHS.get(), 0, 0); + Actions.CodeCompleteCall(getCurScope(), LHS.get(), + llvm::ArrayRef<Expr *>()); cutOffParsing(); return ExprError(); } @@ -2211,13 +2212,12 @@ bool Parser::ParseExpressionList(SmallVectorImpl<Expr*> &Exprs, SmallVectorImpl<SourceLocation> &CommaLocs, void (Sema::*Completer)(Scope *S, Expr *Data, - Expr **Args, - unsigned NumArgs), + llvm::ArrayRef<Expr *> Args), Expr *Data) { while (1) { if (Tok.is(tok::code_completion)) { if (Completer) - (Actions.*Completer)(getCurScope(), Data, Exprs.data(), Exprs.size()); + (Actions.*Completer)(getCurScope(), Data, Exprs); else Actions.CodeCompleteOrdinaryName(getCurScope(), Sema::PCC_Expression); cutOffParsing(); diff --git a/lib/Sema/SemaCast.cpp b/lib/Sema/SemaCast.cpp index a36f6cbb00..8721c36432 100644 --- a/lib/Sema/SemaCast.cpp +++ b/lib/Sema/SemaCast.cpp @@ -369,7 +369,7 @@ static bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, << CT << srcType << destType << range << src->getSourceRange(); - candidates.NoteCandidates(S, howManyCandidates, &src, 1); + candidates.NoteCandidates(S, howManyCandidates, src); return true; } diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 8825511ff5..2d2bedeec7 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -3707,19 +3707,19 @@ namespace { }; } -static bool anyNullArguments(Expr **Args, unsigned NumArgs) { - if (NumArgs && !Args) +static bool anyNullArguments(llvm::ArrayRef<Expr*> Args) { + if (Args.size() && !Args.data()) return true; - - for (unsigned I = 0; I != NumArgs; ++I) + + for (unsigned I = 0; I != Args.size(); ++I) if (!Args[I]) return true; - + return false; } void Sema::CodeCompleteCall(Scope *S, Expr *FnIn, - Expr **ArgsIn, unsigned NumArgs) { + llvm::ArrayRef<Expr *> Args) { if (!CodeCompleter) return; @@ -3729,11 +3729,10 @@ void Sema::CodeCompleteCall(Scope *S, Expr *FnIn, // e.g., by merging the two kinds of results. Expr *Fn = (Expr *)FnIn; - Expr **Args = (Expr **)ArgsIn; // Ignore type-dependent call expressions entirely. - if (!Fn || Fn->isTypeDependent() || anyNullArguments(Args, NumArgs) || - Expr::hasAnyTypeDependentArguments(Args, NumArgs)) { + if (!Fn || Fn->isTypeDependent() || anyNullArguments(Args) || + Expr::hasAnyTypeDependentArguments(Args)) { CodeCompleteOrdinaryName(S, PCC_Expression); return; } @@ -3751,7 +3750,7 @@ void Sema::CodeCompleteCall(Scope *S, Expr *FnIn, Expr *NakedFn = Fn->IgnoreParenCasts(); if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(NakedFn)) - AddOverloadedCallCandidates(ULE, Args, NumArgs, CandidateSet, + AddOverloadedCallCandidates(ULE, Args, CandidateSet, /*PartialOverloading=*/ true); else if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(NakedFn)) { FunctionDecl *FDecl = dyn_cast<FunctionDecl>(DRE->getDecl()); @@ -3761,9 +3760,8 @@ void Sema::CodeCompleteCall(Scope *S, Expr *FnIn, Results.push_back(ResultCandidate(FDecl)); else // FIXME: access? - AddOverloadCandidate(FDecl, DeclAccessPair::make(FDecl, AS_none), - Args, NumArgs, CandidateSet, - false, /*PartialOverloading*/true); + AddOverloadCandidate(FDecl, DeclAccessPair::make(FDecl, AS_none), Args, + CandidateSet, false, /*PartialOverloading*/true); } } @@ -3786,12 +3784,12 @@ void Sema::CodeCompleteCall(Scope *S, Expr *FnIn, for (unsigned I = 0, N = Results.size(); I != N; ++I) { if (const FunctionType *FType = Results[I].getFunctionType()) if (const FunctionProtoType *Proto = dyn_cast<FunctionProtoType>(FType)) - if (NumArgs < Proto->getNumArgs()) { + if (Args.size() < Proto->getNumArgs()) { if (ParamType.isNull()) - ParamType = Proto->getArgType(NumArgs); + ParamType = Proto->getArgType(Args.size()); else if (!Context.hasSameUnqualifiedType( ParamType.getNonReferenceType(), - Proto->getArgType(NumArgs).getNonReferenceType())) { + Proto->getArgType(Args.size()).getNonReferenceType())) { ParamType = QualType(); break; } @@ -3812,8 +3810,8 @@ void Sema::CodeCompleteCall(Scope *S, Expr *FnIn, if (const FunctionProtoType *Proto = FunctionType->getAs<FunctionProtoType>()) { - if (NumArgs < Proto->getNumArgs()) - ParamType = Proto->getArgType(NumArgs); + if (Args.size() < Proto->getNumArgs()) + ParamType = Proto->getArgType(Args.size()); } } @@ -3823,7 +3821,7 @@ void Sema::CodeCompleteCall(Scope *S, Expr *FnIn, CodeCompleteExpression(S, ParamType); if (!Results.empty()) - CodeCompleter->ProcessOverloadCandidates(*this, NumArgs, Results.data(), + CodeCompleter->ProcessOverloadCandidates(*this, Args.size(), Results.data(), Results.size()); } diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 987ce55c2a..5d6f5ef7f4 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -1257,7 +1257,7 @@ Sema::DecomposeUnqualifiedId(const UnqualifiedId &Id, bool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, - Expr **Args, unsigned NumArgs) { + llvm::ArrayRef<Expr *> Args) { DeclarationName Name = R.getLookupName(); unsigned diagnostic = diag::err_undeclared_var_use; @@ -1387,11 +1387,11 @@ bool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, dyn_cast<FunctionTemplateDecl>(*CD)) AddTemplateOverloadCandidate( FTD, DeclAccessPair::make(FTD, AS_none), ExplicitTemplateArgs, - Args, NumArgs, OCS); + Args, OCS); else if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*CD)) if (!ExplicitTemplateArgs || ExplicitTemplateArgs->size() == 0) AddOverloadCandidate(FD, DeclAccessPair::make(FD, AS_none), - Args, NumArgs, OCS); + Args, OCS); } switch (OCS.BestViableFunction(*this, R.getNameLoc(), Best)) { case OR_Success: @@ -3450,7 +3450,8 @@ Sema::ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc, bool Dependent = false; if (Fn->isTypeDependent()) Dependent = true; - else if (Expr::hasAnyTypeDependentArguments(Args, NumArgs)) + else if (Expr::hasAnyTypeDependentArguments( + llvm::makeArrayRef(Args, NumArgs))) Dependent = true; if (Dependent) { diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 29d2138826..51916b6332 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -771,7 +771,8 @@ Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation TyBeginLoc = TInfo->getTypeLoc().getBeginLoc(); if (Ty->isDependentType() || - CallExpr::hasAnyTypeDependentArguments(Exprs, NumExprs)) { + CallExpr::hasAnyTypeDependentArguments( + llvm::makeArrayRef(Exprs, NumExprs))) { exprs.release(); return Owned(CXXUnresolvedConstructExpr::Create(Context, TInfo, @@ -1205,7 +1206,8 @@ Sema::BuildCXXNew(SourceLocation StartLoc, bool UseGlobal, unsigned NumPlaceArgs = PlacementArgs.size(); if (!AllocType->isDependentType() && - !Expr::hasAnyTypeDependentArguments(PlaceArgs, NumPlaceArgs) && + !Expr::hasAnyTypeDependentArguments( + llvm::makeArrayRef(PlaceArgs, NumPlaceArgs)) && FindAllocationFunctions(StartLoc, SourceRange(PlacementLParen, PlacementRParen), UseGlobal, AllocType, ArraySize, PlaceArgs, @@ -1280,7 +1282,8 @@ Sema::BuildCXXNew(SourceLocation StartLoc, bool UseGlobal, } if (!AllocType->isDependentType() && - !Expr::hasAnyTypeDependentArguments(Inits, NumInits)) { + !Expr::hasAnyTypeDependentArguments( + llvm::makeArrayRef(Inits, NumInits))) { // C++11 [expr.new]p15: // A new-expression that creates an object of type T initializes that // object as follows: @@ -1624,14 +1627,16 @@ bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, if (FunctionTemplateDecl *FnTemplate = dyn_cast<FunctionTemplateDecl>(D)) { AddTemplateOverloadCandidate(FnTemplate, Alloc.getPair(), - /*ExplicitTemplateArgs=*/0, Args, NumArgs, + /*ExplicitTemplateArgs=*/0, + llvm::makeArrayRef(Args, NumArgs), Candidates, /*SuppressUserConversions=*/false); continue; } FunctionDecl *Fn = cast<FunctionDecl>(D); - AddOverloadCandidate(Fn, Alloc.getPair(), Args, NumArgs, Candidates, + AddOverloadCandidate(Fn, Alloc.getPair(), + llvm::makeArrayRef(Args, NumArgs), Candidates, /*SuppressUserConversions=*/false); } @@ -1671,7 +1676,8 @@ bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, if (Diagnose) { Diag(StartLoc, diag::err_ovl_no_viable_function_in_call) << Name << Range; - Candidates.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); + Candidates.NoteCandidates(*this, OCD_AllCandidates, + llvm::makeArrayRef(Args, NumArgs)); } return true; @@ -1679,7 +1685,8 @@ bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, if (Diagnose) { Diag(StartLoc, diag::err_ovl_ambiguous_call) << Name << Range; - Candidates.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs); + Candidates.NoteCandidates(*this, OCD_ViableCandidates, + llvm::makeArrayRef(Args, NumArgs)); } return true; @@ -1690,7 +1697,8 @@ bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, << Name << getDeletedOrUnavailableSuffix(Best->Function) << Range; - Candidates.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); + Candidates.NoteCandidates(*this, OCD_AllCandidates, + llvm::makeArrayRef(Args, NumArgs)); } return true; } diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index df0a49b79e..a9adcbf8bc 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -2738,11 +2738,11 @@ static bool TryListConstructionSpecialCases(Sema &S, dyn_cast<FunctionTemplateDecl>(DefaultConstructor)) S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, /*ExplicitArgs*/ 0, - 0, 0, CandidateSet, + ArrayRef<Expr*>(), CandidateSet, /*SuppressUserConversions*/ false); else S.AddOverloadCandidate(DefaultConstructor, FoundDecl, - 0, 0, CandidateSet, + ArrayRef<Expr*>(), CandidateSet, /*SuppressUserConversions*/ false); Sequence.SetOverloadFailure( InitializationSequence::FK_ListConstructorOverloadFailed, @@ -2825,7 +2825,7 @@ ResolveConstructorOverload(Sema &S, SourceLocation DeclLoc, if (ConstructorTmpl) S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, /*ExplicitArgs*/ 0, - Args, NumArgs, CandidateSet, + llvm::makeArrayRef(Args, NumArgs), CandidateSet, SuppressUserConversions); else { // C++ [over.match.copy]p1: @@ -2838,7 +2838,7 @@ ResolveConstructorOverload(Sema &S, SourceLocation DeclLoc, NumArgs == 1 && Constructor->isCopyOrMoveConstructor(); S.AddOverloadCandidate(Constructor, FoundDecl, - Args, NumArgs, CandidateSet, + llvm::makeArrayRef(Args, NumArgs), CandidateSet, SuppressUserConversions, /*PartialOverloading=*/false, /*AllowExplicit=*/AllowExplicitConv); @@ -3192,11 +3192,11 @@ static OverloadingResult TryRefInitWithConversionFunction(Sema &S, if (ConstructorTmpl) S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, /*ExplicitArgs*/ 0, - &Initializer, 1, CandidateSet, + Initializer, CandidateSet, /*SuppressUserConversions=*/true); else S.AddOverloadCandidate(Constructor, FoundDecl, - &Initializer, 1, CandidateSet, + Initializer, CandidateSet, /*SuppressUserConversions=*/true); } } @@ -3730,11 +3730,11 @@ static void TryUserDefinedConversion(Sema &S, if (ConstructorTmpl) S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, /*ExplicitArgs*/ 0, - &Initializer, 1, CandidateSet, + Initializer, CandidateSet, /*SuppressUserConversions=*/true); else S.AddOverloadCandidate(Constructor, FoundDecl, - &Initializer, 1, CandidateSet, + Initializer, CandidateSet, /*SuppressUserConversions=*/true); } } @@ -3998,7 +3998,7 @@ InitializationSequence::InitializationSequence(Sema &S, QualType DestType = Entity.getType(); if (DestType->isDependentType() || - Expr::hasAnyTypeDependentArguments(Args, NumArgs)) { + Expr::hasAnyTypeDependentArguments(llvm::makeArrayRef(Args, NumArgs))) { SequenceKind = DependentSequence; return; } @@ -4339,7 +4339,7 @@ static void LookupCopyAndMoveConstructors(Sema &S, DeclAccessPair FoundDecl = DeclAccessPair::make(Constructor, Constructor->getAccess()); S.AddOverloadCandidate(Constructor, FoundDecl, - &CurInitExpr, 1, CandidateSet); + CurInitExpr, CandidateSet); continue; } @@ -4358,7 +4358,7 @@ static void LookupCopyAndMoveConstructors(Sema &S, DeclAccessPair FoundDecl = DeclAccessPair::make(ConstructorTmpl, ConstructorTmpl->getAccess()); S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 0, - &CurInitExpr, 1, CandidateSet, true); + CurInitExpr, CandidateSet, true); } } @@ -4468,7 +4468,7 @@ static ExprResult CopyObject(Sema &S, : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange(); - CandidateSet.NoteCandidates(S, OCD_AllCandidates, &CurInitExpr, 1); + CandidateSet.NoteCandidates(S, OCD_AllCandidates, CurInitExpr); if (!IsExtraneousCopy || S.isSFINAEContext()) return ExprError(); return move(CurInit); @@ -4477,7 +4477,7 @@ static ExprResult CopyObject(Sema &S, S.Diag(Loc, diag::err_temp_copy_ambiguous) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange(); - CandidateSet.NoteCandidates(S, OCD_ViableCandidates, &CurInitExpr, 1); + CandidateSet.NoteCandidates(S, OCD_ViableCandidates, CurInitExpr); return ExprError(); case OR_Deleted: @@ -4584,12 +4584,12 @@ static void CheckCXX98CompatAccessibleCopy(Sema &S, case OR_No_Viable_Function: S.Diag(Loc, Diag); - CandidateSet.NoteCandidates(S, OCD_AllCandidates, &CurInitExpr, 1); + CandidateSet.NoteCandidates(S, OCD_AllCandidates, CurInitExpr); break; case OR_Ambiguous: S.Diag(Loc, Diag); - CandidateSet.NoteCandidates(S, OCD_ViableCandidates, &CurInitExpr, 1); + CandidateSet.NoteCandidates(S, OCD_ViableCandidates, CurInitExpr); break; case OR_Deleted: @@ -5433,14 +5433,16 @@ bool InitializationSequence::Diagnose(Sema &S, << DestType << Args[0]->getType() << Args[0]->getSourceRange(); - FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, Args, NumArgs); + FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, + llvm::makeArrayRef(Args, NumArgs)); break; case OR_No_Viable_Function: S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << Args[0]->getType() << DestType.getNonReferenceType() << Args[0]->getSourceRange(); - FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, Args, NumArgs); + FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, + llvm::makeArrayRef(Args, NumArgs)); break; case OR_Deleted: { @@ -5581,7 +5583,7 @@ bool InitializationSequence::Diagnose(Sema &S, S.Diag(Kind.getLocation(), diag::err_ovl_ambiguous_init) << DestType << ArgsRange; FailedCandidateSet.NoteCandidates(S, OCD_ViableCandidates, - Args, NumArgs); + llvm::makeArrayRef(Args, NumArgs)); break; case OR_No_Viable_Function: @@ -5626,7 +5628,8 @@ bool InitializationSequence::Diagnose(Sema &S, S.Diag(Kind.getLocation(), diag::err_ovl_no_viable_function_in_init) << DestType << ArgsRange; - FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, Args, NumArgs); + FailedCandidateSet.NoteCandidates(S, OCD_AllCandidates, + llvm::makeArrayRef(Args, NumArgs)); break; case OR_Deleted: { diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index 44181b141d..b8901e2063 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -2081,7 +2081,7 @@ addAssociatedClassesAndNamespaces(AssociatedLookup &Result, QualType Ty) { /// namespaces searched by argument-dependent lookup /// (C++ [basic.lookup.argdep]) for a given set of arguments. void -Sema::FindAssociatedClassesAndNamespaces(Expr **Args, unsigned NumArgs, +Sema::FindAssociatedClassesAndNamespaces(llvm::ArrayRef<Expr *> Args, AssociatedNamespaceSet &AssociatedNamespaces, AssociatedClassSet &AssociatedClasses) { AssociatedNamespaces.clear(); @@ -2096,7 +2096,7 @@ Sema::FindAssociatedClassesAndNamespaces(Expr **Args, unsigned NumArgs, // classes is determined entirely by the types of the function // arguments (and the namespace of any template template // argument). - for (unsigned ArgIdx = 0; ArgIdx != NumArgs; ++ArgIdx) { + for (unsigned ArgIdx = 0; ArgIdx != Args.size(); ++ArgIdx) { Expr *Arg = Args[ArgIdx]; if (Arg->getType() != Context.OverloadTy) { @@ -2371,10 +2371,11 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD, if (CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(Cand)) { if (SM == CXXCopyAssignment || SM == CXXMoveAssignment) AddMethodCandidate(M, DeclAccessPair::make(M, AS_public), RD, ThisTy, - Classification, &Arg, NumArgs, OCS, true); + Classification, llvm::makeArrayRef(&Arg, NumArgs), + OCS, true); else - AddOverloadCandidate(M, DeclAccessPair::make(M, AS_public), &Arg, - NumArgs, OCS, true); + AddOverloadCandidate(M, DeclAccessPair::make(M, AS_public), + llvm::makeArrayRef(&Arg, NumArgs), OCS, true); // Here we're looking for a const parameter to speed up creation of // implicit copy methods. @@ -2390,11 +2391,13 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD, dyn_cast<FunctionTemplateDecl>(Cand)) { if (SM == CXXCopyAssignment || SM == CXXMoveAssignment) AddMethodTemplateCandidate(Tmpl, DeclAccessPair::make(Tmpl, AS_public), - RD, 0, ThisTy, Classification, &Arg, NumArgs, + RD, 0, ThisTy, Classification, + llvm::makeArrayRef(&Arg, NumArgs), OCS, true); else AddTemplateOverloadCandidate(Tmpl, DeclAccessPair::make(Tmpl, AS_public), - 0, &Arg, NumArgs, OCS, true); + 0, llvm::makeArrayRef(&Arg, NumArgs), + OCS, true); } else { assert(isa<UsingDecl>(Cand) && "illegal Kind of operator = Decl"); } @@ -2559,14 +2562,14 @@ void ADLResult::insert(NamedDecl *New) { void Sema::ArgumentDependentLookup(DeclarationName Name, bool Operator, SourceLocation Loc, - Expr **Args, unsigned NumArgs, + llvm::ArrayRef<Expr *> Args, ADLResult &Result, bool StdNamespaceIsAssociated) { // Find all of the associated namespaces and classes based on the // arguments we have. AssociatedNamespaceSet AssociatedNamespaces; AssociatedClassSet AssociatedClasses; - FindAssociatedClassesAndNamespaces(Args, NumArgs, + FindAssociatedClassesAndNamespaces(Args, AssociatedNamespaces, AssociatedClasses); if (StdNamespaceIsAssociated && StdNamespace) @@ -2575,7 +2578,7 @@ void Sema::ArgumentDependentLookup(DeclarationName Name, bool Operator, QualType T1, T2; if (Operator) { T1 = Args[0]->getType(); - if (NumArgs >= 2) + if (Args.size() >= 2) T2 = Args[1]->getType(); } diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 1a27dbf962..12d4e48352 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -2779,11 +2779,11 @@ IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType, if (ConstructorTmpl) S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, /*ExplicitArgs*/ 0, - &From, 1, CandidateSet, + From, CandidateSet, /*SuppressUserConversions=*/true); else S.AddOverloadCandidate(Constructor, FoundDecl, - &From, 1, CandidateSet, + From, CandidateSet, /*SuppressUserConversions=*/true); } } @@ -2907,7 +2907,8 @@ IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, if (ConstructorTmpl) |