@@ -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);
@@ -5311,7 +5314,7 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
5311
5314
TemplateArgs);
5312
5315
Var = cast_or_null<VarDecl>(Instantiator.VisitVarTemplateSpecializationDecl (
5313
5316
VarSpec->getSpecializedTemplate (), Def, nullptr ,
5314
- VarSpec->getTemplateArgsInfo (), VarSpec->getTemplateArgs ().asArray ()));
5317
+ VarSpec->getTemplateArgsInfo (), 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