diff options
| author | John McCall <rjmccall@apple.com> | 2016-03-01 02:09:25 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2016-03-01 02:09:25 +0000 |
| commit | c8e321d4bc6862f4939ed5200b5d4cbb9fb41a90 (patch) | |
| tree | 8bdccc67a7c4cfce0c74bf0dee7e8ff064b9cbac /clang/include | |
| parent | 5d7cf778e491db4b5fff2bebfec0a1ed24362d43 (diff) | |
| download | bcm5719-llvm-c8e321d4bc6862f4939ed5200b5d4cbb9fb41a90.tar.gz bcm5719-llvm-c8e321d4bc6862f4939ed5200b5d4cbb9fb41a90.zip | |
Fix the template instantiation of ExtParameterInfos; tests to follow.
llvm-svn: 262289
Diffstat (limited to 'clang/include')
| -rw-r--r-- | clang/include/clang/AST/Type.h | 5 | ||||
| -rw-r--r-- | clang/include/clang/Sema/Sema.h | 24 |
2 files changed, 28 insertions, 1 deletions
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 42334252612..d6e30e4f068 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -3355,6 +3355,11 @@ public: return ArrayRef<ExtParameterInfo>(getExtParameterInfosBuffer(), getNumParams()); } + const ExtParameterInfo *getExtParameterInfosOrNull() const { + if (!hasExtParameterInfos()) + return nullptr; + return getExtParameterInfosBuffer(); + } ExtParameterInfo getExtParameterInfo(unsigned I) const { assert(I < getNumParams() && "parameter index out of range"); diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 22a2ef7454b..8ff47e93ce0 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -6982,6 +6982,26 @@ public: SavedPendingLocalImplicitInstantiations; }; + class ExtParameterInfoBuilder { + SmallVector<FunctionProtoType::ExtParameterInfo, 4> Infos; + bool HasInteresting = false; + + public: + void set(unsigned index, FunctionProtoType::ExtParameterInfo info) { + assert(Infos.size() <= index); + Infos.resize(index); + Infos.push_back(info); + + if (!HasInteresting) + HasInteresting = (info != FunctionProtoType::ExtParameterInfo()); + } + + const FunctionProtoType::ExtParameterInfo * + getPointerOrNull(unsigned numParams) { + return (HasInteresting ? Infos.data() : nullptr); + } + }; + void PerformPendingInstantiations(bool LocalOnly = false); TypeSourceInfo *SubstType(TypeSourceInfo *T, @@ -7011,9 +7031,11 @@ public: bool ExpectParameterPack); bool SubstParmTypes(SourceLocation Loc, ParmVarDecl **Params, unsigned NumParams, + const FunctionProtoType::ExtParameterInfo *ExtParamInfos, const MultiLevelTemplateArgumentList &TemplateArgs, SmallVectorImpl<QualType> &ParamTypes, - SmallVectorImpl<ParmVarDecl *> *OutParams = nullptr); + SmallVectorImpl<ParmVarDecl *> *OutParams, + ExtParameterInfoBuilder &ParamInfos); ExprResult SubstExpr(Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs); |

