diff options
| author | pbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-22 18:23:43 +0000 |
|---|---|---|
| committer | pbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-22 18:23:43 +0000 |
| commit | 51d7446c267aeee2ec68a42c904aa4079d01f401 (patch) | |
| tree | 741a6404b43521797001c198018498d7589d9458 /gcc/fortran/resolve.c | |
| parent | 38224abca2c29873048acd1f9d7444b31de87814 (diff) | |
| download | ppe42-gcc-51d7446c267aeee2ec68a42c904aa4079d01f401.tar.gz ppe42-gcc-51d7446c267aeee2ec68a42c904aa4079d01f401.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94073 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/resolve.c')
| -rw-r--r-- | gcc/fortran/resolve.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index c3bf35057df..442b205b7bc 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; } |

