From: Richard Biener Date: Fri, 14 Oct 2016 12:58:18 +0000 (+0000) Subject: re PR tree-optimization/77979 (ICE on valid code at -Os and above on x86_64-linux... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6d59425df7e3d4e9b49c6521288a048bb35ec70c;p=gcc.git re PR tree-optimization/77979 (ICE on valid code at -Os and above on x86_64-linux-gnu: Segmentation fault) 2016-10-14 Richard Biener PR tree-optimization/77979 * tree-vrp.c (compare_name_with_value): Handle released SSA names in the equivalency sets. (compare_names): Likewise. * gcc.dg/torture/pr77979.c: New testcase. From-SVN: r241162 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e30217896e9..433c0cbdd64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-10-14 Richard Biener + + PR tree-optimization/77979 + * tree-vrp.c (compare_name_with_value): Handle released SSA names + in the equivalency sets. + (compare_names): Likewise. + 2016-10-14 Martin Liska * builtins.h(target_char_cst_p): Declare the function. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 51a521dfca9..bc8471f63e4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-10-14 Richard Biener + + PR tree-optimization/77979 + * gcc.dg/torture/pr77979.c: New testcase. + 2016-10-14 Martin Liska * gcc.dg/tree-ssa/builtins-folding-generic.c: New test. diff --git a/gcc/testsuite/gcc.dg/torture/pr77979.c b/gcc/testsuite/gcc.dg/torture/pr77979.c new file mode 100644 index 00000000000..94addf4174d --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr77979.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ + +int a, b, c, d, e, f; + +void fn1 () +{ + int g = b; + a = -~(d || a) << 4 || e; + b = c || g ^ a; + if (f < g) + d = e; +} diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 941c0fd34d8..00a08fdff6d 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -7188,9 +7188,13 @@ compare_name_with_value (enum tree_code comp, tree var, tree val, EXECUTE_IF_SET_IN_BITMAP (e, 0, i, bi) { + tree name = ssa_name (i); + if (! name) + continue; + if (! use_equiv_p - && ! SSA_NAME_IS_DEFAULT_DEF (ssa_name (i)) - && prop_simulate_again_p (SSA_NAME_DEF_STMT (ssa_name (i)))) + && ! SSA_NAME_IS_DEFAULT_DEF (name) + && prop_simulate_again_p (SSA_NAME_DEF_STMT (name))) continue; equiv_vr = get_vr_for_comparison (i); @@ -7289,11 +7293,17 @@ compare_names (enum tree_code comp, tree n1, tree n2, of the loop just to check N1 and N2 ranges. */ EXECUTE_IF_SET_IN_BITMAP (e1, 0, i1, bi1) { + if (! ssa_name (i1)) + continue; + value_range vr1 = get_vr_for_comparison (i1); t = retval = NULL_TREE; EXECUTE_IF_SET_IN_BITMAP (e2, 0, i2, bi2) { + if (! ssa_name (i2)) + continue; + bool sop = false; value_range vr2 = get_vr_for_comparison (i2);