- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
the following code suggests that ifort/ifx do not implement the change between F2008 and F2018:
program main
implicit none
type t
integer :: i
end type t
type(t), allocatable, target :: xa
type(t), pointer :: xp
class(t), allocatable, target :: ya
class(t), pointer :: yp
call foo_p (xp) ! Invalid & detected
call foo_p (xa) ! Valid in F2018, but rejected
call foo_p (yp) ! Valid, OK
call foo_p (ya) ! Valid, OK
contains
subroutine foo_p (x)
class(t), pointer, intent(in) :: x
end subroutine
end
NAG accepts line 13, while ifort/ifx say:
ifort-class-arg.f90(13): error #8300: If a dummy argument is allocatable or a pointer, and the dummy or its associated actual argument is polymorphic, both dummy and actual must be polymorphic with the same declared type or both must be unlimited polymorphic. [XA]
call foo_p (xa) ! Valid in F2018, but rejected
--------------^
F2018:15.5.2.5 (Allocatable and pointer dummy variables) has a restriction in the 1st paragraph:
The requirements in this subclause apply to an actual argument with the ALLOCATABLE or POINTER attribute that corresponds to a dummy argument with the same attribute.
while F2008 had:
The requirements in this subclause apply to actual arguments that correspond to either allocatable or pointer dummy data objects.
Note the subtle change in wording between F2008 and F2018 (F2023 has the same text as F2018).
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you once again, @Harald1. My resident Fortran expert who can read and understand the standard agrees. I filed a bug report, CMPLRLLVM-53742. We'll let you know when it's fixed.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page