forked from OSchip/llvm-project
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. llvm-svn: 160240
This commit is contained in:
parent
cc8f2a6ab5
commit
7dfc0240ea
|
@ -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<typename T> using U = int;
|
||||
// U<T> is always non-dependent, irrespective of the type T.
|
||||
// However, U<Ts> 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]);
|
||||
|
|
|
@ -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<int N> struct S {
|
||||
typedef typename S<N-1>::type type;
|
||||
static int f(int n = S<N-1>::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
|
||||
|
|
Loading…
Reference in New Issue