Commit dd2a4498 by Marek Polacek Committed by Marek Polacek

re PR c++/86184 (Conditional expression with omitted operand cannot use rvalue…

re PR c++/86184 (Conditional expression with omitted operand cannot use rvalue of type convertible to bool)

	PR c++/86184
	* tree.c (cp_save_expr): Don't call save_expr for TARGET_EXPRs.

	* g++.dg/ext/cond3.C: New test.

From-SVN: r262254
parent 1f2bb38a
2018-06-29 Marek Polacek <polacek@redhat.com>
PR c++/86184
* tree.c (cp_save_expr): Don't call save_expr for TARGET_EXPRs.
2018-06-28 David Malcolm <dmalcolm@redhat.com> 2018-06-28 David Malcolm <dmalcolm@redhat.com>
* parser.c (cp_parser_error_1): After issuing a conflict marker * parser.c (cp_parser_error_1): After issuing a conflict marker
......
...@@ -4918,6 +4918,11 @@ cp_save_expr (tree expr) ...@@ -4918,6 +4918,11 @@ cp_save_expr (tree expr)
tree codes. */ tree codes. */
if (processing_template_decl) if (processing_template_decl)
return expr; return expr;
/* TARGET_EXPRs are only expanded once. */
if (TREE_CODE (expr) == TARGET_EXPR)
return expr;
return save_expr (expr); return save_expr (expr);
} }
......
2018-06-29 Marek Polacek <polacek@redhat.com>
PR c++/86184
* g++.dg/ext/cond3.C: New test.
2018-06-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2018-06-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/arm/arm-soft-strd-even.c: New test. * gcc.target/arm/arm-soft-strd-even.c: New test.
......
// PR c++/86184
// { dg-do run }
// { dg-options "" }
int j;
struct X {
X() { j++; }
operator bool() { return true; }
};
/* Only create X once. */
bool b = X() ?: false;
bool b2 = X() ? X() : false;
int
main ()
{
if (j != 3)
__builtin_abort ();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment