summaryrefslogtreecommitdiff
path: root/gcc/regrename.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-03-18 21:17:10 +0100
committerMartin Liska <marxin@gcc.gnu.org>2018-03-18 20:17:10 +0000
commitf7dbf8e56459916a66af9fc62608109f65babd51 (patch)
treef97caf2a9bb93f1537a30e9654d2e819ecfd8805 /gcc/regrename.c
parent96c8b2534d19a0769152cd33e7fccc66a8785389 (diff)
Fix UBSAN in regrename.c (PR rtl-optimization/84635).
2018-03-18 Martin Liska <mliska@suse.cz> PR rtl-optimization/84635 * regrename.c (build_def_use): Use matches_mode only when matches >= 0. From-SVN: r258634
Diffstat (limited to 'gcc/regrename.c')
-rw-r--r--gcc/regrename.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/regrename.c b/gcc/regrename.c
index dcec77adf75..45754812f6c 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -1703,14 +1703,18 @@ build_def_use (basic_block bb)
and we must instead make sure to make the operand visible
to the machinery that tracks hard registers. */
machine_mode i_mode = recog_data.operand_mode[i];
- machine_mode matches_mode = recog_data.operand_mode[matches];
- if (matches >= 0
- && maybe_ne (GET_MODE_SIZE (i_mode),
- GET_MODE_SIZE (matches_mode))
- && !verify_reg_in_set (op, &live_in_chains))
+ if (matches >= 0)
{
- untracked_operands |= 1 << i;
- untracked_operands |= 1 << matches;
+ machine_mode matches_mode
+ = recog_data.operand_mode[matches];
+
+ if (maybe_ne (GET_MODE_SIZE (i_mode),
+ GET_MODE_SIZE (matches_mode))
+ && !verify_reg_in_set (op, &live_in_chains))
+ {
+ untracked_operands |= 1 << i;
+ untracked_operands |= 1 << matches;
+ }
}
}
#ifdef STACK_REGS