Commit c1136864 by Richard Biener Committed by Richard Biener

gimple-parser.c (c_parser_gimple_statement): Parse conditional stmts.

2017-10-30  Richard Biener  <rguenther@suse.de>

	c/
	* gimple-parser.c (c_parser_gimple_statement): Parse conditional
	stmts.

	* gcc.dg/gimplefe-27.c: New testcase.

From-SVN: r254217
parent c76dc9c3
2017-10-30 Richard Biener <rguenther@suse.de>
* gimple-parser.c (c_parser_gimple_statement): Parse conditional
stmts.
2017-10-27 Michael Meissner <meissner@linux.vnet.ibm.com>
* c-decl.c (header_for_builtin_fn): Add support for copysign, fma,
......
......@@ -419,6 +419,23 @@ c_parser_gimple_statement (c_parser *parser, gimple_seq *seq)
if (lhs.value != error_mark_node
&& rhs.value != error_mark_node)
{
/* If we parsed a comparison and the next token is a '?' then
parse a conditional expression. */
if (COMPARISON_CLASS_P (rhs.value)
&& c_parser_next_token_is (parser, CPP_QUERY))
{
struct c_expr trueval, falseval;
c_parser_consume_token (parser);
trueval = c_parser_gimple_postfix_expression (parser);
falseval.set_error ();
if (c_parser_require (parser, CPP_COLON, "expected %<:%>"))
falseval = c_parser_gimple_postfix_expression (parser);
if (trueval.value == error_mark_node
|| falseval.value == error_mark_node)
return;
rhs.value = build3_loc (loc, COND_EXPR, TREE_TYPE (trueval.value),
rhs.value, trueval.value, falseval.value);
}
assign = gimple_build_assign (lhs.value, rhs.value);
gimple_seq_add_stmt (seq, assign);
gimple_set_location (assign, loc);
......
2017-10-30 Richard Biener <rguenther@suse.de>
* gcc.dg/gimplefe-27.c: New testcase.
2017-10-30 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/c17-version-1.c, gcc.dg/c17-version-2.c: New tests.
......
/* { dg-options "-O -fgimple" } */
int __GIMPLE ()
p (int n)
{
int _2;
_2 = n_1(D) != 0 ? 2 : 0;
return _2;
}
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