Commit 5a40ae3c by Richard Biener Committed by Richard Biener

re PR tree-optimization/83296 (missing -Wstringop-overflow due to missing range info for MAX_EXPR)

2017-12-07  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/83296
	PR tree-optimization/67769
	* tree-ssa-phiopt.c (conditional_replacement): Do not reset
	flow sensitive info in an unrelated BB.
	(value_replacement): Use reset_flow_sensitive_info.
	(minmax_replacement): Reset flow sensitive info on the def
	we move.  Do not reset flow sensitive info in the whole BB
	we move the stmt to.
	(abs_replacement): Likewise.

	* g++.dg/warn/Wstringop-overflow-1.C: New testcase.

From-SVN: r255466
parent d78d986b
2017-12-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/83296
PR tree-optimization/67769
* tree-ssa-phiopt.c (conditional_replacement): Do not reset
flow sensitive info in an unrelated BB.
(value_replacement): Use reset_flow_sensitive_info.
(minmax_replacement): Reset flow sensitive info on the def
we move. Do not reset flow sensitive info in the whole BB
we move the stmt to.
(abs_replacement): Likewise.
2017-12-07 Segher Boessenkool <segher@kernel.crashing.org>
PR target/43871
2017-12-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/83296
PR tree-optimization/67769
* g++.dg/warn/Wstringop-overflow-1.C: New testcase.
2017-12-07 Julia Koval <julia.koval@intel.com>
* gcc.target/i386/avx512-check.h: Handle bit_VAES.
......
// { dg-do compile }
// { dg-additional-options "-O2 -Wstringop-overflow=2" }
struct S {
char a[5];
void (*pf)(void);
};
void f (struct S *s, int n)
{
if (n < sizeof s->a + 1)
n = sizeof s->a + 1;
__builtin_strncpy (s->a, "123456", n); // { dg-warning "writing 6" }
}
......@@ -672,7 +672,6 @@ conditional_replacement (basic_block cond_bb, basic_block middle_bb,
}
replace_phi_edge_with_variable (cond_bb, e1, phi, new_var);
reset_flow_sensitive_info_in_bb (cond_bb);
/* Note that we optimized this PHI. */
return true;
......@@ -1138,22 +1137,22 @@ value_replacement (basic_block cond_bb, basic_block middle_bb,
cond_rhs, false, rhs2))))))
{
gsi = gsi_for_stmt (cond);
/* Moving ASSIGN might change VR of lhs, e.g. when moving u_6
def-stmt in:
if (n_5 != 0)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
# RANGE [0, 4294967294]
u_6 = n_5 + 4294967295;
<bb 4>:
# u_3 = PHI <u_6(3), 4294967295(2)> */
reset_flow_sensitive_info (lhs);
if (INTEGRAL_TYPE_P (TREE_TYPE (lhs)))
{
/* Moving ASSIGN might change VR of lhs, e.g. when moving u_6
def-stmt in:
if (n_5 != 0)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
# RANGE [0, 4294967294]
u_6 = n_5 + 4294967295;
<bb 4>:
# u_3 = PHI <u_6(3), 4294967295(2)> */
SSA_NAME_RANGE_INFO (lhs) = NULL;
/* If available, we can use VR of phi result at least. */
tree phires = gimple_phi_result (phi);
struct range_info_def *phires_range_info
......@@ -1166,7 +1165,7 @@ value_replacement (basic_block cond_bb, basic_block middle_bb,
for (int i = prep_cnt - 1; i >= 0; --i)
{
tree plhs = gimple_assign_lhs (prep_stmt[i]);
SSA_NAME_RANGE_INFO (plhs) = NULL;
reset_flow_sensitive_info (plhs);
gsi_from = gsi_for_stmt (prep_stmt[i]);
gsi_move_before (&gsi_from, &gsi);
}
......@@ -1490,6 +1489,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
/* Move the statement from the middle block. */
gsi = gsi_last_bb (cond_bb);
gsi_from = gsi_last_nondebug_bb (middle_bb);
reset_flow_sensitive_info (SINGLE_SSA_TREE_OPERAND (gsi_stmt (gsi_from),
SSA_OP_DEF));
gsi_move_before (&gsi_from, &gsi);
}
......@@ -1508,7 +1509,6 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
gsi_insert_before (&gsi, new_stmt, GSI_NEW_STMT);
replace_phi_edge_with_variable (cond_bb, e1, phi, result);
reset_flow_sensitive_info_in_bb (cond_bb);
return true;
}
......@@ -1636,7 +1636,6 @@ abs_replacement (basic_block cond_bb, basic_block middle_bb,
}
replace_phi_edge_with_variable (cond_bb, e1, phi, result);
reset_flow_sensitive_info_in_bb (cond_bb);
/* Note that we optimized this PHI. */
return true;
......
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