Skip to content

Commit 573e532

Browse files
author
git apple-llvm automerger
committed
Merge commit 'fc23bc9b30bf' from llvm.org/release/11.x into apple/stable/20200714
2 parents 9f3874d + fc23bc9 commit 573e532

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

clang/lib/Sema/SemaTemplateInstantiateDecl.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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);
@@ -5311,7 +5314,7 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
53115314
TemplateArgs);
53125315
Var = cast_or_null<VarDecl>(Instantiator.VisitVarTemplateSpecializationDecl(
53135316
VarSpec->getSpecializedTemplate(), Def, nullptr,
5314-
VarSpec->getTemplateArgsInfo(), VarSpec->getTemplateArgs().asArray()));
5317+
VarSpec->getTemplateArgsInfo(), 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
}

clang/test/SemaTemplate/instantiate-var-template.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,10 @@ namespace PR24483 {
4040
template<typename... T> A<T...> models;
4141
template<> struct B models<>; // expected-error {{incomplete type 'struct B'}} expected-note {{forward declaration}}
4242
}
43+
44+
namespace InvalidInsertPos {
45+
template<typename T, int N> T v;
46+
template<int N> decltype(v<int, N-1>) v<int, N>;
47+
template<> int v<int, 0>;
48+
int k = v<int, 500>;
49+
}

0 commit comments

Comments
 (0)