This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/35945] New: Complex module-based overloading fails
- From: "J dot Hogg at rl dot ac dot uk" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 15 Apr 2008 15:15:06 -0000
- Subject: [Bug fortran/35945] New: Complex module-based overloading fails
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
If a type is renamed on import and then an unrenamed copy is also imported, and
overloaded functions are called then gfortran fails to compile with a blocked
by an incompatible object error. The code compiles cleanly with {NAG, ifort,
g95}.
Not sure if this is a bug or non-standard code, though I suspect the former.
Thanks,
Joanthan Hogg
Full test case:
[user@host] ~/bugs/gfortran-4.3/import_rename $ make
gfortran-4.3 -c stype.f90
gfortran-4.3 -c dtype.f90
gfortran-4.3 -c test.f90
test.f90:15.29:
subroutine fred(sval, dval)
1
test.f90:16.15:
use stype
2
Error: The type 'overloaded_type' cannot be host associated at (1) because it
is blocked by an incompatible object of the same name declared at (2)
make: *** [test.o] Error 1
[user@host] ~/bugs/gfortran-4.3/import_rename $ gfortran-4.3 -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --program-suffix=-4.3
Thread model: posix
gcc version 4.3.0 (GCC)
[user@host] ~/bugs/gfortran-4.3/import_rename $ cat test.f90
program test
use stype, overloaded_type_s => overloaded_type
use dtype, overloaded_type_d => overloaded_type
implicit none
type(overloaded_type_s) :: sval
type(overloaded_type_d) :: dval
sval%part = 1
dval%part = 2
call fred(sval, dval)
contains
subroutine fred(sval, dval)
use stype
type(overloaded_type_s), intent(in) :: sval
type(overloaded_type_d), intent(in) :: dval
call overloaded_sub(sval)
call overloaded_sub(dval)
end subroutine
end program
[user@host] ~/bugs/gfortran-4.3/import_rename $ cat stype.f90
module stype
implicit none
type overloaded_type
real :: part
end type
interface overloaded_sub
module procedure overloaded_sub_s
end interface
contains
subroutine overloaded_sub_s(otype)
type(overloaded_type), intent(in) :: otype
print *, "s type = ", otype%part
end subroutine
end module
[user@host] ~/bugs/gfortran-4.3/import_rename $ cat dtype.f90
module dtype
implicit none
type overloaded_type
double precision :: part
end type
interface overloaded_sub
module procedure overloaded_sub_d
end interface
contains
subroutine overloaded_sub_d(otype)
type(overloaded_type), intent(in) :: otype
print *, "d type = ", otype%part
end subroutine
end module
--
Summary: Complex module-based overloading fails
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: J dot Hogg at rl dot ac dot uk
GCC build triplet: x86_64-unknown-linux-gnu
GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35945