From: Tobias Burnus Date: Thu, 20 Dec 2012 08:13:21 +0000 (+0100) Subject: re PR fortran/54818 (error: type mismatch in binary expression) X-Git-Tag: releases/gcc-4.8.0~1301 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=64ff24b33ee82bfdef545551709aae354aecf685;p=thirdparty%2Fgcc.git re PR fortran/54818 (error: type mismatch in binary expression) 2012-12-20 Tobias Burnus 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 PR fortran/54818 * gfortran.dg/transfer_intrinsic_4.f: New. From-SVN: r194628 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ab271a4272a1..5a72e8a8bdad 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2012-12-20 Tobias Burnus + + 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 * array.c (resolve_array_list): Apply C4106. diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 52f24c1d82fd..b9d13ccaecd2 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -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 { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ce4f2870f073..5ff977cb1c05 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-12-20 Tobias Burnus + + PR fortran/54818 + * gfortran.dg/transfer_intrinsic_4.f: New. + 2012-12-19 Paul Thomas * 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 index 000000000000..4173afdde1ae --- /dev/null +++ b/gcc/testsuite/gfortran.dg/transfer_intrinsic_4.f @@ -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