diff options
author | Erik Edelmann <eedelman@gcc.gnu.org> | 2006-01-05 00:22:39 +0000 |
---|---|---|
committer | Erik Edelmann <eedelman@gcc.gnu.org> | 2006-01-05 00:22:39 +0000 |
commit | 47992a4ad3c52d53813615faa04b75bd77366de7 (patch) | |
tree | a42ceb784a2f457a75a6524b59a5d032cc626759 /gcc/fortran/resolve.c | |
parent | 2653b241f2cea506f507bbfeb556a8dc63abdb64 (diff) | |
download | gcc-47992a4ad3c52d53813615faa04b75bd77366de7.zip gcc-47992a4ad3c52d53813615faa04b75bd77366de7.tar.gz gcc-47992a4ad3c52d53813615faa04b75bd77366de7.tar.bz2 |
re PR fortran/23675 (ICE in gfc_finish_var_decl (string manipulation))
2006-01-05 Erik Edelmann <eedelman@gcc.gnu.org>
PR fortran/23675
* expr.c (gfc_expr_set_symbols_referenced): New function.
* gfortran.h: Add a function prototype for it.
* resolve.c (resolve_function): Use it for
use associated character functions lengths.
* expr.c, gfortran.h, resolve.c: Updated copyright years.
testsuite/
2006-01-05 Erik Edelmann <eedelman@gcc.gnu.org>
PR fortran/23675
gfortran.dg/char_result_11.f90: New.
From-SVN: r109368
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index d0b7ab9..2e870bb 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -1,5 +1,6 @@ /* Perform type resolution on the various stuctures. - Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, + Inc. Contributed by Andy Vaught This file is part of GCC. @@ -1167,6 +1168,16 @@ resolve_function (gfc_expr * expr) } } + /* Character lengths of use associated functions may contains references to + symbols not referenced from the current program unit otherwise. Make sure + those symbols are marked as referenced. */ + + if (expr->ts.type == BT_CHARACTER && expr->value.function.esym + && expr->value.function.esym->attr.use_assoc) + { + gfc_expr_set_symbols_referenced (expr->ts.cl->length); + } + if (t == SUCCESS) find_noncopying_intrinsics (expr->value.function.esym, expr->value.function.actual); |