Commit b6a7a294 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 0d2f7959
2018-04-03 Jakub Jelinek <jakub@redhat.com> 2018-04-03 Jakub Jelinek <jakub@redhat.com>
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.
PR tree-optimization/85156 PR tree-optimization/85156
* builtins.c (fold_builtin_expect): Use save_expr on arg1 to avoid * builtins.c (fold_builtin_expect): Use save_expr on arg1 to avoid
evaluating the argument multiple times. evaluating the argument multiple times.
......
...@@ -157,7 +157,7 @@ move_insn_for_shrink_wrap (basic_block bb, rtx_insn *insn, ...@@ -157,7 +157,7 @@ move_insn_for_shrink_wrap (basic_block bb, rtx_insn *insn,
struct dead_debug_local *debug) struct dead_debug_local *debug)
{ {
rtx set, src, dest; 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 i, dregno, end_dregno;
unsigned int sregno = FIRST_PSEUDO_REGISTER; unsigned int sregno = FIRST_PSEUDO_REGISTER;
unsigned int end_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, ...@@ -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 /* 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, INSN to BB if so. Either way, DEST is no longer live on entry,
except for any part that overlaps SRC (next loop). */ except for any part that overlaps SRC (next loop). */
bb_uses = &DF_LR_BB_INFO (bb)->use; if (!*split_p)
bb_defs = &DF_LR_BB_INFO (bb)->def; {
bb_uses = &DF_LR_BB_INFO (bb)->use;
bb_defs = &DF_LR_BB_INFO (bb)->def;
}
if (df_live) if (df_live)
{ {
for (i = dregno; i < end_dregno; i++) for (i = dregno; i < end_dregno; i++)
......
2018-04-03 Jakub Jelinek <jakub@redhat.com> 2018-04-03 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/85167
* gcc.dg/pr85167.c: New test.
PR tree-optimization/85156 PR tree-optimization/85156
* c-c++-common/pr85156.c: New test. * c-c++-common/pr85156.c: New test.
* gcc.c-torture/execute/pr85156.c: New test. * gcc.c-torture/execute/pr85156.c: New test.
......
/* PR rtl-optimization/85167 */
/* { dg-do compile } */
/* { dg-options "-O2 -w" } */
struct A { long b; };
int c, d, e;
int bar (void);
int
foo (void)
{
long g;
for (; g == c ? 0 : (e = 1); g = ((struct A *)g)->b)
if (bar ())
return d;
}
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