aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2012-12-20 09:13:21 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2012-12-20 09:13:21 +0100
commit64ff24b33ee82bfdef545551709aae354aecf685 (patch)
tree5de530b655e61a697a99f2f57209b595f9a6e109 /gcc
parentd19a6672c9e798d7e5b18d4eabc355f2123ca2f0 (diff)
downloadgcc-64ff24b33ee82bfdef545551709aae354aecf685.zip
gcc-64ff24b33ee82bfdef545551709aae354aecf685.tar.gz
gcc-64ff24b33ee82bfdef545551709aae354aecf685.tar.bz2
re PR fortran/54818 (error: type mismatch in binary expression)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-intrinsic.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/transfer_intrinsic_4.f27
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index ab271a4..5a72e8a 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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.
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 52f24c1..b9d13cc 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 ce4f287..5ff977c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..4173afd
--- /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