re PR rtl-optimization/82044 (runtime signed integer overflow in check_mem_read_rtx() and all_positions_needed_p() in dse.c)

PR rtl-optimization/82044
	PR tree-optimization/82042
	* dse.c (record_store): Check for overflow.
	(check_mem_read_rtx): Properly check for overflow if width == -1, call
	add_wild_read instead of clear_rhs_from_active_local_stores on
	overflow and log it into dump_file.

From-SVN: r255048
This commit is contained in:
Jakub Jelinek 2017-11-22 10:08:23 +01:00 committed by Jakub Jelinek
parent 608c0f6318
commit 213ffde2ea
2 changed files with 21 additions and 2 deletions

View file

@ -1,3 +1,12 @@
2017-11-22 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/82044
PR tree-optimization/82042
* dse.c (record_store): Check for overflow.
(check_mem_read_rtx): Properly check for overflow if width == -1, call
add_wild_read instead of clear_rhs_from_active_local_stores on
overflow and log it into dump_file.
2017-11-22 Richard Biener <rguenther@suse.de>
* gimple-iterator.c (gimple_find_edge_insert_loc): Ignore

View file

@ -1342,6 +1342,12 @@ record_store (rtx body, bb_info_t bb_info)
else
width = GET_MODE_SIZE (GET_MODE (mem));
if (offset > HOST_WIDE_INT_MAX - width)
{
clear_rhs_from_active_local_stores ();
return 0;
}
if (group_id >= 0)
{
/* In the restrictive case where the base is a constant or the
@ -1981,9 +1987,13 @@ check_mem_read_rtx (rtx *loc, bb_info_t bb_info)
else
width = GET_MODE_SIZE (GET_MODE (mem));
if (offset > HOST_WIDE_INT_MAX - width)
if (width == -1
? offset == HOST_WIDE_INT_MIN
: offset > HOST_WIDE_INT_MAX - width)
{
clear_rhs_from_active_local_stores ();
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, " adding wild read, due to overflow.\n");
add_wild_read (bb_info);
return;
}