[cfe-commits] r160240 - in /cfe/trunk: lib/AST/Type.cpp test/SemaTemplate/instantiation-depth-defarg.cpp

Richard Smith richard-llvm at metafoo.co.uk
Sun Jul 15 16:29:50 PDT 2012


Author: rsmith
Date: Sun Jul 15 18:29:50 2012
New Revision: 160240

URL: http://llvm.org/viewvc/llvm-project?rev=160240&view=rev
Log:
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.

Modified:
    cfe/trunk/lib/AST/Type.cpp
    cfe/trunk/test/SemaTemplate/instantiation-depth-defarg.cpp

Modified: cfe/trunk/lib/AST/Type.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Type.cpp?rev=160240&r1=160239&r2=160240&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Type.cpp (original)
+++ cfe/trunk/lib/AST/Type.cpp Sun Jul 15 18:29:50 2012
@@ -1862,8 +1862,7 @@
          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 @@
     // 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 @@
     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]);

Modified: cfe/trunk/test/SemaTemplate/instantiation-depth-defarg.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/instantiation-depth-defarg.cpp?rev=160240&r1=160239&r2=160240&view=diff
==============================================================================
--- cfe/trunk/test/SemaTemplate/instantiation-depth-defarg.cpp (original)
+++ cfe/trunk/test/SemaTemplate/instantiation-depth-defarg.cpp Sun Jul 15 18:29:50 2012
@@ -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 @@
 };
 
 // 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





More information about the cfe-commits mailing list