From a6343f618b2c05d0212b61b8a038f348c44f7a82 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Thu, 28 Apr 2011 09:54:04 +0000 Subject: [PATCH] re PR c++/48530 ([C++0x][SFINAE] Hard errors with deleted d'tors) /cp 2011-04-28 Paolo Carlini PR c++/48530 * tree.c (build_cplus_new): Check build_target_expr return value for error_mark_node. /testsuite 2011-04-28 Paolo Carlini PR c++/48530 * g++.dg/cpp0x/sfinae18.C: New. From-SVN: r173063 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/tree.c | 6 ++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/sfinae18.C | 17 +++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/sfinae18.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 64cb011..163bee3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2011-04-28 Paolo Carlini + PR c++/48530 + * tree.c (build_cplus_new): Check build_target_expr return + value for error_mark_node. + +2011-04-28 Paolo Carlini + 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 2f082a6..2eaa1db 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 904848c..9891d22 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2011-04-28 Paolo Carlini + PR c++/48530 + * g++.dg/cpp0x/sfinae18.C: New. + +2011-04-28 Paolo Carlini + 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 0000000..bb54335 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae18.C @@ -0,0 +1,17 @@ +// PR c++/48530 +// { dg-options -std=c++0x } + +template +char f(int); + +template +char (&f(...))[2]; + +struct DelDtor { + DelDtor() = default; + ~DelDtor() = delete; +}; + +static_assert(sizeof(f(0)) != 1, "Error"); -- 2.7.4