diff options
author | Richard Biener <rguenther@suse.de> | 2014-05-19 14:32:23 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-05-19 14:32:23 +0000 |
commit | 051351362bfe8552549443b77bdbd0ac5e003eac (patch) | |
tree | af10f92a91fffb8d09a0fb417dee649957a83b4b | |
parent | 40ba8dfb395e8ed85990a2655cf0d8a0f7619e0c (diff) | |
download | gcc-051351362bfe8552549443b77bdbd0ac5e003eac.zip gcc-051351362bfe8552549443b77bdbd0ac5e003eac.tar.gz gcc-051351362bfe8552549443b77bdbd0ac5e003eac.tar.bz2 |
re PR middle-end/61209 (internal compiler error: in fold_convert_loc, at fold-const.c:1950)
2014-05-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/61209
* tree-ssa-sccvn.c (visit_phi): Avoid setting expr to VN_TOP.
* gfortran.dg/pr61209.f90: New testcase.
From-SVN: r210613
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr61209.f90 | 46 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 6 |
4 files changed, 60 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f48f5d..90eca0c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-05-19 Richard Biener <rguenther@suse.de> + + PR tree-optimization/61209 + * tree-ssa-sccvn.c (visit_phi): Avoid setting expr to VN_TOP. + 2014-05-19 Nick Clifton <nickc@redhat.com> * except.c (init_eh): Fix computation of builtin setjmp buffer diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d731eb9..83b4264 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2014-05-19 Richard Biener <rguenther@suse.de> + PR tree-optimization/61209 + * gfortran.dg/pr61209.f90: New testcase. + +2014-05-19 Richard Biener <rguenther@suse.de> + PR tree-optimization/61184 * c-c++-common/torture/pr61184.c: New testcase. diff --git a/gcc/testsuite/gfortran.dg/pr61209.f90 b/gcc/testsuite/gfortran.dg/pr61209.f90 new file mode 100644 index 0000000..481714d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr61209.f90 @@ -0,0 +1,46 @@ +! { dg-do compile } +! { dg-options "-O -fbounds-check" } +MODULE array_types + INTERFACE array_data + MODULE PROCEDURE array_data_i1d + END INTERFACE + TYPE array_i1d_type + END TYPE array_i1d_type + TYPE array_i1d_obj + TYPE(array_i1d_type), POINTER :: low + END TYPE array_i1d_obj + TYPE dbcsr_type + TYPE(array_i1d_obj) :: local_rows + LOGICAL :: local_indexing + END TYPE dbcsr_type + TYPE dbcsr_obj + TYPE(dbcsr_type) :: m + END TYPE dbcsr_obj +CONTAINS + FUNCTION array_data_i1d(array) RESULT (DATA) + TYPE(array_i1d_obj), INTENT(IN) :: array + INTEGER, DIMENSION(:), POINTER :: DATA + IF (ASSOCIATED (array%low)) THEN + ENDIF + END FUNCTION array_data_i1d + SUBROUTINE dbcsr_make_index_list (matrix, thread_redist) + TYPE(dbcsr_obj), INTENT(INOUT) :: matrix + LOGICAL, INTENT(IN) :: thread_redist + INTEGER, ALLOCATABLE, DIMENSION(:, :) :: blki + INTEGER, DIMENSION(:), POINTER :: local_rows, td + INTEGER :: blk + nthreads = 0 + IF (nthreads .GT. 0 .AND. thread_redist) THEN + IF (matrix%m%local_indexing) THEN + local_rows => array_data (matrix%m%local_rows) + ENDIF + CALL dbcsr_build_row_index_inplace (thr_c, nthreads) + IF (matrix%m%local_indexing) THEN + DO blk = 1, nblks + IF (td(local_rows(blki(1, blk))) .EQ. ithread) THEN + ENDIF + ENDDO + ENDIF + ENDIF + END SUBROUTINE dbcsr_make_index_list +END MODULE diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 84c0d6e..bd60372 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -3125,12 +3125,14 @@ visit_phi (gimple phi) if (is_gimple_min_invariant (sameval)) { VN_INFO (PHI_RESULT (phi))->has_constants = true; - VN_INFO (PHI_RESULT (phi))->expr = sameval; + if (sameval != VN_TOP) + VN_INFO (PHI_RESULT (phi))->expr = sameval; } else { VN_INFO (PHI_RESULT (phi))->has_constants = false; - VN_INFO (PHI_RESULT (phi))->expr = sameval; + if (sameval != VN_TOP) + VN_INFO (PHI_RESULT (phi))->expr = sameval; } if (TREE_CODE (sameval) == SSA_NAME) |