diff options
author | Tobias Burnus <burnus@net-b.de> | 2009-04-03 20:26:44 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2009-04-03 20:26:44 +0200 |
commit | 6f9c9d6d47751e980f0ca831f02e91c0ac424916 (patch) | |
tree | 451145da8c0a68c2c7cd489efba1be949fab4f36 /gcc | |
parent | b77ba909af773561e808c3d7cf64c46a8112dcab (diff) | |
download | gcc-6f9c9d6d47751e980f0ca831f02e91c0ac424916.zip gcc-6f9c9d6d47751e980f0ca831f02e91c0ac424916.tar.gz gcc-6f9c9d6d47751e980f0ca831f02e91c0ac424916.tar.bz2 |
re PR fortran/39594 (compiler falls over in gfc_get_symbol_decl)
2009-04-03 Tobias Burnus <burnus@net-b.de>
PR fortran/39594
* resolve.c (resolve_common_vars): Add FL_VARIABLE to symbol
if it is not a procedure pointer.
* primary.c (match_actual_arg): Ditto.
2009-04-03 Tobias Burnus <burnus@net-b.de>
PR fortran/39594
* gfortran.dg/common_12.f90: New.
From-SVN: r145513
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/primary.c | 7 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/common_12.f90 | 18 |
5 files changed, 40 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0b9bc88..f629bf2 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2009-04-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/39594 + * resolve.c (resolve_common_vars): Add FL_VARIABLE to symbol + if it is not a procedure pointer. + * primary.c (match_actual_arg): Ditto. + 2009-03-31 Joseph Myers <joseph@codesourcery.com> PR preprocessor/15638 diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index c7ca861..cb6f988 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1401,6 +1401,13 @@ match_actual_arg (gfc_expr **result) && sym->attr.flavor != FL_UNKNOWN) break; + if (sym->attr.in_common && !sym->attr.proc_pointer) + { + gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, + &sym->declared_at); + break; + } + /* If the symbol is a function with itself as the result and is being defined, then we have a variable. */ if (sym->attr.function && sym->result == sym) diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 1fa1a79..32b13e4 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -719,6 +719,9 @@ resolve_common_vars (gfc_symbol *sym, bool named_common) gfc_error_now ("Derived type variable '%s' in COMMON at %L " "may not have default initializer", csym->name, &csym->declared_at); + + if (csym->attr.flavor == FL_UNKNOWN && !csym->attr.proc_pointer) + gfc_add_flavor (&csym->attr, FL_VARIABLE, csym->name, &csym->declared_at); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2d697b1..9f945cd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/39594 + * gfortran.dg/common_12.f90: New. + 2009-04-03 Jason Merrill <jason@redhat.com> PR c++/39608 diff --git a/gcc/testsuite/gfortran.dg/common_12.f90 b/gcc/testsuite/gfortran.dg/common_12.f90 new file mode 100644 index 0000000..0eea80f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/common_12.f90 @@ -0,0 +1,18 @@ +! { dg-do compile } +! +! PR fortran/39594 +! +! Contributed by Peter Knowles and reduced by Jakub Jelinek. +! +module pr39594 + implicit double precision(z) + common /z/ z0,z1,z2,z3,z4,z5,z6,z7 +contains + subroutine foo + implicit double precision(z) + common /z/ z0,z1,z2,z3,z4,z5,z6,z7 + call bar(z0) + end subroutine foo +end module + +! { dg-final { cleanup-modules "pr39594" } } |