re PR c++/52988 (std::async not executed on function returning nullptr_t)

PR c++/52988
	* typeck.c (decay_conversion): Don't discard side-effects from
	expressions of nullptr_t.

From-SVN: r188955
This commit is contained in:
Jason Merrill 2012-06-25 16:39:47 -04:00 committed by Jason Merrill
parent 8490252ad1
commit ec62cbe19b
4 changed files with 28 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2012-06-25 Jason Merrill <jason@redhat.com>
PR c++/52988
* typeck.c (decay_conversion): Don't discard side-effects from
expressions of nullptr_t.
2012-06-25 Florian Weimer <fweimer@redhat.com>
* init.c (build_new_1): Warn about (T[N]) for variable N, and

View File

@ -1843,7 +1843,7 @@ decay_conversion (tree exp, tsubst_flags_t complain)
if (error_operand_p (exp))
return error_mark_node;
if (NULLPTR_TYPE_P (type))
if (NULLPTR_TYPE_P (type) && !TREE_SIDE_EFFECTS (exp))
return nullptr_node;
/* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.

View File

@ -1,3 +1,8 @@
2012-06-25 Jason Merrill <jason@redhat.com>
PR c++/52988
* g++.dg/cpp0x/nullptr28.C: New.
2012-06-25 Christophe Lyon <christophe.lyon@st.com>
* gcc.target/arm/neon-vld1_dupQ.c: New.

View File

@ -0,0 +1,16 @@
// { dg-do run { target c++11 } }
typedef decltype(nullptr) nullptr_t;
int i;
nullptr_t n;
const nullptr_t& f() { ++i; return n; }
nullptr_t g() { return f(); }
int main()
{
g();
if (i != 1)
__builtin_abort ();
}