aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2009-04-03 20:26:44 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2009-04-03 20:26:44 +0200
commit6f9c9d6d47751e980f0ca831f02e91c0ac424916 (patch)
tree451145da8c0a68c2c7cd489efba1be949fab4f36 /gcc
parentb77ba909af773561e808c3d7cf64c46a8112dcab (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/fortran/primary.c7
-rw-r--r--gcc/fortran/resolve.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/common_12.f9018
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" } }