@@ -3628,11 +3628,11 @@ Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
36283628 return nullptr ;
36293629
36303630 return VisitVarTemplateSpecializationDecl (
3631- InstVarTemplate, D, InsertPos, VarTemplateArgsInfo, Converted, PrevDecl);
3631+ InstVarTemplate, D, VarTemplateArgsInfo, Converted, PrevDecl);
36323632}
36333633
36343634Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl (
3635- VarTemplateDecl *VarTemplate, VarDecl *D, void *InsertPos,
3635+ VarTemplateDecl *VarTemplate, VarDecl *D,
36363636 const TemplateArgumentListInfo &TemplateArgsInfo,
36373637 ArrayRef<TemplateArgument> Converted,
36383638 VarTemplateSpecializationDecl *PrevDecl) {
@@ -3655,8 +3655,11 @@ Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
36553655 SemaRef.Context , Owner, D->getInnerLocStart (), D->getLocation (),
36563656 VarTemplate, DI->getType (), DI, D->getStorageClass (), Converted);
36573657 Var->setTemplateArgsInfo (TemplateArgsInfo);
3658- if (InsertPos)
3658+ if (!PrevDecl) {
3659+ void *InsertPos = nullptr ;
3660+ VarTemplate->findSpecialization (Converted, InsertPos);
36593661 VarTemplate->AddSpecialization (Var, InsertPos);
3662+ }
36603663
36613664 if (SemaRef.getLangOpts ().OpenCL )
36623665 SemaRef.deduceOpenCLAddressSpace (Var);
@@ -4865,7 +4868,7 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
48654868 const TemplateArgumentList &TemplateArgList,
48664869 const TemplateArgumentListInfo &TemplateArgsInfo,
48674870 SmallVectorImpl<TemplateArgument> &Converted,
4868- SourceLocation PointOfInstantiation, void *InsertPos,
4871+ SourceLocation PointOfInstantiation,
48694872 LateInstantiatedAttrVec *LateAttrs,
48704873 LocalInstantiationScope *StartingScope) {
48714874 if (FromVar->isInvalidDecl ())
@@ -4904,7 +4907,7 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
49044907
49054908 return cast_or_null<VarTemplateSpecializationDecl>(
49064909 Instantiator.VisitVarTemplateSpecializationDecl (
4907- VarTemplate, FromVar, InsertPos, TemplateArgsInfo, Converted));
4910+ VarTemplate, FromVar, TemplateArgsInfo, Converted));
49084911}
49094912
49104913// / Instantiates a variable template specialization by completing it
@@ -5327,8 +5330,8 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
53275330 TemplateDeclInstantiator Instantiator (*this , Var->getDeclContext (),
53285331 TemplateArgs);
53295332 Var = cast_or_null<VarDecl>(Instantiator.VisitVarTemplateSpecializationDecl (
5330- VarSpec->getSpecializedTemplate (), Def, nullptr ,
5331- VarSpec->getTemplateArgsInfo (), VarSpec-> getTemplateArgs ().asArray ()));
5333+ VarSpec->getSpecializedTemplate (), Def, VarSpec-> getTemplateArgsInfo () ,
5334+ VarSpec->getTemplateArgs ().asArray (), VarSpec ));
53325335 if (Var) {
53335336 llvm::PointerUnion<VarTemplateDecl *,
53345337 VarTemplatePartialSpecializationDecl *> PatternPtr =
@@ -5338,12 +5341,6 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
53385341 cast<VarTemplateSpecializationDecl>(Var)->setInstantiationOf (
53395342 Partial, &VarSpec->getTemplateInstantiationArgs ());
53405343
5341- // Merge the definition with the declaration.
5342- LookupResult R (*this , Var->getDeclName (), Var->getLocation (),
5343- LookupOrdinaryName, forRedeclarationInCurContext ());
5344- R.addDecl (OldVar);
5345- MergeVarDecl (Var, R);
5346-
53475344 // Attach the initializer.
53485345 InstantiateVariableInitializer (Var, Def, TemplateArgs);
53495346 }
0 commit comments