diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2015-01-18 12:21:38 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2015-01-18 12:21:38 +0000 |
commit | e207c522623c3d3620416b5332b8a6d8644a1f06 (patch) | |
tree | b4a34c50935449f36aaace2f13d03cbaffac2ad3 /gcc/fortran/resolve.c | |
parent | d28701a2da0fbe188c551d9a698a4b72bf920246 (diff) | |
download | gcc-e207c522623c3d3620416b5332b8a6d8644a1f06.zip gcc-e207c522623c3d3620416b5332b8a6d8644a1f06.tar.gz gcc-e207c522623c3d3620416b5332b8a6d8644a1f06.tar.bz2 |
re PR fortran/55901 ([OOP] type is (character(len=*)) misinterpreted as array)
2015-01-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/55901
* primary.c (gfc_match_varspec): Exclude dangling associate-
names with dimension 0 from being counted as arrays.
* resolve.c (resolve_assoc_var): Sub-strings are permissible
for associate-names, so exclude characters from the test for
misuse as arrays.
* trans-decl.c (gfc_get_symbol_decl): Associate-names can use
the hidden string length variable of their associated target.
Signal this by setting 'length' to a constant, if the decl for
the string length is a variable.
2015-01-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/55901
* gfortran.dg/associate_1.f03: Allow test for character with
automatic length.
From-SVN: r219814
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 7a16add..a9645a0 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -7935,8 +7935,11 @@ resolve_assoc_var (gfc_symbol* sym, bool resolve_target) /* Finally resolve if this is an array or not. */ if (sym->attr.dimension && target->rank == 0) { - gfc_error ("Associate-name %qs at %L is used as array", - sym->name, &sym->declared_at); + /* primary.c makes the assumption that a reference to an associate + name followed by a left parenthesis is an array reference. */ + if (sym->ts.type != BT_CHARACTER) + gfc_error ("Associate-name %qs at %L is used as array", + sym->name, &sym->declared_at); sym->attr.dimension = 0; return; } |