From 95e3872918557b55b62121a7df5f1ee76d45881a Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Wed, 4 Apr 2012 02:38:36 +0000 Subject: [PATCH] If something already instantiated is reinstantiated as an explicit definition, keep the latter. No test. This was noticed when poking around something else with GDB. I'm not able to figure out a testcase that would break due to this bug. Sorry. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153992 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaTemplateInstantiateDecl.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index ba1bc9fd2a..8afe7aca97 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -2661,8 +2661,13 @@ void Sema::InstantiateStaticDataMemberDefinition( Consumer.HandleCXXStaticMemberVarInstantiation(Var); // If we already have a definition, we're done. - if (Var->getDefinition()) + if (VarDecl *Def = Var->getDefinition()) { + // We may be explicitly instantiating something we've already implicitly + // instantiated. + Def->setTemplateSpecializationKind(Var->getTemplateSpecializationKind(), + PointOfInstantiation); return; + } InstantiatingTemplate Inst(*this, PointOfInstantiation, Var); if (Inst) -- 2.40.0