From: Richard Smith Date: Sun, 15 Jul 2012 23:29:50 +0000 (+0000) Subject: PR13368: Halve the instantiation depth of this test again. Apparently, FreeBSD X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f5baeb4af53b79a0d92a4ab7b7eba19bd721f344;p=clang PR13368: Halve the instantiation depth of this test again. Apparently, FreeBSD has a much lower default stack limit than the systems I have access to. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160240 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index 4fef11f2a8..eacf505442 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -1862,8 +1862,7 @@ TemplateSpecializationType(TemplateName T, Canon.isNull()? T.isDependent() : Canon->isInstantiationDependentType(), false, - Canon.isNull()? T.containsUnexpandedParameterPack() - : Canon->containsUnexpandedParameterPack()), + T.containsUnexpandedParameterPack()), Template(T), NumArgs(NumArgs), TypeAlias(!AliasedType.isNull()) { assert(!T.getAsDependentTemplateName() && "Use DependentTemplateSpecializationType for dependent template-name"); @@ -1888,6 +1887,8 @@ TemplateSpecializationType(TemplateName T, // arguments is. Given: // template using U = int; // U is always non-dependent, irrespective of the type T. + // However, U contains an unexpanded parameter pack, even though + // its expansion (and thus its desugared type) doesn't. if (Canon.isNull() && Args[Arg].isDependent()) setDependent(); else if (Args[Arg].isInstantiationDependent()) @@ -1896,7 +1897,7 @@ TemplateSpecializationType(TemplateName T, if (Args[Arg].getKind() == TemplateArgument::Type && Args[Arg].getAsType()->isVariablyModifiedType()) setVariablyModified(); - if (Canon.isNull() && Args[Arg].containsUnexpandedParameterPack()) + if (Args[Arg].containsUnexpandedParameterPack()) setContainsUnexpandedParameterPack(); new (&TemplateArgs[Arg]) TemplateArgument(Args[Arg]); diff --git a/test/SemaTemplate/instantiation-depth-defarg.cpp b/test/SemaTemplate/instantiation-depth-defarg.cpp index 6032a33514..6550987de7 100644 --- a/test/SemaTemplate/instantiation-depth-defarg.cpp +++ b/test/SemaTemplate/instantiation-depth-defarg.cpp @@ -1,11 +1,11 @@ -// RUN: %clang_cc1 -fsyntax-only -verify -ftemplate-depth 256 -ftemplate-backtrace-limit 4 %s +// RUN: %clang_cc1 -fsyntax-only -verify -ftemplate-depth 128 -ftemplate-backtrace-limit 4 %s template struct S { typedef typename S::type type; static int f(int n = S::f()); // \ -// expected-error{{recursive template instantiation exceeded maximum depth of 256}} \ +// expected-error{{recursive template instantiation exceeded maximum depth of 128}} \ // expected-note 3 {{instantiation of default function argument}} \ -// expected-note {{skipping 253 contexts in backtrace}} \ +// expected-note {{skipping 125 contexts in backtrace}} \ // expected-note {{use -ftemplate-depth=N to increase recursive template instantiation depth}} }; @@ -14,13 +14,21 @@ template<> struct S<0> { }; // Incrementally instantiate up to S<2048>. +template struct S<128>; template struct S<256>; +template struct S<384>; template struct S<512>; +template struct S<640>; template struct S<768>; +template struct S<896>; template struct S<1024>; +template struct S<1152>; template struct S<1280>; +template struct S<1408>; template struct S<1536>; +template struct S<1664>; template struct S<1792>; +template struct S<1920>; template struct S<2048>; // Check that we actually bail out when we hit the instantiation depth limit for