re PR fortran/37076 (Concatenation of KIND=4 strings with KIND=4 parameters fails)
authorTobias Burnus <burnus@net-b.de>
Sat, 23 Aug 2008 18:49:43 +0000 (20:49 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Sat, 23 Aug 2008 18:49:43 +0000 (20:49 +0200)
2008-08-23  Tobias Burnus  <burnus@net-b.de>

        PR fortran/37076
        * arith.c (gfc_arith_concat): Fix concat of kind=4 strings.

2008-08-23  Tobias Burnus  <burnus@net-b.de>

        PR fortran/37076
        * gfortran.dg/widechar_9.f90: New.

From-SVN: r139521

gcc/fortran/ChangeLog
gcc/fortran/arith.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/widechar_9.f90 [new file with mode: 0644]

index 30ec837..4212823 100644 (file)
@@ -1,5 +1,10 @@
 2008-08-23  Tobias Burnus  <burnus@net-b.de>
 
+       PR fortran/37076
+       * arith.c (gfc_arith_concat): Fix concat of kind=4 strings.
+
+2008-08-23  Tobias Burnus  <burnus@net-b.de>
+
        PR fortran/37025
        * target-memory.c (gfc_interpret_character): Support
        kind=4 characters.
index 2e21b84..34780b6 100644 (file)
@@ -1069,7 +1069,8 @@ gfc_arith_concat (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
   gfc_expr *result;
   int len;
 
-  result = gfc_constant_result (BT_CHARACTER, gfc_default_character_kind,
+  gcc_assert (op1->ts.kind == op2->ts.kind);
+  result = gfc_constant_result (BT_CHARACTER, op1->ts.kind,
                                &op1->where);
 
   len = op1->value.character.length + op2->value.character.length;
index a87e47d..a85f6b4 100644 (file)
@@ -1,5 +1,10 @@
 2008-08-23  Tobias Burnus  <burnus@net-b.de>
 
+       PR fortran/37076
+       * gfortran.dg/widechar_9.f90: New.
+
+2008-08-23  Tobias Burnus  <burnus@net-b.de>
+
        PR fortran/37025
        * gfortran.dg/widechar_8.f90: New.
 
diff --git a/gcc/testsuite/gfortran.dg/widechar_9.f90 b/gcc/testsuite/gfortran.dg/widechar_9.f90
new file mode 100644 (file)
index 0000000..c78a1eb
--- /dev/null
@@ -0,0 +1,14 @@
+! { dg-do compile }
+!
+! PR fortran/37076
+!
+! Before the result of concatenations was always a kind=1 string
+!
+program test3
+  integer,parameter :: u = 4
+  character(1,u),parameter :: nen=char(int(z'5e74'),u) !year
+  character(25,u) :: string
+  string = u_"2008"//nen
+  print *, u_"2008"//nen ! Compiles OK
+  print *, u_"2008"//nen//u_"8" ! Rejects this.
+end program test3