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:
parent
608c0f6318
commit
213ffde2ea
2 changed files with 21 additions and 2 deletions
|
@ -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
|
||||
|
|
14
gcc/dse.c
14
gcc/dse.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue