diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-04-03 23:45:52 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-04-03 23:45:52 +0200 |
commit | b6a7a294ce823917dd08e8d5923137ff75b09fae (patch) | |
tree | dbdc41c7fea93688e556dfdeed9b17283f6a1196 /gcc/shrink-wrap.c | |
parent | 0d2f7959f7b5fed2f74f5ed1f3e2d7db77bb5361 (diff) | |
download | gcc-b6a7a294ce823917dd08e8d5923137ff75b09fae.zip gcc-b6a7a294ce823917dd08e8d5923137ff75b09fae.tar.gz gcc-b6a7a294ce823917dd08e8d5923137ff75b09fae.tar.bz2 |
re PR rtl-optimization/85167 (shrink-wrap.c:333:15: runtime error with UBSAN)
PR rtl-optimization/85167
* shrink-wrap.c (move_insn_for_shrink_wrap): Don't set bb_uses and
bb_defs if *split_p, instead preinitialize it to NULL.
* gcc.dg/pr85167.c: New test.
From-SVN: r259058
Diffstat (limited to 'gcc/shrink-wrap.c')
-rw-r--r-- | gcc/shrink-wrap.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/shrink-wrap.c b/gcc/shrink-wrap.c index fd19ace..6b47d4e 100644 --- a/gcc/shrink-wrap.c +++ b/gcc/shrink-wrap.c @@ -157,7 +157,7 @@ move_insn_for_shrink_wrap (basic_block bb, rtx_insn *insn, struct dead_debug_local *debug) { rtx set, src, dest; - bitmap live_out, live_in, bb_uses, bb_defs; + bitmap live_out, live_in, bb_uses = NULL, bb_defs = NULL; unsigned int i, dregno, end_dregno; unsigned int sregno = FIRST_PSEUDO_REGISTER; unsigned int end_sregno = FIRST_PSEUDO_REGISTER; @@ -330,8 +330,11 @@ move_insn_for_shrink_wrap (basic_block bb, rtx_insn *insn, /* Check whether BB uses DEST or clobbers DEST. We need to add INSN to BB if so. Either way, DEST is no longer live on entry, except for any part that overlaps SRC (next loop). */ - bb_uses = &DF_LR_BB_INFO (bb)->use; - bb_defs = &DF_LR_BB_INFO (bb)->def; + if (!*split_p) + { + bb_uses = &DF_LR_BB_INFO (bb)->use; + bb_defs = &DF_LR_BB_INFO (bb)->def; + } if (df_live) { for (i = dregno; i < end_dregno; i++) |