aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-01-13 19:11:50 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-01-13 19:11:50 +0100
commita7cbc5175600c96bab096dd100fc0ee918a34073 (patch)
tree0c07817eb59cf97608841cdd331c008fec06a224
parent5bdf05c8743e7486521ce3a3981ac3e6e7850ad0 (diff)
downloadgcc-a7cbc5175600c96bab096dd100fc0ee918a34073.zip
gcc-a7cbc5175600c96bab096dd100fc0ee918a34073.tar.gz
gcc-a7cbc5175600c96bab096dd100fc0ee918a34073.tar.bz2
re PR c++/38795 (ICE with reinterpret_cast and variadic templates)
PR c++/38795 * tree.c (cp_walk_subtrees): Handle REINTERPRET_CAST_EXPR, STATIC_CAST_EXPR, CONST_CAST_EXPR and DYNAMIC_CAST_EXPR the same as CAST_EXPR. * g++.dg/cpp0x/pr38795.C: New test. From-SVN: r143351
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/tree.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr38795.C13
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7e35ecd..12c07ee 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2009-01-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/38795
+ * tree.c (cp_walk_subtrees): Handle REINTERPRET_CAST_EXPR,
+ STATIC_CAST_EXPR, CONST_CAST_EXPR and DYNAMIC_CAST_EXPR the same
+ as CAST_EXPR.
+
2009-01-12 Jason Merrill <jason@redhat.com>
Steve Ellcey <sje@cup.hp.com>
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index ad84cc8..8ac2720 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -1,6 +1,6 @@
/* Language-dependent node constructors for parse phase of GNU compiler.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
@@ -2443,6 +2443,10 @@ cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
break;
case CAST_EXPR:
+ case REINTERPRET_CAST_EXPR:
+ case STATIC_CAST_EXPR:
+ case CONST_CAST_EXPR:
+ case DYNAMIC_CAST_EXPR:
if (TREE_TYPE (*tp))
WALK_SUBTREE (TREE_TYPE (*tp));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 37223ec..18f15ca 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-01-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/38795
+ * g++.dg/cpp0x/pr38795.C: New test.
+
2009-01-13 Daniel Jacobowitz <dan@codesourcery.com>
Nathan Froyd <froydnj@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr38795.C b/gcc/testsuite/g++.dg/cpp0x/pr38795.C
new file mode 100644
index 0000000..54fb361
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr38795.C
@@ -0,0 +1,13 @@
+// PR c++/38795
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+template<typename... T> int foo(int i)
+{
+ return *reinterpret_cast<T*>(i); // { dg-error "not expanded with|T" }
+}
+
+void bar(int i)
+{
+ foo<int>(i);
+}