From: Richard Biener Date: Thu, 22 Jan 2015 16:07:36 +0000 (+0000) Subject: re PR tree-optimization/64728 (internal compiler error: SSA corruption) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f4b05e74683b0fbb323606875010006ee0dc557e;p=gcc.git re PR tree-optimization/64728 (internal compiler error: SSA corruption) 2015-01-22 Richard Biener PR middle-end/64728 * tree-ssa-coalesce.c (coalesce_partitions): Do not perform abnormal coalescing on undefined SSA names. * gcc.dg/torture/pr64728.c: New testcase. From-SVN: r220003 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 82883c1b4ac..e9887c48ba3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-01-22 Richard Biener + + PR middle-end/64728 + * tree-ssa-coalesce.c (coalesce_partitions): Do not perform + abnormal coalescing on undefined SSA names. + 2015-22-01 Uros Bizjak PR target/64688 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e6dadc2d43..8bebdac3cf8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-01-22 Richard Biener + + PR middle-end/64728 + * gcc.dg/torture/pr64728.c: New testcase. + 2015-22-01 Uros Bizjak PR target/64688 diff --git a/gcc/testsuite/gcc.dg/torture/pr64728.c b/gcc/testsuite/gcc.dg/torture/pr64728.c new file mode 100644 index 00000000000..65c8508fc84 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr64728.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ + +#include + +jmp_buf a; +int b, d; +void baz (long); + +static void +bar (long *x) +{ + if (d) + *x = b; +} + +void +foo () +{ + baz (0); + if (setjmp (a)) + { + long c; + bar (&c); + baz (c); + } + baz (0); +} diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c index fda79dce784..be696fe8147 100644 --- a/gcc/tree-ssa-coalesce.c +++ b/gcc/tree-ssa-coalesce.c @@ -1213,8 +1213,13 @@ coalesce_partitions (var_map map, ssa_conflicts_p graph, coalesce_list_p cl, gsi_next (&gsi)) { gphi *phi = gsi.phi (); + tree arg = PHI_ARG_DEF (phi, e->dest_idx); + if (SSA_NAME_IS_DEFAULT_DEF (arg) + && (!SSA_NAME_VAR (arg) + || TREE_CODE (SSA_NAME_VAR (arg)) != PARM_DECL)) + continue; + tree res = PHI_RESULT (phi); - tree arg = PHI_ARG_DEF (phi, e->dest_idx); int v1 = SSA_NAME_VERSION (res); int v2 = SSA_NAME_VERSION (arg);