@@ -3602,11 +3602,11 @@ Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
3602
3602
return nullptr ;
3603
3603
3604
3604
return VisitVarTemplateSpecializationDecl (
3605
- InstVarTemplate, D, InsertPos, VarTemplateArgsInfo, Converted, PrevDecl);
3605
+ InstVarTemplate, D, VarTemplateArgsInfo, Converted, PrevDecl);
3606
3606
}
3607
3607
3608
3608
Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl (
3609
- VarTemplateDecl *VarTemplate, VarDecl *D, void *InsertPos,
3609
+ VarTemplateDecl *VarTemplate, VarDecl *D,
3610
3610
const TemplateArgumentListInfo &TemplateArgsInfo,
3611
3611
ArrayRef<TemplateArgument> Converted,
3612
3612
VarTemplateSpecializationDecl *PrevDecl) {
@@ -3629,8 +3629,11 @@ Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
3629
3629
SemaRef.Context , Owner, D->getInnerLocStart (), D->getLocation (),
3630
3630
VarTemplate, DI->getType (), DI, D->getStorageClass (), Converted);
3631
3631
Var->setTemplateArgsInfo (TemplateArgsInfo);
3632
- if (InsertPos)
3632
+ if (!PrevDecl) {
3633
+ void *InsertPos = nullptr ;
3634
+ VarTemplate->findSpecialization (Converted, InsertPos);
3633
3635
VarTemplate->AddSpecialization (Var, InsertPos);
3636
+ }
3634
3637
3635
3638
if (SemaRef.getLangOpts ().OpenCL )
3636
3639
SemaRef.deduceOpenCLAddressSpace (Var);
@@ -4839,7 +4842,7 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
4839
4842
const TemplateArgumentList &TemplateArgList,
4840
4843
const TemplateArgumentListInfo &TemplateArgsInfo,
4841
4844
SmallVectorImpl<TemplateArgument> &Converted,
4842
- SourceLocation PointOfInstantiation, void *InsertPos,
4845
+ SourceLocation PointOfInstantiation,
4843
4846
LateInstantiatedAttrVec *LateAttrs,
4844
4847
LocalInstantiationScope *StartingScope) {
4845
4848
if (FromVar->isInvalidDecl ())
@@ -4878,7 +4881,7 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
4878
4881
4879
4882
return cast_or_null<VarTemplateSpecializationDecl>(
4880
4883
Instantiator.VisitVarTemplateSpecializationDecl (
4881
- VarTemplate, FromVar, InsertPos, TemplateArgsInfo, Converted));
4884
+ VarTemplate, FromVar, TemplateArgsInfo, Converted));
4882
4885
}
4883
4886
4884
4887
// / Instantiates a variable template specialization by completing it
@@ -5310,8 +5313,8 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
5310
5313
TemplateDeclInstantiator Instantiator (*this , Var->getDeclContext (),
5311
5314
TemplateArgs);
5312
5315
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 ));
5315
5318
if (Var) {
5316
5319
llvm::PointerUnion<VarTemplateDecl *,
5317
5320
VarTemplatePartialSpecializationDecl *> PatternPtr =
@@ -5321,12 +5324,6 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
5321
5324
cast<VarTemplateSpecializationDecl>(Var)->setInstantiationOf (
5322
5325
Partial, &VarSpec->getTemplateInstantiationArgs ());
5323
5326
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
-
5330
5327
// Attach the initializer.
5331
5328
InstantiateVariableInitializer (Var, Def, TemplateArgs);
5332
5329
}
0 commit comments