diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-12-18 19:15:10 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-12-18 19:15:10 +0100 |
commit | 81fada9aa760fe9e502fbc0ad0e4bf94ecd1269f (patch) | |
tree | 2ec83785466dc6ee7922f916a272411c1c679773 | |
parent | 16923e7bf333db732aed3686972b40ac2e458109 (diff) | |
download | gcc-81fada9aa760fe9e502fbc0ad0e4bf94ecd1269f.zip gcc-81fada9aa760fe9e502fbc0ad0e4bf94ecd1269f.tar.gz gcc-81fada9aa760fe9e502fbc0ad0e4bf94ecd1269f.tar.bz2 |
re PR tree-optimization/46985 (ICE: SIGSEGV in is_gimple_min_invariant (gimple.c:2742) with -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre)
PR tree-optimization/46985
* tree-scalar-evolution.c (instantiate_scev_r): If chrec is NULL,
return it immediately.
* gfortran.dg/pr46985.f90: New test.
From-SVN: r168027
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr46985.f90 | 17 | ||||
-rw-r--r-- | gcc/tree-scalar-evolution.c | 3 |
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9536e0a..7f2a5ae 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-12-18 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/46985 + * tree-scalar-evolution.c (instantiate_scev_r): If chrec is NULL, + return it immediately. + 2010-12-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> PR target/46915 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 64b9ffe..711f343 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-18 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/46985 + * gfortran.dg/pr46985.f90: New test. + 2010-12-18 Eric Botcazou <ebotcazou@adacore.com> PR tree-optimization/46232 diff --git a/gcc/testsuite/gfortran.dg/pr46985.f90 b/gcc/testsuite/gfortran.dg/pr46985.f90 new file mode 100644 index 0000000..141641d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr46985.f90 @@ -0,0 +1,17 @@ +! PR tree-optimization/46985 +! { dg-do compile } +! { dg-options "-O -ftree-pre -ftree-vrp -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre" } + + type :: t + integer :: i + end type t + type(t), target :: tar(2) = (/t(2), t(4)/) + integer, pointer :: ptr(:) + ptr => tar%i + call foo (ptr) +contains + subroutine foo (arg) + integer :: arg(:) + arg = arg - 1 + end subroutine +end diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 4a4bda9..24be2e8 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -2616,7 +2616,8 @@ instantiate_scev_r (basic_block instantiate_below, if (size_expr++ > PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE)) return chrec_dont_know; - if (automatically_generated_chrec_p (chrec) + if (chrec == NULL_TREE + || automatically_generated_chrec_p (chrec) || is_gimple_min_invariant (chrec)) return chrec; |