re PR fortran/36316 (type mismatch in binary expression caught by verify_gimple)
authorTobias Burnus <burnus@net-b.de>
Tue, 27 May 2008 19:22:01 +0000 (21:22 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Tue, 27 May 2008 19:22:01 +0000 (21:22 +0200)
2008-05-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/36316
        * trans-array.c (gfc_set_loop_bounds_from_array_spec):
        Add missing fold_convert.

2008-05-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/36316
        * gfortran.dg/assignment_3.f90: New.

From-SVN: r136052

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/assignment_3.f90 [new file with mode: 0644]

index 073f5428a16a85d4276f6fceff04a904f3ed8bb5..d879a4c4ec7b6d2516e913d6aa21285d973fbfaf 100644 (file)
@@ -1,3 +1,9 @@
+2008-05-27  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/36316
+       * trans-array.c (gfc_set_loop_bounds_from_array_spec):
+       Add missing fold_convert.
+
 2008-05-26  Daniel Franke  <franke.daniel@gmail.com>
 
        * fortran/cpp.c (cpp_define_builtins): Remove usage of TARGET_* macros,
index a691ad5ffefa83f84226a655514274cc8c2edcc5..bc6d13a7fa8cb43b143b88cb01bc8596755c1ae6 100644 (file)
@@ -472,14 +472,14 @@ gfc_set_loop_bounds_from_array_spec (gfc_interface_mapping * mapping,
            gfc_apply_interface_mapping (mapping, &tmpse, as->lower[dim]);
            gfc_add_block_to_block (&se->pre, &tmpse.pre);
            gfc_add_block_to_block (&se->post, &tmpse.post);
-           lower = tmpse.expr;
+           lower = fold_convert (gfc_array_index_type, tmpse.expr);
 
            /* ...and the upper bound.  */
            gfc_init_se (&tmpse, NULL);
            gfc_apply_interface_mapping (mapping, &tmpse, as->upper[dim]);
            gfc_add_block_to_block (&se->pre, &tmpse.pre);
            gfc_add_block_to_block (&se->post, &tmpse.post);
-           upper = tmpse.expr;
+           upper = fold_convert (gfc_array_index_type, tmpse.expr);
 
            /* Set the upper bound of the loop to UPPER - LOWER.  */
            tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, upper, lower);
index b94e9d92f9cca7e1cc727d2996cb86b20622869c..556d76eae02cebe41b7638881c54d657b73a5ba0 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-27  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/36316
+       * gfortran.dg/assignment_3.f90: New.
+
 2008-05-27  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * lib/fortran-torture.exp (get-fortran-torture-options):
diff --git a/gcc/testsuite/gfortran.dg/assignment_3.f90 b/gcc/testsuite/gfortran.dg/assignment_3.f90
new file mode 100644 (file)
index 0000000..d843c32
--- /dev/null
@@ -0,0 +1,61 @@
+! { dg-do compile }
+! PR fortran/36316
+!
+! gfortran generated a mismatching tree ("type mismatch in binary expression")
+! for array bounds (mixing integer kind=4/kind=8 without fold_convert).
+!
+MODULE YOMCAIN
+
+IMPLICIT NONE
+SAVE
+
+TYPE distributed_vector
+REAL, pointer :: local(:)
+INTEGER(4)       :: global_length,local_start
+INTEGER(8)       :: local_end
+END TYPE distributed_vector
+
+INTERFACE ASSIGNMENT (=)
+MODULE PROCEDURE assign_ar_dv
+END INTERFACE
+
+INTERFACE OPERATOR (*)
+MODULE PROCEDURE multiply_dv_dv
+END INTERFACE
+
+CONTAINS
+
+SUBROUTINE assign_ar_dv (handle,pvec)
+
+!         copy array to the distributed_vector
+
+REAL,                      INTENT(IN)    :: pvec(:)
+TYPE (distributed_vector), INTENT(INOUT) :: handle
+
+handle%local(:) = pvec(:)
+
+RETURN
+END SUBROUTINE assign_ar_dv
+
+FUNCTION multiply_dv_dv (handle1,handle2)
+
+!         multiply two distributed_vectors
+
+TYPE (distributed_vector), INTENT(IN) :: handle2
+TYPE (distributed_vector), INTENT(IN) :: handle1
+REAL :: multiply_dv_dv(handle1%local_start:handle1%local_end)
+
+multiply_dv_dv = handle1%local(:) * handle2%local(:)
+
+RETURN
+END FUNCTION multiply_dv_dv
+
+
+SUBROUTINE CAININAD_SCALE_DISTVEC ()
+TYPE (distributed_vector) :: PVAZG
+TYPE (distributed_vector) :: ZTEMP
+TYPE (distributed_vector) :: SCALP_DV
+
+ZTEMP = PVAZG * SCALP_DV
+END SUBROUTINE CAININAD_SCALE_DISTVEC
+END MODULE YOMCAIN