From: Tobias Burnus Date: Fri, 3 Apr 2009 18:26:44 +0000 (+0200) Subject: re PR fortran/39594 (compiler falls over in gfc_get_symbol_decl) X-Git-Tag: releases/gcc-4.5.0~6922 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6f9c9d6d47751e980f0ca831f02e91c0ac424916;p=thirdparty%2Fgcc.git re PR fortran/39594 (compiler falls over in gfc_get_symbol_decl) 2009-04-03 Tobias Burnus 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 PR fortran/39594 * gfortran.dg/common_12.f90: New. From-SVN: r145513 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0b9bc88fe20e..f629bf214865 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2009-04-03 Tobias Burnus + + 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 PR preprocessor/15638 diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index c7ca861a2733..cb6f98883b0f 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 1fa1a79e23aa..32b13e4aabcb 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 2d697b1ea973..9f945cdfb312 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-03 Tobias Burnus + + PR fortran/39594 + * gfortran.dg/common_12.f90: New. + 2009-04-03 Jason Merrill 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 000000000000..0eea80f03b86 --- /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" } }