@@ -3602,11 +3602,11 @@ Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
36023602 return nullptr ;
36033603
36043604 return VisitVarTemplateSpecializationDecl (
3605- InstVarTemplate, D, InsertPos, VarTemplateArgsInfo, Converted, PrevDecl);
3605+ InstVarTemplate, D, VarTemplateArgsInfo, Converted, PrevDecl);
36063606}
36073607
36083608Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl (
3609- VarTemplateDecl *VarTemplate, VarDecl *D, void *InsertPos,
3609+ VarTemplateDecl *VarTemplate, VarDecl *D,
36103610 const TemplateArgumentListInfo &TemplateArgsInfo,
36113611 ArrayRef<TemplateArgument> Converted,
36123612 VarTemplateSpecializationDecl *PrevDecl) {
@@ -3629,8 +3629,11 @@ Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
36293629 SemaRef.Context , Owner, D->getInnerLocStart (), D->getLocation (),
36303630 VarTemplate, DI->getType (), DI, D->getStorageClass (), Converted);
36313631 Var->setTemplateArgsInfo (TemplateArgsInfo);
3632- if (InsertPos)
3632+ if (!PrevDecl) {
3633+ void *InsertPos = nullptr ;
3634+ VarTemplate->findSpecialization (Converted, InsertPos);
36333635 VarTemplate->AddSpecialization (Var, InsertPos);
3636+ }
36343637
36353638 if (SemaRef.getLangOpts ().OpenCL )
36363639 SemaRef.deduceOpenCLAddressSpace (Var);
@@ -4839,7 +4842,7 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
48394842 const TemplateArgumentList &TemplateArgList,
48404843 const TemplateArgumentListInfo &TemplateArgsInfo,
48414844 SmallVectorImpl<TemplateArgument> &Converted,
4842- SourceLocation PointOfInstantiation, void *InsertPos,
4845+ SourceLocation PointOfInstantiation,
48434846 LateInstantiatedAttrVec *LateAttrs,
48444847 LocalInstantiationScope *StartingScope) {
48454848 if (FromVar->isInvalidDecl ())
@@ -4878,7 +4881,7 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
48784881
48794882 return cast_or_null<VarTemplateSpecializationDecl>(
48804883 Instantiator.VisitVarTemplateSpecializationDecl (
4881- VarTemplate, FromVar, InsertPos, TemplateArgsInfo, Converted));
4884+ VarTemplate, FromVar, TemplateArgsInfo, Converted));
48824885}
48834886
48844887// / Instantiates a variable template specialization by completing it
@@ -5310,8 +5313,8 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
53105313 TemplateDeclInstantiator Instantiator (*this , Var->getDeclContext (),
53115314 TemplateArgs);
53125315 Var = cast_or_null<VarDecl>(Instantiator.VisitVarTemplateSpecializationDecl (
5313- VarSpec->getSpecializedTemplate (), Def, nullptr ,
5314- VarSpec->getTemplateArgsInfo (), VarSpec-> getTemplateArgs ().asArray ()));
5316+ VarSpec->getSpecializedTemplate (), Def, VarSpec-> getTemplateArgsInfo () ,
5317+ VarSpec->getTemplateArgs ().asArray (), VarSpec ));
53155318 if (Var) {
53165319 llvm::PointerUnion<VarTemplateDecl *,
53175320 VarTemplatePartialSpecializationDecl *> PatternPtr =
@@ -5321,12 +5324,6 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
53215324 cast<VarTemplateSpecializationDecl>(Var)->setInstantiationOf (
53225325 Partial, &VarSpec->getTemplateInstantiationArgs ());
53235326
5324- // Merge the definition with the declaration.
5325- LookupResult R (*this , Var->getDeclName (), Var->getLocation (),
5326- LookupOrdinaryName, forRedeclarationInCurContext ());
5327- R.addDecl (OldVar);
5328- MergeVarDecl (Var, R);
5329-
53305327 // Attach the initializer.
53315328 InstantiateVariableInitializer (Var, Def, TemplateArgs);
53325329 }
0 commit comments