From a4ca710d9ca9a779a97050149a483f7a5b24dd02 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sun, 9 Aug 2020 23:30:30 -0700 Subject: [PATCH] More cleanup after removing the ability to reference a dependent VarTemplateSpecializationDecl. --- clang/lib/Sema/SemaExpr.cpp | 41 +++++++++++++++-------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index fe997e7..23b2fbd 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -17925,8 +17925,6 @@ static void DoMarkVarDeclReferenced(Sema &SemaRef, SourceLocation Loc, bool NeedDefinition = OdrUse == OdrUseContext::Used || NeededForConstantEvaluation; - VarTemplateSpecializationDecl *VarSpec = - dyn_cast(Var); assert(!isa(Var) && "Can't instantiate a partial template specialization."); @@ -17961,30 +17959,21 @@ static void DoMarkVarDeclReferenced(Sema &SemaRef, SourceLocation Loc, Var->setTemplateSpecializationKind(TSK, PointOfInstantiation); } - bool InstantiationDependent = false; - bool IsNonDependent = - VarSpec ? !TemplateSpecializationType::anyDependentTemplateArguments( - VarSpec->getTemplateArgsInfo(), InstantiationDependent) - : true; - - // Do not instantiate specializations that are still type-dependent. - if (IsNonDependent) { - if (UsableInConstantExpr) { - // Do not defer instantiations of variables that could be used in a - // constant expression. - SemaRef.runWithSufficientStackSpace(PointOfInstantiation, [&] { - SemaRef.InstantiateVariableDefinition(PointOfInstantiation, Var); - }); - } else if (FirstInstantiation || - isa(Var)) { - // FIXME: For a specialization of a variable template, we don't - // distinguish between "declaration and type implicitly instantiated" - // and "implicit instantiation of definition requested", so we have - // no direct way to avoid enqueueing the pending instantiation - // multiple times. - SemaRef.PendingInstantiations - .push_back(std::make_pair(Var, PointOfInstantiation)); - } + if (UsableInConstantExpr) { + // Do not defer instantiations of variables that could be used in a + // constant expression. + SemaRef.runWithSufficientStackSpace(PointOfInstantiation, [&] { + SemaRef.InstantiateVariableDefinition(PointOfInstantiation, Var); + }); + } else if (FirstInstantiation || + isa(Var)) { + // FIXME: For a specialization of a variable template, we don't + // distinguish between "declaration and type implicitly instantiated" + // and "implicit instantiation of definition requested", so we have + // no direct way to avoid enqueueing the pending instantiation + // multiple times. + SemaRef.PendingInstantiations + .push_back(std::make_pair(Var, PointOfInstantiation)); } } } -- 2.7.4