diff options
author | Janus Weil <janus@gcc.gnu.org> | 2011-02-18 11:04:30 +0100 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2011-02-18 11:04:30 +0100 |
commit | 6e2062b00f9270676ded3f8bfe16273843f449d6 (patch) | |
tree | f939ee5f342a8d69cc75d3718d60eb5ece79abb8 /gcc/fortran/resolve.c | |
parent | 7f7d4b122b583abdbeb0681908da858ad7149d9f (diff) | |
download | gcc-6e2062b00f9270676ded3f8bfe16273843f449d6.zip gcc-6e2062b00f9270676ded3f8bfe16273843f449d6.tar.gz gcc-6e2062b00f9270676ded3f8bfe16273843f449d6.tar.bz2 |
re PR fortran/47767 ([OOP] SELECT TYPE fails to execute correct TYPE IS block)
2011-02-18 Janus Weil <janus@gcc.gnu.org>
PR fortran/47767
* gfortran.h (gfc_check_access): Removed prototype.
(gfc_check_symbol_access): Added prototype.
* module.c (gfc_check_access): Renamed to 'check_access', made static.
(gfc_check_symbol_access): New function, basically a shortcut for
'check_access'.
(write_dt_extensions,write_symbol0,write_generic,write_symtree): Use
'gfc_check_symbol_access'.
(write_operator,write_module): Renamed 'gfc_check_access'.
* resolve.c (resolve_fl_procedure,resolve_fl_derived,
resolve_fl_namelist,resolve_symbol,resolve_fntype): Use
'gfc_check_symbol_access'.
2011-02-18 Janus Weil <janus@gcc.gnu.org>
PR fortran/47767
* gfortran.dg/class_40.f03: New.
From-SVN: r170269
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 38 |
1 files changed, 14 insertions, 24 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index fefb643..1c10243 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -10146,7 +10146,7 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) the host. */ if (!(sym->ns->parent && sym->ns->parent->proc_name->attr.flavor == FL_MODULE) - && gfc_check_access(sym->attr.access, sym->ns->default_access)) + && gfc_check_symbol_access (sym)) { gfc_interface *iface; @@ -10155,8 +10155,7 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) if (arg->sym && arg->sym->ts.type == BT_DERIVED && !arg->sym->ts.u.derived->attr.use_assoc - && !gfc_check_access (arg->sym->ts.u.derived->attr.access, - arg->sym->ts.u.derived->ns->default_access) + && !gfc_check_symbol_access (arg->sym->ts.u.derived) && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' is of a " "PRIVATE type and cannot be a dummy argument" " of '%s', which is PUBLIC at %L", @@ -10178,8 +10177,7 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) if (arg->sym && arg->sym->ts.type == BT_DERIVED && !arg->sym->ts.u.derived->attr.use_assoc - && !gfc_check_access (arg->sym->ts.u.derived->attr.access, - arg->sym->ts.u.derived->ns->default_access) + && !gfc_check_symbol_access (arg->sym->ts.u.derived) && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Procedure " "'%s' in PUBLIC interface '%s' at %L " "takes dummy arguments of '%s' which is " @@ -10203,8 +10201,7 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) if (arg->sym && arg->sym->ts.type == BT_DERIVED && !arg->sym->ts.u.derived->attr.use_assoc - && !gfc_check_access (arg->sym->ts.u.derived->attr.access, - arg->sym->ts.u.derived->ns->default_access) + && !gfc_check_symbol_access (arg->sym->ts.u.derived) && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Procedure " "'%s' in PUBLIC interface '%s' at %L " "takes dummy arguments of '%s' which is " @@ -11655,11 +11652,10 @@ resolve_fl_derived (gfc_symbol *sym) if (c->ts.type == BT_DERIVED && sym->component_access != ACCESS_PRIVATE - && gfc_check_access (sym->attr.access, sym->ns->default_access) + && gfc_check_symbol_access (sym) && !is_sym_host_assoc (c->ts.u.derived, sym->ns) && !c->ts.u.derived->attr.use_assoc - && !gfc_check_access (c->ts.u.derived->attr.access, - c->ts.u.derived->ns->default_access) + && !gfc_check_symbol_access (c->ts.u.derived) && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: the component '%s' " "is a PRIVATE type and cannot be a component of " "'%s', which is PUBLIC at %L", c->name, @@ -11823,14 +11819,13 @@ resolve_fl_namelist (gfc_symbol *sym) } /* Reject PRIVATE objects in a PUBLIC namelist. */ - if (gfc_check_access(sym->attr.access, sym->ns->default_access)) + if (gfc_check_symbol_access (sym)) { for (nl = sym->namelist; nl; nl = nl->next) { if (!nl->sym->attr.use_assoc && !is_sym_host_assoc (nl->sym, sym->ns) - && !gfc_check_access(nl->sym->attr.access, - nl->sym->ns->default_access)) + && !gfc_check_symbol_access (nl->sym)) { gfc_error ("NAMELIST object '%s' was declared PRIVATE and " "cannot be member of PUBLIC namelist '%s' at %L", @@ -11851,9 +11846,7 @@ resolve_fl_namelist (gfc_symbol *sym) /* Types with private components that are defined in the same module. */ if (nl->sym->ts.type == BT_DERIVED && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns) - && !gfc_check_access (nl->sym->ts.u.derived->attr.private_comp - ? ACCESS_PRIVATE : ACCESS_UNKNOWN, - nl->sym->ns->default_access)) + && nl->sym->ts.u.derived->attr.private_comp) { gfc_error ("NAMELIST object '%s' has PRIVATE components and " "cannot be a member of PUBLIC namelist '%s' at %L", @@ -12226,8 +12219,7 @@ resolve_symbol (gfc_symbol *sym) return; gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 1, &ds); - if (!ds && sym->attr.function - && gfc_check_access (sym->attr.access, sym->ns->default_access)) + if (!ds && sym->attr.function && gfc_check_symbol_access (sym)) { symtree = gfc_new_symtree (&sym->ns->sym_root, sym->ts.u.derived->name); @@ -12243,9 +12235,8 @@ resolve_symbol (gfc_symbol *sym) if (sym->ts.type == BT_DERIVED && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE && !sym->ts.u.derived->attr.use_assoc - && gfc_check_access (sym->attr.access, sym->ns->default_access) - && !gfc_check_access (sym->ts.u.derived->attr.access, - sym->ts.u.derived->ns->default_access) + && gfc_check_symbol_access (sym) + && !gfc_check_symbol_access (sym->ts.u.derived) && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PUBLIC %s '%s' at %L " "of PRIVATE derived type '%s'", (sym->attr.flavor == FL_PARAMETER) ? "parameter" @@ -13356,9 +13347,8 @@ resolve_fntype (gfc_namespace *ns) if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc && !sym->attr.contained - && !gfc_check_access (sym->ts.u.derived->attr.access, - sym->ts.u.derived->ns->default_access) - && gfc_check_access (sym->attr.access, sym->ns->default_access)) + && !gfc_check_symbol_access (sym->ts.u.derived) + && gfc_check_symbol_access (sym)) { gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PUBLIC function '%s' at " "%L of PRIVATE type '%s'", sym->name, |