This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[Patch, fortran] PR29431 - Not Implemented: complex character array constructors
- From: Paul Thomas <paulthomas2 at wanadoo dot fr>
- To: Fortran List <fortran at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 09 Nov 2006 00:37:35 +0100
- Subject: [Patch, fortran] PR29431 - Not Implemented: complex character array constructors
:ADDPATCH fortran:
This patch permits character functions to be elements of array
constructors, as long as the character length is constant. It is a very
straightforward addition to trans-array.c. The testcase is a slight
mutilation of the reporter's.
Regtested on Suse10.1/amd64.
OK for trunk, 4.2 and 4.1?
Paul
2006-11-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29431
* trans-array.c (get_array_ctor_strlen): If we fall through to
default, use a constant character length if it is available.
2006-11-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29431
* gfortran.dg/array_constructor_13.f90: New test.
Index: gcc/fortran/trans-array.c
===================================================================
*** gcc/fortran/trans-array.c (revision 118597)
--- gcc/fortran/trans-array.c (working copy)
*************** get_array_ctor_strlen (gfc_constructor *
*** 1416,1422 ****
case EXPR_ARRAY:
if (!get_array_ctor_strlen (c->expr->value.constructor, len))
! is_const = FALSE;
break;
case EXPR_VARIABLE:
--- 1416,1422 ----
case EXPR_ARRAY:
if (!get_array_ctor_strlen (c->expr->value.constructor, len))
! is_const = false;
break;
case EXPR_VARIABLE:
*************** get_array_ctor_strlen (gfc_constructor *
*** 1425,1431 ****
break;
default:
! is_const = FALSE;
/* TODO: For now we just ignore anything we don't know how to
handle, and hope we can figure it out a different way. */
break;
--- 1425,1439 ----
break;
default:
! is_const = false;
!
! /* Hope that whatever we have possesses a constant character
! length! */
! if (!(*len && INTEGER_CST_P (*len)) && c->expr->ts.cl)
! {
! gfc_conv_const_charlen (c->expr->ts.cl);
! *len = c->expr->ts.cl->backend_decl;
! }
/* TODO: For now we just ignore anything we don't know how to
handle, and hope we can figure it out a different way. */
break;
Index: gcc/testsuite/gfortran.dg/array_constructor_13.f90
===================================================================
*** gcc/testsuite/gfortran.dg/array_constructor_13.f90 (revision 0)
--- gcc/testsuite/gfortran.dg/array_constructor_13.f90 (revision 0)
***************
*** 0 ****
--- 1,24 ----
+ ! { dg-do compile }
+ ! Tests patch for PR29431, which arose from PR29373.
+ !
+ ! Contributed by Tobias Schlueter <tobi@gcc.gnu.org>
+ !
+ implicit none
+ CHARACTER(len=6), DIMENSION(2,2) :: a
+
+ ! Reporters original triggered another error:
+ ! gfc_todo: Not Implemented: complex character array
+ ! constructors.
+
+ a = reshape([to_string(1.0), trim("abcdef"), &
+ to_string(7.0), trim("hijklm")], &
+ [2, 2])
+ print *, a
+
+ CONTAINS
+ FUNCTION to_string(x)
+ character*6 to_string
+ REAL, INTENT(in) :: x
+ WRITE(to_string, FMT="(F6.3)") x
+ END FUNCTION
+ END PROGRAM