File tree 2 files changed +17
-8
lines changed
interpreter/llvm-project/clang/lib/Serialization
2 files changed +17
-8
lines changed Original file line number Diff line number Diff line change @@ -7723,14 +7723,8 @@ void ASTReader::CompleteRedeclChain(const Decl *D) {
7723
7723
}
7724
7724
}
7725
7725
7726
- if (Template) {
7727
- // For partitial specialization, load all the specializations for safety.
7728
- if (isa<ClassTemplatePartialSpecializationDecl,
7729
- VarTemplatePartialSpecializationDecl>(D))
7730
- Template->loadLazySpecializationsImpl();
7731
- else
7732
- Template->loadLazySpecializationsImpl(Args);
7733
- }
7726
+ if (Template)
7727
+ Template->loadLazySpecializationsImpl(Args);
7734
7728
}
7735
7729
7736
7730
CXXCtorInitializer **
Original file line number Diff line number Diff line change @@ -196,6 +196,21 @@ void TemplateArgumentHasher::AddDecl(const Decl *D) {
196
196
}
197
197
198
198
AddDeclarationName (ND->getDeclName ());
199
+
200
+ // If this was a specialization we should take into account its template
201
+ // arguments. This helps to reduce collisions coming when visiting template
202
+ // specialization types (eg. when processing type template arguments).
203
+ ArrayRef<TemplateArgument> Args;
204
+ if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
205
+ Args = CTSD->getTemplateArgs ().asArray ();
206
+ else if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
207
+ Args = VTSD->getTemplateArgs ().asArray ();
208
+ else if (auto *FD = dyn_cast<FunctionDecl>(D))
209
+ if (FD->getTemplateSpecializationArgs ())
210
+ Args = FD->getTemplateSpecializationArgs ()->asArray ();
211
+
212
+ for (auto &TA : Args)
213
+ AddTemplateArgument (TA);
199
214
}
200
215
201
216
void TemplateArgumentHasher::AddQualType (QualType T) {
You can’t perform that action at this time.
0 commit comments