diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-01-13 19:11:50 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-01-13 19:11:50 +0100 |
commit | a7cbc5175600c96bab096dd100fc0ee918a34073 (patch) | |
tree | 0c07817eb59cf97608841cdd331c008fec06a224 | |
parent | 5bdf05c8743e7486521ce3a3981ac3e6e7850ad0 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/tree.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr38795.C | 13 |
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); +} |