diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-02-29 18:43:56 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-02-29 18:43:56 +0100 |
commit | 598e67d7a04954fe1d1652c4a7220977ab8b230f (patch) | |
tree | c5fe571e78fe721c879dcb121ffc30f3583d1f2c | |
parent | bce5e52b26de3519c75447cf0d2c5646ce3e164e (diff) | |
download | gcc-598e67d7a04954fe1d1652c4a7220977ab8b230f.zip gcc-598e67d7a04954fe1d1652c4a7220977ab8b230f.tar.gz gcc-598e67d7a04954fe1d1652c4a7220977ab8b230f.tar.bz2 |
re PR tree-optimization/52429 (ICE in separate_decls_in_region_debug, at tree-parloops.c:914 with -ftree-parallelize-loops)
PR tree-optimization/52429
* tree-parloops.c (separate_decls_in_region_debug): Return early
if var is LABEL_DECL.
* gcc.dg/torture/pr52429.c: New test.
* g++.dg/opt/pr52429.C: New test.
From-SVN: r184665
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr52429.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr52429.c | 24 | ||||
-rw-r--r-- | gcc/tree-parloops.c | 2 |
5 files changed, 60 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3a59fe7..8b2e26b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-02-29 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52429 + * tree-parloops.c (separate_decls_in_region_debug): Return early + if var is LABEL_DECL. + 2012-02-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR tree-optimization/52424 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4abeb9a..7b1ad21 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-02-29 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52429 + * gcc.dg/torture/pr52429.c: New test. + * g++.dg/opt/pr52429.C: New test. + 2012-02-29 Richard Guenther <rguenther@suse.de> PR testsuite/52297 diff --git a/gcc/testsuite/g++.dg/opt/pr52429.C b/gcc/testsuite/g++.dg/opt/pr52429.C new file mode 100644 index 0000000..0ab8b40 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr52429.C @@ -0,0 +1,23 @@ +// PR tree-optimization/52429 +// { dg-do compile } +// { dg-require-effective-target pthread } +// { dg-options "-O -g -ftree-parallelize-loops=4" } + +struct B +{ + B () : b (__null) {} + int *b; +}; + +void * +operator new (__SIZE_TYPE__, void *p) +{ + return p; +} + +void +foo (B *x, unsigned y) +{ + while (y--) + new (x) B; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr52429.c b/gcc/testsuite/gcc.dg/torture/pr52429.c new file mode 100644 index 0000000..e2aeaa9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr52429.c @@ -0,0 +1,24 @@ +/* PR tree-optimization/52429 */ +/* { dg-do compile } */ +/* { dg-require-effective-target pthread } */ +/* { dg-options "-g -ftree-parallelize-loops=4" } */ + +double d[65536], e[65536]; + +void +foo (void) +{ + int i; + double f, g; + for (i = 0; i < 65536; i++) + { + f = e[i]; + goto lab1; + lab2: + d[i] = f * g; + continue; + lab1: + g = d[i]; + goto lab2; + } +} diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index 221f257..0ae5d44 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -909,7 +909,7 @@ separate_decls_in_region_debug (gimple stmt, htab_t name_copies, var = gimple_debug_source_bind_get_var (stmt); else return true; - if (TREE_CODE (var) == DEBUG_EXPR_DECL) + if (TREE_CODE (var) == DEBUG_EXPR_DECL || TREE_CODE (var) == LABEL_DECL) return true; gcc_assert (DECL_P (var) && SSA_VAR_P (var)); ielt.uid = DECL_UID (var); |