From 4a90ae54a0930ff7b5166e9eb791759890fae2ef Mon Sep 17 00:00:00 2001 From: Feng Wang <fengwang@gcc.gnu.org> Date: Thu, 14 Jul 2005 01:37:41 +0000 Subject: [PATCH] [multiple changes] 2005-07-14 Steven G. Kargl <kargls@comcast.net> * gfortran.dg/char_array_constructor.f90: New test. 2005-07-14 Feng Wang <fengwang@nudt.edu.cn> Steven G. Kargl <kargls@comcast.net> * array.c (resolve_character_array_constructor): Allocate gfc_charlen for the array and attach to namespace list for automatic deallocation. From-SVN: r102002 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/array.c | 11 ++++++++--- gcc/testsuite/ChangeLog | 4 ++++ .../gfortran.dg/char_array_constructor.f90 | 15 +++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/char_array_constructor.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index aedec2cf78ec..a4897da6434b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-07-14 Feng Wang <fengwang@nudt.edu.cn> + Steven G. Kargl <kargls@comcast.net> + + * array.c (resolve_character_array_constructor): Allocate gfc_charlen + for the array and attach to namespace list for automatic deallocation. + 2005-07-13 Andreas Schwab <schwab@suse.de> * Make-lang.in (fortran/dependency.o): Depend on diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index dc65644f5e60..72b92a8368bd 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -1529,7 +1529,14 @@ resolve_character_array_constructor (gfc_expr * expr) max_length = -1; - if (expr->ts.cl == NULL || expr->ts.cl->length == NULL) + if (expr->ts.cl == NULL) + { + expr->ts.cl = gfc_get_charlen (); + expr->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = expr->ts.cl; + } + + if (expr->ts.cl->length == NULL) { /* Find the maximum length of the elements. Do nothing for variable array constructor. */ @@ -1542,8 +1549,6 @@ resolve_character_array_constructor (gfc_expr * expr) if (max_length != -1) { /* Update the character length of the array constructor. */ - if (expr->ts.cl == NULL) - expr->ts.cl = gfc_get_charlen (); expr->ts.cl->length = gfc_int_expr (max_length); /* Update the element constructors. */ for (p = expr->value.constructor; p; p = p->next) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e4682e59a915..1c94063bc1bd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-07-14 Steven G. Kargl <kargls@comcast.net> + + * gfortran.dg/char_array_constructor.f90: New test. + 2005-07-13 Paul Thomas <pault@gcc.gnu.org> * gfortran.dg/past_eor.f90: New. diff --git a/gcc/testsuite/gfortran.dg/char_array_constructor.f90 b/gcc/testsuite/gfortran.dg/char_array_constructor.f90 new file mode 100644 index 000000000000..0cb4d38bf039 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/char_array_constructor.f90 @@ -0,0 +1,15 @@ +! { dg-do run } +module z + integer :: i + character(6) :: a(2) = (/ ('main ' , i = 1, 2) /) + character(6) :: b(2) = (/ 'abcd ' , 'efghij' /) +end module + +program y + use z + if (a(1) /= 'main ') call abort + if (a(2) /= 'main ') call abort + if (b(1) /= 'abcd ') call abort + if (b(2) /= 'efghij') call abort +end program y + -- GitLab