]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR fortran/62214 (Problem with spread plus concatenation for characters)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Thu, 21 Aug 2014 21:20:27 +0000 (21:20 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Thu, 21 Aug 2014 21:20:27 +0000 (21:20 +0000)
2014-08-21  Thomas Koenig  <tkoenig@gcc.gnu.org>

Backport from trunk
PR fortran/62214
* frontend-passes.c (optimize_binop_array_assignment):
Do not try to optimize the array assignment for string
concatenation.

2014-08-21  Thomas Koenig  <tkoenig@gcc.gnu.org>

Backport from trunk
PR fortran/62214
* gfortran.dg/array_assignment_5.f90:  New test.

From-SVN: r214296

gcc/fortran/ChangeLog
gcc/fortran/frontend-passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/array_assignment_5.f90 [new file with mode: 0644]

index 22e84cf8dd0326aae0cbcc00139c427a1af90787..2ac8fb3797cdc96c02a8fd23150658c8cca2bb29 100644 (file)
@@ -1,3 +1,9 @@
+2014-08-21  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       Backport from trunk
+       PR fortran/62214
+       * gfortran.dg/array_assignment_5.f90:  New test.
+
 2014-08-10  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        Backport from trunk
index 27729324cb79867ef7f16bead43e4147e8fea87f..7bbdac81b9ea6312521ab0d8504d08691231f45b 100644 (file)
@@ -874,6 +874,10 @@ optimize_binop_array_assignment (gfc_code *c, gfc_expr **rhs, bool seen_op)
            return true;
          break;
 
+       case INTRINSIC_CONCAT:
+         /* Do not do string concatenations.  */
+         break;
+
        default:
          /* Binary operators.  */
          if (optimize_binop_array_assignment (c, &e->value.op.op1, true))
index db8b656f83fdb2e6709e94350820f5fcae50b77b..44128c719e51a600d23638c30b82ea17bbbc960d 100644 (file)
@@ -1,3 +1,9 @@
+2014-08-21  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       Backport from trunk
+       PR fortran/62214
+       * gfortran.dg/array_assignment_5.f90:  New test.
+
 2014-08-15  Tom de Vries  <tom@codesourcery.com>
 
        Backport from mainline:
diff --git a/gcc/testsuite/gfortran.dg/array_assignment_5.f90 b/gcc/testsuite/gfortran.dg/array_assignment_5.f90
new file mode 100644 (file)
index 0000000..6d58527
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do run }
+! { dg-options "-ffrontend-optimize" }
+! PR 62214 - this used to give the wrong result.
+! Original test case by Oliver Fuhrer
+PROGRAM test
+  IMPLICIT NONE
+  CHARACTER(LEN=20)   :: fullNames(2)
+  CHARACTER(LEN=255)  :: pathName
+  CHARACTER(LEN=5)    :: fileNames(2)
+  
+  pathName = "/dir1/dir2/"
+  fileNames = (/ "file1", "file2" /)
+  fullNames = SPREAD(TRIM(pathName),1,2) // fileNames
+  if (fullNames(1) /= '/dir1/dir2/file1' .or. &
+       & fullnames(2) /= '/dir1/dir2/file2') call abort
+END PROGRAM test