@@ -3628,11 +3628,11 @@ Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
3628
3628
return nullptr ;
3629
3629
3630
3630
return VisitVarTemplateSpecializationDecl (
3631
- InstVarTemplate, D, InsertPos, VarTemplateArgsInfo, Converted, PrevDecl);
3631
+ InstVarTemplate, D, VarTemplateArgsInfo, Converted, PrevDecl);
3632
3632
}
3633
3633
3634
3634
Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl (
3635
- VarTemplateDecl *VarTemplate, VarDecl *D, void *InsertPos,
3635
+ VarTemplateDecl *VarTemplate, VarDecl *D,
3636
3636
const TemplateArgumentListInfo &TemplateArgsInfo,
3637
3637
ArrayRef<TemplateArgument> Converted,
3638
3638
VarTemplateSpecializationDecl *PrevDecl) {
@@ -3655,8 +3655,11 @@ Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
3655
3655
SemaRef.Context , Owner, D->getInnerLocStart (), D->getLocation (),
3656
3656
VarTemplate, DI->getType (), DI, D->getStorageClass (), Converted);
3657
3657
Var->setTemplateArgsInfo (TemplateArgsInfo);
3658
- if (InsertPos)
3658
+ if (!PrevDecl) {
3659
+ void *InsertPos = nullptr ;
3660
+ VarTemplate->findSpecialization (Converted, InsertPos);
3659
3661
VarTemplate->AddSpecialization (Var, InsertPos);
3662
+ }
3660
3663
3661
3664
if (SemaRef.getLangOpts ().OpenCL )
3662
3665
SemaRef.deduceOpenCLAddressSpace (Var);
@@ -4865,7 +4868,7 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
4865
4868
const TemplateArgumentList &TemplateArgList,
4866
4869
const TemplateArgumentListInfo &TemplateArgsInfo,
4867
4870
SmallVectorImpl<TemplateArgument> &Converted,
4868
- SourceLocation PointOfInstantiation, void *InsertPos,
4871
+ SourceLocation PointOfInstantiation,
4869
4872
LateInstantiatedAttrVec *LateAttrs,
4870
4873
LocalInstantiationScope *StartingScope) {
4871
4874
if (FromVar->isInvalidDecl ())
@@ -4904,7 +4907,7 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
4904
4907
4905
4908
return cast_or_null<VarTemplateSpecializationDecl>(
4906
4909
Instantiator.VisitVarTemplateSpecializationDecl (
4907
- VarTemplate, FromVar, InsertPos, TemplateArgsInfo, Converted));
4910
+ VarTemplate, FromVar, TemplateArgsInfo, Converted));
4908
4911
}
4909
4912
4910
4913
// / Instantiates a variable template specialization by completing it
@@ -5327,8 +5330,8 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
5327
5330
TemplateDeclInstantiator Instantiator (*this , Var->getDeclContext (),
5328
5331
TemplateArgs);
5329
5332
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 ));
5332
5335
if (Var) {
5333
5336
llvm::PointerUnion<VarTemplateDecl *,
5334
5337
VarTemplatePartialSpecializationDecl *> PatternPtr =
@@ -5338,12 +5341,6 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
5338
5341
cast<VarTemplateSpecializationDecl>(Var)->setInstantiationOf (
5339
5342
Partial, &VarSpec->getTemplateInstantiationArgs ());
5340
5343
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
-
5347
5344
// Attach the initializer.
5348
5345
InstantiateVariableInitializer (Var, Def, TemplateArgs);
5349
5346
}
0 commit comments