]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/54818 (error: type mismatch in binary expression)
authorTobias Burnus <burnus@net-b.de>
Thu, 20 Dec 2012 08:13:21 +0000 (09:13 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Thu, 20 Dec 2012 08:13:21 +0000 (09:13 +0100)
2012-12-20  Tobias Burnus  <burnus@net-b.de>

        PR fortran/54818
        * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Ensure that
        the string length is of type gfc_charlen_type_node.

2012-12-20  Tobias Burnus  <burnus@net-b.de>

        PR fortran/54818
        * gfortran.dg/transfer_intrinsic_4.f: New.

From-SVN: r194628

gcc/fortran/ChangeLog
gcc/fortran/trans-intrinsic.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/transfer_intrinsic_4.f [new file with mode: 0644]

index ab271a4272a185c04e701ed351981bb797ae63e5..5a72e8a8bdade41021acd54586023b1795372278 100644 (file)
@@ -1,3 +1,9 @@
+2012-12-20  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/54818
+       * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Ensure that
+       the string length is of type gfc_charlen_type_node.
+
 2012-12-19  Paul Thomas  <pault@gcc.gnu.org>
 
        * array.c (resolve_array_list): Apply C4106.
index 52f24c1d82fde39bae4e39fea1a0a5d462309aad..b9d13ccaecd2e6376a48b69352d6ac0467c7bb2f 100644 (file)
@@ -5662,7 +5662,7 @@ scalar_transfer:
       gfc_add_expr_to_block (&se->pre, tmp);
 
       se->expr = tmpdecl;
-      se->string_length = dest_word_len;
+      se->string_length = fold_convert (gfc_charlen_type_node, dest_word_len);
     }
   else
     {
index ce4f2870f0738d2c7d7530dc57c36edcdda64fb9..5ff977cb1c05dd24a70607729c1be80df895ab93 100644 (file)
@@ -1,3 +1,8 @@
+2012-12-20  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/54818
+       * gfortran.dg/transfer_intrinsic_4.f: New.
+
 2012-12-19  Paul Thomas  <pault@gcc.gnu.org>
 
        * gfortran.dg/unlimited_polymorphic_1.f03: New test.
diff --git a/gcc/testsuite/gfortran.dg/transfer_intrinsic_4.f b/gcc/testsuite/gfortran.dg/transfer_intrinsic_4.f
new file mode 100644 (file)
index 0000000..4173afd
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do compile }
+!
+! PR fortran/54818
+!
+! Contributed by  Scott Pakin
+!
+      subroutine broken ( name1, name2, bmix )
+
+      implicit none
+
+      integer, parameter :: i_knd  = kind( 1 )
+      integer, parameter :: r_knd  = selected_real_kind( 13 )
+
+      character(len=8) :: dum
+      character(len=8) :: blk
+      real(r_knd), dimension(*) :: bmix, name1, name2
+      integer(i_knd) :: j, idx1, n, i
+      integer(i_knd), external :: nafix
+
+      write (*, 99002) name1(j),
+     &     ( adjustl(
+     &     transfer(name2(nafix(bmix(idx1+i),1)),dum)//blk
+     &     //blk), bmix(idx1+i+1), i = 1, n, 2 )
+
+99002 format (' *', 10x, a8, 8x, 3(a24,1pe12.5,',',6x))
+
+      end subroutine broken