[Bug fortran/87669] New: Select type, incorrect handling of parameterized derived type
etdescdev at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sat Oct 20 21:47:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87669
Bug ID: 87669
Summary: Select type, incorrect handling of parameterized
derived type
Product: gcc
Version: 8.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: etdescdev at gmail dot com
Target Milestone: ---
The SELECT TYPE statement matches the class of a parameterized derived type
without checking the kind parameter of the object.
Tested on Ubuntu 18.10 (with gfortran 8.2.0-7ubuntu1 and 9.0.0 20181020
(r265341)) and macOS Mojave (with Homebrew GCC 8.2.0):
Program Devtest
Type dvtype(k)
Integer, Kind :: k
Real(k) :: a, b, c
End Type dvtype
type(dvtype(8)) :: dv
dv%a = 1; dv%b = 2; dv%c = 3
call dvtype_print(dv)
Contains
Subroutine dvtype_print(p)
class(*), intent(in) :: p
Select Type(p)
class is (dvtype(4))
print *, "dvtype4", p%k, p%a, p%b, p%c
End Select
Select Type(p)
class is (dvtype(8))
print *, "dvtype8", p%k, p%a, p%b, p%c
End Select
End Subroutine dvtype_print
End
Output:
dvtype4 8 0.00000000 0.00000000 1.87500000
dvtype8 8 1.0000000000000000 2.0000000000000000
3.0000000000000000
In this case, the compiler does not display any warning message with -Wall and
-Wextra.
This program compiles and runs without generating any error, yet it prints the
line dvtype4 that does not correspond to the datatype of the object.
In this statement, the kind parameter k is correctly evaluated, but the values
a, b and c are displayed as if k were equal to 4.
More information about the Gcc-bugs
mailing list