diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-04-28 09:54:04 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-04-28 09:54:04 +0000 |
commit | 82f0da68d0248f135f86041a4c9e7419594b274b (patch) | |
tree | 6035139ba9496a71ae53b141db5c161f7e124aa1 | |
parent | e1b036be76976158e93113ea0b3652ab4588b254 (diff) | |
download | gcc-82f0da68d0248f135f86041a4c9e7419594b274b.tar.gz |
/cp
2011-04-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/48530
* tree.c (build_cplus_new): Check build_target_expr return
value for error_mark_node.
/testsuite
2011-04-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/48530
* g++.dg/cpp0x/sfinae18.C: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@173063 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/tree.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/sfinae18.C | 17 |
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 64cb011561a..163bee3c1a0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/48530 + * tree.c (build_cplus_new): Check build_target_expr return + value for error_mark_node. + +2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/48771 * semantics.c (literal_type_p): Reference types are literal types, per the FDIS. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 2f082a6ff54..2eaa1db0b22 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, 2009, 2010 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) @@ -456,7 +456,9 @@ build_cplus_new (tree type, tree init, tsubst_flags_t complain) return rval; rval = build_target_expr (slot, rval, complain); - TARGET_EXPR_IMPLICIT_P (rval) = 1; + + if (rval != error_mark_node) + TARGET_EXPR_IMPLICIT_P (rval) = 1; return rval; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 904848c1e61..9891d226562 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/48530 + * g++.dg/cpp0x/sfinae18.C: New. + +2011-04-28 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/48771 * g++.dg/ext/is_literal_type1.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae18.C b/gcc/testsuite/g++.dg/cpp0x/sfinae18.C new file mode 100644 index 00000000000..bb54335e6cc --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae18.C @@ -0,0 +1,17 @@ +// PR c++/48530 +// { dg-options -std=c++0x } + +template<class T, + class = decltype(T()) +> +char f(int); + +template<class> +char (&f(...))[2]; + +struct DelDtor { + DelDtor() = default; + ~DelDtor() = delete; +}; + +static_assert(sizeof(f<DelDtor>(0)) != 1, "Error"); |