Commit 433068cc by Marek Polacek Committed by Marek Polacek

re PR c/68412 (ICE with -Wall -Wextra in fold_binary_loc())

	PR c/68412
	* c-typeck.c (parser_build_binary_op): Properly handle
	C_MAYBE_CONST_EXPR before calling warn_tautological_cmp.

	* gcc.dg/pr68412-2.c: New test.
	* gcc.dg/pr68412.c: New test.

From-SVN: r230627
parent 09b574dd
2015-11-19 Marek Polacek <polacek@redhat.com>
PR c/68412
* c-typeck.c (parser_build_binary_op): Properly handle
C_MAYBE_CONST_EXPR before calling warn_tautological_cmp.
2015-11-17 David Malcolm <dmalcolm@redhat.com> 2015-11-17 David Malcolm <dmalcolm@redhat.com>
* c-parser.c (set_c_expr_source_range): Bulletproof both * c-parser.c (set_c_expr_source_range): Bulletproof both
......
...@@ -3512,7 +3512,28 @@ parser_build_binary_op (location_t location, enum tree_code code, ...@@ -3512,7 +3512,28 @@ parser_build_binary_op (location_t location, enum tree_code code,
code1, arg1.value, code2, arg2.value); code1, arg1.value, code2, arg2.value);
if (warn_tautological_compare) if (warn_tautological_compare)
warn_tautological_cmp (location, code, arg1.value, arg2.value); {
tree lhs = arg1.value;
tree rhs = arg2.value;
if (TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
{
if (C_MAYBE_CONST_EXPR_PRE (lhs) != NULL_TREE
&& TREE_SIDE_EFFECTS (C_MAYBE_CONST_EXPR_PRE (lhs)))
lhs = NULL_TREE;
else
lhs = C_MAYBE_CONST_EXPR_EXPR (lhs);
}
if (TREE_CODE (rhs) == C_MAYBE_CONST_EXPR)
{
if (C_MAYBE_CONST_EXPR_PRE (rhs) != NULL_TREE
&& TREE_SIDE_EFFECTS (C_MAYBE_CONST_EXPR_PRE (rhs)))
rhs = NULL_TREE;
else
rhs = C_MAYBE_CONST_EXPR_EXPR (rhs);
}
if (lhs != NULL_TREE && rhs != NULL_TREE)
warn_tautological_cmp (location, code, lhs, rhs);
}
if (warn_logical_not_paren if (warn_logical_not_paren
&& TREE_CODE_CLASS (code) == tcc_comparison && TREE_CODE_CLASS (code) == tcc_comparison
......
2015-11-19 Marek Polacek <polacek@redhat.com>
PR c/68412
* gcc.dg/pr68412-2.c: New test.
* gcc.dg/pr68412.c: New test.
2015-11-19 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> 2015-11-19 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* gcc.dg/tree-ssa/vrp98.c: New testcase. * gcc.dg/tree-ssa/vrp98.c: New testcase.
......
/* PR c/68412 */
/* { dg-do compile } */
/* { dg-options "-Wall -Wextra" } */
int
fn1 (int i)
{
return ({ i; }) == ({ i; }); /* { dg-warning "self-comparison always evaluates to true" } */
}
int
fn2 (int i)
{
return ({ i + 1; }) != ({ i + 1; }); /* { dg-warning "self-comparison always evaluates to false" } */
}
/* PR c/68412 */
/* { dg-do compile } */
/* { dg-options "-Wall -Wextra" } */
#define M (sizeof (int) * __CHAR_BIT__)
int
fn1 (int i)
{
return i == (-1 << 8); /* { dg-warning "left shift of negative value" } */
}
int
fn2 (int i)
{
return i == (1 << M); /* { dg-warning "left shift count" } */
}
int
fn3 (int i)
{
return i == 10 << (M - 1); /* { dg-warning "requires" } */
}
int
fn4 (int i)
{
return i == 1 << -1; /* { dg-warning "left shift count" } */
}
int
fn5 (int i)
{
return i == 1 >> M; /* { dg-warning "right shift count" } */
}
int
fn6 (int i)
{
return i == 1 >> -1; /* { dg-warning "right shift count" } */
}
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