diff options
author | fengwang <fengwang@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-14 01:37:41 +0000 |
---|---|---|
committer | fengwang <fengwang@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-14 01:37:41 +0000 |
commit | f780d428b4779a7d6836043a7dcf508ec511ae1d (patch) | |
tree | 407dbe2a3bb86005b9a7c59cb103c30859bc4c21 /gcc/fortran/array.c | |
parent | a03a59f46f8c30169f8530d687dde47d5244259c (diff) | |
download | gcc-f780d428b4779a7d6836043a7dcf508ec511ae1d.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102002 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r-- | gcc/fortran/array.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index dc65644f5e6..72b92a8368b 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) |