aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2005-01-22 18:23:43 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2005-01-22 18:23:43 +0000
commitaf30f793c95eacd307ed1c52354b64b4f9aa1dc6 (patch)
tree741a6404b43521797001c198018498d7589d9458 /gcc/fortran/resolve.c
parentd7f3fc19903a41f07d22b0b7b38d06e16cff55b8 (diff)
downloadgcc-af30f793c95eacd307ed1c52354b64b4f9aa1dc6.zip
gcc-af30f793c95eacd307ed1c52354b64b4f9aa1dc6.tar.gz
gcc-af30f793c95eacd307ed1c52354b64b4f9aa1dc6.tar.bz2
gfortran.h (gfc_check_access): Add prototype.
2005-01-22 Paul Brook <paul@codesourcery.com> * gfortran.h (gfc_check_access): Add prototype. * match.c (gfc_match_namelist): Remove TODO. * module.c (check_access): Rename ... (gfc_check_access): ... to this. Boolify. Update callers. * resolve.c (resolve_symbol): Check for private objects in public namelists. testsuite/ * namelist_1.f90: New test. From-SVN: r94073
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index c3bf350..442b205b 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -3881,7 +3881,7 @@ resolve_symbol (gfc_symbol * sym)
int formal_ns_save, check_constant, mp_flag;
int i;
const char *whynot;
-
+ gfc_namelist *nl;
if (sym->attr.flavor == FL_UNKNOWN)
{
@@ -4043,8 +4043,9 @@ resolve_symbol (gfc_symbol * sym)
}
}
- if (sym->attr.flavor == FL_VARIABLE)
+ switch (sym->attr.flavor)
{
+ case FL_VARIABLE:
/* Can the sybol have an initializer? */
whynot = NULL;
if (sym->attr.allocatable)
@@ -4084,6 +4085,25 @@ resolve_symbol (gfc_symbol * sym)
/* Assign default initializer. */
if (sym->ts.type == BT_DERIVED && !(sym->value || whynot))
sym->value = gfc_default_initializer (&sym->ts);
+ break;
+
+ case FL_NAMELIST:
+ /* Reject PRIVATE objects in a PUBLIC namelist. */
+ if (gfc_check_access(sym->attr.access, sym->ns->default_access))
+ {
+ for (nl = sym->namelist; nl; nl = nl->next)
+ {
+ if (!gfc_check_access(nl->sym->attr.access,
+ nl->sym->ns->default_access))
+ gfc_error ("PRIVATE symbol '%s' cannot be member of "
+ "PUBLIC namelist at %L", nl->sym->name,
+ &sym->declared_at);
+ }
+ }
+ break;
+
+ default:
+ break;
}