aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorErik Edelmann <eedelman@gcc.gnu.org>2006-01-05 00:22:39 +0000
committerErik Edelmann <eedelman@gcc.gnu.org>2006-01-05 00:22:39 +0000
commit47992a4ad3c52d53813615faa04b75bd77366de7 (patch)
treea42ceb784a2f457a75a6524b59a5d032cc626759 /gcc/fortran/resolve.c
parent2653b241f2cea506f507bbfeb556a8dc63abdb64 (diff)
downloadgcc-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.c13
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);