diff options
Diffstat (limited to 'lib/Sema')
-rw-r--r-- | lib/Sema/SemaTemplate.cpp | 6 | ||||
-rw-r--r-- | lib/Sema/SemaTemplateDeduction.cpp | 6 | ||||
-rw-r--r-- | lib/Sema/SemaTemplateInstantiate.cpp | 4 | ||||
-rw-r--r-- | lib/Sema/SemaType.cpp | 12 | ||||
-rw-r--r-- | lib/Sema/TreeTransform.h | 28 |
5 files changed, 17 insertions, 39 deletions
diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index 75f255e945..fd0641995b 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -5648,11 +5648,15 @@ Decl *Sema::ActOnStartOfFunctionTemplateDef(Scope *FnBodyScope, /// \brief Strips various properties off an implicit instantiation /// that has just been explicitly specialized. static void StripImplicitInstantiation(NamedDecl *D) { - // FIXME: "make check" is clean if the call to dropAttrs() is commented out. D->dropAttrs(); if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { FD->setInlineSpecified(false); + + for (FunctionDecl::param_iterator I = FD->param_begin(), + E = FD->param_end(); + I != E; ++I) + (*I)->dropAttrs(); } } diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp index c479895c4b..f3bbe8a0f1 100644 --- a/lib/Sema/SemaTemplateDeduction.cpp +++ b/lib/Sema/SemaTemplateDeduction.cpp @@ -2418,13 +2418,9 @@ Sema::SubstituteExplicitTemplateArguments( if (FunctionType) { *FunctionType = BuildFunctionType(ResultType, ParamTypes, - Proto->isVariadic(), - Proto->hasTrailingReturn(), - Proto->getTypeQuals(), - Proto->getRefQualifier(), Function->getLocation(), Function->getDeclName(), - Proto->getExtInfo()); + Proto->getExtProtoInfo()); if (FunctionType->isNull() || Trap.hasErrorOccurred()) return TDK_SubstitutionFailure; } diff --git a/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp index 79e16f3942..255df80d66 100644 --- a/lib/Sema/SemaTemplateInstantiate.cpp +++ b/lib/Sema/SemaTemplateInstantiate.cpp @@ -1716,7 +1716,9 @@ ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm, NewParm->setScopeInfo(OldParm->getFunctionScopeDepth(), OldParm->getFunctionScopeIndex() + indexAdjustment); - + + InstantiateAttrs(TemplateArgs, OldParm, NewParm); + return NewParm; } diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index fb25a16c01..e9ccbecaba 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -1632,11 +1632,8 @@ QualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, QualType Sema::BuildFunctionType(QualType T, llvm::MutableArrayRef<QualType> ParamTypes, - bool Variadic, bool HasTrailingReturn, - unsigned Quals, - RefQualifierKind RefQualifier, SourceLocation Loc, DeclarationName Entity, - FunctionType::ExtInfo Info) { + const FunctionProtoType::ExtProtoInfo &EPI) { if (T->isArrayType() || T->isFunctionType()) { Diag(Loc, diag::err_func_returning_array_function) << T->isFunctionType() << T; @@ -1670,13 +1667,6 @@ QualType Sema::BuildFunctionType(QualType T, if (Invalid) return QualType(); - FunctionProtoType::ExtProtoInfo EPI; - EPI.Variadic = Variadic; - EPI.HasTrailingReturn = HasTrailingReturn; - EPI.TypeQuals = Quals; - EPI.RefQualifier = RefQualifier; - EPI.ExtInfo = Info; - return Context.getFunctionType(T, ParamTypes, EPI); } diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index af82abac93..7112e7d5f3 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -714,10 +714,7 @@ public: /// Subclasses may override this routine to provide different behavior. QualType RebuildFunctionProtoType(QualType T, llvm::MutableArrayRef<QualType> ParamTypes, - bool Variadic, bool HasTrailingReturn, - unsigned Quals, - RefQualifierKind RefQualifier, - const FunctionType::ExtInfo &Info); + const FunctionProtoType::ExtProtoInfo &EPI); /// \brief Build a new unprototyped function type. QualType RebuildFunctionNoProtoType(QualType ResultType); @@ -4266,11 +4263,7 @@ TreeTransform<Derived>::TransformFunctionProtoType(TypeLocBuilder &TLB, T->getNumArgs() != ParamTypes.size() || !std::equal(T->arg_type_begin(), T->arg_type_end(), ParamTypes.begin())) { Result = getDerived().RebuildFunctionProtoType(ResultType, ParamTypes, - T->isVariadic(), - T->hasTrailingReturn(), - T->getTypeQuals(), - T->getRefQualifier(), - T->getExtInfo()); + T->getExtProtoInfo()); if (Result.isNull()) return QualType(); } @@ -8834,7 +8827,7 @@ TreeTransform<Derived>::TransformBlockExpr(BlockExpr *E) { return ExprError(); } - const FunctionType *exprFunctionType = E->getFunctionType(); + const FunctionProtoType *exprFunctionType = E->getFunctionType(); QualType exprResultType = getDerived().TransformType(exprFunctionType->getResultType()); @@ -8849,9 +8842,7 @@ TreeTransform<Derived>::TransformBlockExpr(BlockExpr *E) { QualType functionType = getDerived().RebuildFunctionProtoType(exprResultType, paramTypes, - oldBlock->isVariadic(), - false, 0, RQ_None, - exprFunctionType->getExtInfo()); + exprFunctionType->getExtProtoInfo()); blockScope->FunctionType = functionType; // Set the parameters on the block decl. @@ -9070,16 +9061,11 @@ template<typename Derived> QualType TreeTransform<Derived>::RebuildFunctionProtoType( QualType T, llvm::MutableArrayRef<QualType> ParamTypes, - bool Variadic, - bool HasTrailingReturn, - unsigned Quals, - RefQualifierKind RefQualifier, - const FunctionType::ExtInfo &Info) { - return SemaRef.BuildFunctionType(T, ParamTypes, Variadic, - HasTrailingReturn, Quals, RefQualifier, + const FunctionProtoType::ExtProtoInfo &EPI) { + return SemaRef.BuildFunctionType(T, ParamTypes, getDerived().getBaseLocation(), getDerived().getBaseEntity(), - Info); + EPI); } template<typename Derived> |