From: Paolo Carlini Date: Thu, 28 Apr 2011 09:54:04 +0000 (+0000) Subject: re PR c++/48530 ([C++0x][SFINAE] Hard errors with deleted d'tors) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a6343f618b2c05d0212b61b8a038f348c44f7a82;p=gcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 64cb011561a..163bee3c1a0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +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 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,3 +1,8 @@ +2011-04-28 Paolo Carlini + + PR c++/48530 + * g++.dg/cpp0x/sfinae18.C: New. + 2011-04-28 Paolo Carlini PR c++/48771 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 +char f(int); + +template +char (&f(...))[2]; + +struct DelDtor { + DelDtor() = default; + ~DelDtor() = delete; +}; + +static_assert(sizeof(f(0)) != 1, "Error");