diff options
| author | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-28 10:13:50 +0000 |
|---|---|---|
| committer | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-28 10:13:50 +0000 |
| commit | 62838b071143b61f338a69430d2b59ebb83e7b2a (patch) | |
| tree | 67e215c9e639e3eb52fdc4220f02441cfda969a5 | |
| parent | ecf7be7101e97844b86a3ba29b8ce5e2e96b0b1a (diff) | |
| download | ppe42-gcc-62838b071143b61f338a69430d2b59ebb83e7b2a.tar.gz ppe42-gcc-62838b071143b61f338a69430d2b59ebb83e7b2a.zip | |
2006-03-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/26779
*resolve.c (resolve_fl_procedure): Do not check the access of
derived types for internal procedures.
2006-03-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/26779
* gfortran.dg/private_type_5.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112442 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/fortran/resolve.c | 10 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gfortran.dg/private_type_5.f90 | 24 |
4 files changed, 42 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6d19805ee66..d2a1e4fc66d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2006-03-28 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/26779 + *resolve.c (resolve_fl_procedure): Do not check the access of + derived types for internal procedures. + 2006-03-27 Jakub Jelinek <jakub@redhat.com> * io.c (check_io_constraints): Don't look at diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 548b67ef7c5..562338fdb64 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -4834,9 +4834,13 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) } } - /* Ensure that derived type formal arguments of a public procedure - are not of a private type. */ - if (gfc_check_access(sym->attr.access, sym->ns->default_access)) + /* Ensure that derived type for are not of a private type. Internal + module procedures are excluded by 2.2.3.3 - ie. they are not + externally accessible and can access all the objects accesible in + 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)) { for (arg = sym->formal; arg; arg = arg->next) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 539c2a821ca..c2383d247b5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-03-28 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/26779 + * gfortran.dg/private_type_5.f90: New test. + 2006-03-27 David Edelsohn <edelsohn@gnu.org> * objc.dg/objc-nofilename-1.m: Limit to Darwin. diff --git a/gcc/testsuite/gfortran.dg/private_type_5.f90 b/gcc/testsuite/gfortran.dg/private_type_5.f90 new file mode 100644 index 00000000000..e62fe6e21c4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/private_type_5.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! Tests the fix for PR26779, where an error would occur because +! init was detected to be public with a private type dummy argument. +! +! Contributed by Paul Thomas <pault@gcc.gnu.org> +! +module test + public sub + type, private :: t + integer :: i + end type t +contains + subroutine sub (arg) + integer arg + type(t) :: root + call init(root, arg) + contains + subroutine init(ir, i) + integer i + type(t) :: ir + ir%i = i + end subroutine init + end subroutine sub +end module test
\ No newline at end of file |

