diff options
author | Richard Biener <rguenther@suse.de> | 2015-06-09 08:06:17 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-06-09 08:06:17 +0000 |
commit | 2bdb7f56ff0290100875208f07bceb33e404e6e4 (patch) | |
tree | 1c9438171754f53aef737acbf0f87e7015271b7c /gcc | |
parent | d819fedb34471ab3378e2dfd45a88b76ed68a91e (diff) | |
download | gcc-2bdb7f56ff0290100875208f07bceb33e404e6e4.zip gcc-2bdb7f56ff0290100875208f07bceb33e404e6e4.tar.gz gcc-2bdb7f56ff0290100875208f07bceb33e404e6e4.tar.bz2 |
re PR tree-optimization/66413 (ICE at -Os and above with -g enabled on x86_64-linux-gnu)
2015-06-09 Richard Biener <rguenther@suse.de>
PR middle-end/66413
* tree-inline.c (insert_init_debug_bind): Unshare value.
* gcc.dg/torture/pr66413.c: New testcase.
From-SVN: r224267
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr66413.c | 61 | ||||
-rw-r--r-- | gcc/tree-inline.c | 2 |
4 files changed, 72 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a9554c5..6550f7c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2015-06-09 Richard Biener <rguenther@suse.de> + PR middle-end/66413 + * tree-inline.c (insert_init_debug_bind): Unshare value. + +2015-06-09 Richard Biener <rguenther@suse.de> + PR tree-optimization/66396 * graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Rename virtual operands. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e62eaba..5c21d29 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-06-09 Richard Biener <rguenther@suse.de> + + PR middle-end/66413 + * gcc.dg/torture/pr66413.c: New testcase. + 2015-06-09 Alexandre Oliva <aoliva@redhat.com> * gcc.dg/guality/pr54200.c: Add -fno-tree-coalesce-vars. diff --git a/gcc/testsuite/gcc.dg/torture/pr66413.c b/gcc/testsuite/gcc.dg/torture/pr66413.c new file mode 100644 index 0000000..0ca57d7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr66413.c @@ -0,0 +1,61 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-g" } */ + +int a, b, c, d, i, j, q, *e, *h, *k, *r, **p = &e; +const int *f, **n = &f; +static int g; + +void +fn1 (int p1) +{ + c = p1; +} + +static int * +fn2 (int *p1, const int *p2) +{ + if (g) + n = &p2; + *n = p2; + int o[245]; + fn1 (o != p2); + return p1; +} + +static int * +fn3 () +{ + int s[54], *t = &s[0], u = 0, v = 1; + h = &v; + q = 1; + for (; q; q++) + { + int *w[] = { &u }; + for (; v;) + return *p; + } + *r = *t + b >= 0; + return *p; +} + +static int +fn4 (int *p1) +{ + int *l[2], **m[7]; + for (; i < 1; i++) + for (; j < 1; j++) + m[i * 70] = &l[0]; + k = fn3 (); + fn2 (0, p1); + if ((m[0] == 0) & a) + for (;;) + ; + return 0; +} + +int +main () +{ + fn4 (&d); + return 0; +} diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 242026c..1fa5dab 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -3021,7 +3021,7 @@ insert_init_debug_bind (copy_body_data *id, base_stmt = gsi_stmt (gsi); } - note = gimple_build_debug_bind (tracked_var, value, base_stmt); + note = gimple_build_debug_bind (tracked_var, unshare_expr (value), base_stmt); if (bb) { |