OSDN Git Service

2012-12-20 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 Dec 2012 08:13:21 +0000 (08:13 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 Dec 2012 08:13:21 +0000 (08:13 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194628 138bc75d-0d04-0410-961f-82ee72b054a4

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 ab271a4..5a72e8a 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 52f24c1..b9d13cc 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 ce4f287..5ff977c 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