Commit 9c24fca2 authored by Saar Raz's avatar Saar Raz
Browse files

[Concepts] Fix incorrect TemplateArgs for introduction of local parameters

The wrong set of TemplateArgs was being provided to addInstantiatedParametersToScope.
Caused bug #44658.
parent 29e411b3
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -4246,18 +4246,17 @@ bool Sema::CheckInstantiatedFunctionTemplateConstraints(
  Sema::ContextRAII savedContext(*this, Decl);
  LocalInstantiationScope Scope(*this);

  MultiLevelTemplateArgumentList MLTAL =
    getTemplateInstantiationArgs(Decl, nullptr, /*RelativeToPrimary*/true);

  // If this is not an explicit specialization - we need to get the instantiated
  // version of the template arguments and add them to scope for the
  // substitution.
  if (Decl->isTemplateInstantiation()) {
    InstantiatingTemplate Inst(*this, Decl->getPointOfInstantiation(),
        InstantiatingTemplate::ConstraintsCheck{}, Decl->getPrimaryTemplate(),
        MLTAL.getInnermost(), SourceRange());
        TemplateArgs, SourceRange());
    if (Inst.isInvalid())
      return true;
    MultiLevelTemplateArgumentList MLTAL(
        *Decl->getTemplateSpecializationArgs());
    if (addInstantiatedParametersToScope(
            *this, Decl, Decl->getPrimaryTemplate()->getTemplatedDecl(),
            Scope, MLTAL))
+7 −0
Original line number Diff line number Diff line
@@ -51,3 +51,10 @@ struct S2 {

static_assert((S2<int>::f(), true));

template<typename T>
struct S3 {
	template<typename... Args> requires true
	static constexpr void f(Args...) { }
};

static_assert((S3<int>::f(), true));
 No newline at end of file