aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2007-05-31 21:12:10 +0000
committerPaul Thomas <pault@gcc.gnu.org>2007-05-31 21:12:10 +0000
commitac5753b796593af16f52cdab931d1768875e5ea8 (patch)
treef416b7af202db5b151b1f1b65e682b2663efbcbe /gcc/fortran
parentcba83c6f794f7282133f08ae68908c3b5b414d20 (diff)
downloadgcc-ac5753b796593af16f52cdab931d1768875e5ea8.zip
gcc-ac5753b796593af16f52cdab931d1768875e5ea8.tar.gz
gcc-ac5753b796593af16f52cdab931d1768875e5ea8.tar.bz2
re PR fortran/32156 (ICE with characters)
2007-05-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/32156 * trans-array.c (gfc_trans_array_constructor): Treat the case where the ss expression charlen is missing. 2007-05-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/32156 * gfortran.dg/char_array_constructor_3.f90: New test. From-SVN: r125241
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/trans-array.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index efff3fd..a923871be 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -1635,8 +1635,18 @@ gfc_trans_array_constructor (gfc_loopinfo * loop, gfc_ss * ss)
if (!ss->string_length)
gfc_todo_error ("complex character array constructors");
- ss->expr->ts.cl->backend_decl = ss->string_length;
+ /* It is surprising but still possible to wind up with expressions that
+ lack a character length.
+ TODO Find the offending part of the front end and cure this properly.
+ Concatenation involving arrays is the main culprit. */
+ if (!ss->expr->ts.cl)
+ {
+ ss->expr->ts.cl = gfc_get_charlen ();
+ ss->expr->ts.cl->next = gfc_current_ns->cl_list;
+ gfc_current_ns->cl_list = ss->expr->ts.cl->next;
+ }
+ ss->expr->ts.cl->backend_decl = ss->string_length;
type = gfc_get_character_type_len (ss->expr->ts.kind, ss->string_length);
if (const_string)