summaryrefslogtreecommitdiffstats
path: root/clang/include
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2016-03-01 02:09:25 +0000
committerJohn McCall <rjmccall@apple.com>2016-03-01 02:09:25 +0000
commitc8e321d4bc6862f4939ed5200b5d4cbb9fb41a90 (patch)
tree8bdccc67a7c4cfce0c74bf0dee7e8ff064b9cbac /clang/include
parent5d7cf778e491db4b5fff2bebfec0a1ed24362d43 (diff)
downloadbcm5719-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.h5
-rw-r--r--clang/include/clang/Sema/Sema.h24
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);
OpenPOWER on IntegriCloud