re PR fortran/31764 (NEW_LINE with array argument)
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 6 May 2007 22:56:52 +0000 (22:56 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 6 May 2007 22:56:52 +0000 (22:56 +0000)
PR fortran/31764

* simplify.c (gfc_simplify_new_line): NEW_LINE can be simplified
even for non constant arguments.

* gfortran.dg/new_line.f90: Add new checks.

From-SVN: r124482

gcc/fortran/ChangeLog
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/new_line.f90

index 8d15bf2dcb74dee23eaee594f8816c2a7e152c83..04220ab80a23c720e53758f4a141110690552c9f 100644 (file)
@@ -1,3 +1,9 @@
+2007-05-07  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/31764
+       * simplify.c (gfc_simplify_new_line): NEW_LINE can be simplified
+       even for non constant arguments.
+
 2007-05-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
            Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
index 9df2e812c1d945d936f053a2676747569410fd59..ed62ee34da45fef4e2805d18f285de73e65a0208 100644 (file)
@@ -2641,13 +2641,8 @@ gfc_simplify_new_line (gfc_expr *e)
 {
   gfc_expr *result;
 
-  if (e->expr_type != EXPR_CONSTANT)
-    return NULL;
-
   result = gfc_constant_result (BT_CHARACTER, e->ts.kind, &e->where);
-
   result->value.character.string = gfc_getmem (2);
-
   result->value.character.length = 1;
   result->value.character.string[0] = '\n';
   result->value.character.string[1] = '\0';     /* For debugger */
index 36cec0d7f3256567362ef6f014f80290aeb3020d..da85bb5cf46b08b909a6c17a1019436d737a76b8 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-07  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/31764
+       * gfortran.dg/new_line.f90: Add new checks.
+
 2007-05-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/31201
index 355ca30209b36eab695a4d727694f679732db1fd..aacabc69f6e16507f2ff9aaafc5418631b1fb1a1 100644 (file)
@@ -2,6 +2,19 @@
 ! Checks Fortran 2003's new_line intrinsic function
 ! PR fortran/28585
 program new_line_check
-    implicit none
-    if(achar(10) /= new_line('a')) call abort()
+  implicit none
+  character(len=10) :: a1
+  character(len=10) :: a2(2)
+  character(len=10), parameter :: a3 = "1234567890"
+  character(len=10), parameter :: a4(2) = "1234567890"
+  character(len=10), parameter :: a5(2) = repeat("1234567890",2)
+
+  if(achar(10) /= new_line('a')) call abort
+
+  if (iachar(new_line(a1)) /= 10) call abort
+  if (iachar(new_line(a2)) /= 10) call abort
+  if (iachar(new_line(a3)) /= 10) call abort
+  if (iachar(new_line(a4)) /= 10) call abort
+  if (iachar(new_line(a5)) /= 10) call abort
+
 end program new_line_check