Use the new statement/expression profiling code to unique dependent
template arguments, as in template specialization types. This permits
matching out-of-line definitions of members for class templates that
involve non-type template parameters.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77462 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp
index 04961ed..f937d15 100644
--- a/lib/AST/Type.cpp
+++ b/lib/AST/Type.cpp
@@ -1033,11 +1033,13 @@
}
TemplateSpecializationType::
-TemplateSpecializationType(TemplateName T, const TemplateArgument *Args,
+TemplateSpecializationType(ASTContext &Context, TemplateName T,
+ const TemplateArgument *Args,
unsigned NumArgs, QualType Canon)
: Type(TemplateSpecialization,
Canon.isNull()? QualType(this, 0) : Canon,
T.isDependent() || anyDependentTemplateArguments(Args, NumArgs)),
+ Context(Context),
Template(T), NumArgs(NumArgs)
{
assert((!Canon.isNull() ||
@@ -1074,10 +1076,11 @@
TemplateSpecializationType::Profile(llvm::FoldingSetNodeID &ID,
TemplateName T,
const TemplateArgument *Args,
- unsigned NumArgs) {
+ unsigned NumArgs,
+ ASTContext &Context) {
T.Profile(ID);
for (unsigned Idx = 0; Idx < NumArgs; ++Idx)
- Args[Idx].Profile(ID);
+ Args[Idx].Profile(ID, Context);
}
const Type *QualifierSet::strip(const Type* T) {