]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/56060 (ICE on invalid code in type_dependent_expression_p, at cp/pt.c:19742)
authorPaolo Carlini <paolo.carlini@oracle.com>
Sun, 6 Oct 2013 14:43:07 +0000 (14:43 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sun, 6 Oct 2013 14:43:07 +0000 (14:43 +0000)
/cp
2013-10-06  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/56060
* pt.c (type_dependent_expression_p): Handle EXPR_PACK_EXPANSION.

/testsuite
2013-10-06  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/56060
* g++.dg/cpp0x/variadic144.C: New.

From-SVN: r203229

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/variadic144.C [new file with mode: 0644]

index 219f415483171b0b32bb6c907a6350a26793de73..6f6d83681166b2a0f848aef92b907e15e1956d83 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/56060
+       * pt.c (type_dependent_expression_p): Handle EXPR_PACK_EXPANSION.
+
 2013-10-04  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/58560
index 59be037c82ecf4835f64ae42fb3cb7b9a8dabbca..2828cc983b370bdda7445f20b205476832e0ff15 100644 (file)
@@ -20403,6 +20403,10 @@ type_dependent_expression_p (tree expression)
       if (TREE_CODE (expression) == SCOPE_REF)
        return false;
 
+      /* Always dependent, on the number of arguments if nothing else.  */
+      if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
+       return true;
+
       if (BASELINK_P (expression))
        expression = BASELINK_FUNCTIONS (expression);
 
index 20ffa47e90a6098b2c484334606b272e901ed907..bc867655d7d2f9cf46c4b44791247684921687c1 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/56060
+       * g++.dg/cpp0x/variadic144.C: New.
+
 2013-10-04  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/58560
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic144.C b/gcc/testsuite/g++.dg/cpp0x/variadic144.C
new file mode 100644 (file)
index 0000000..5d05d3d
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/56060
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct baz { };
+template<typename T> T bar();
+
+template<typename T, typename ... U>
+baz<decltype(bar<T>()(bar<U> ...))>  // { dg-error "cannot be used" }
+foo();
+
+int main()
+{
+  foo<int>();     // { dg-error "no matching" }
+  return 0;
+}