[Bug fortran/40089] New: Public type with public component which has a private type
janus at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sun May 10 09:37:00 GMT 2009
Please consider the following code:
module m
implicit none
private
public :: public_t
public :: public_sub
!public :: private_t (*)
type :: private_t
integer :: i
end type
type :: public_t
type(private_t), pointer :: public_comp_with_private_type !(#1)
procedure(ifc) , nopass, pointer :: ppc
end type
abstract interface
integer function ifc ()
end function
end interface
type(private_t), save, public :: public_var_with_private_type !(#2)
contains
subroutine public_sub(arg) !(#3)
type(private_t) :: arg
end subroutine
end module m
program test
use m
implicit none
type(public_t) :: x
integer :: j
print *,public_var_with_private_type%i
j = x%ppc() ! Error: Can't convert UNKNOWN to INTEGER(4)
end
With current trunk versions of gfortran, this produces the error indicated in
the last line of the program. Of course this error is bogus, since ppc has an
explicit interface (with an integer return type).
However, I believe this program is invalid for the following reason: The type
'public_t' is public in the module m, and it has a public component, indicated
by (#1), whose type is private in the module. So this component is accessible
outside of the module, but its type is not.
Up to now I was not able to find a rule in the F03 Standard, which explicitly
forbids this. But my common sense tells me that it should be invalid (hoping my
common sense works alright).
Following the same reasoning, the cases (#2) and (#3) should be invalid, too,
but none of them is detected by gfortran. Unfortunately, I could not find any
other compiler which rejects the program (ifort and g95 accept it). Still I
think it is invalid.
If the line indicated by (*) is uncommented, the error message goes away. With
this modification the program should be valid, and all is fine.
Thanks to Juergen Reuter for reporting this.
--
Summary: Public type with public component which has a private
type
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: janus at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40089
More information about the Gcc-bugs
mailing list