llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.03k stars 11.58k forks source link

[Flang] Compilation error when a dummy argument defined as assumed-rank is used within kind intrinsic function #107782

Closed ohno-fj closed 1 week ago

ohno-fj commented 1 week ago
Version of flang-new : 20.0.0(357bd61744bb8cc2b9b07447294fa977e5758550/AArch64

When a dummy argument defined as assumed-rank is used within kind intrinsic function, a compilation-time error occurs.

The following are the test program, Flang-new, Gfortran and ifort compilation/execution result.

FT_assumed_rank_ovr_gen_01_2.f90:

MODULE mod4
  IMPLICIT NONE
  TYPE point
     REAL :: x, y
   contains
     procedure,pass::assign_point
     generic ::assignment(=) =>assign_point
  END TYPE point
CONTAINS
  recursive SUBROUTINE assign_point (px,ax)
    class(point), INTENT(inout) :: px
    REAL, INTENT(in) :: ax(..)
    px%x=10.99
    if(kind(ax)/=4)print*,201
  END SUBROUTINE assign_point
END MODULE mod4

program main
  use mod4
  REAL :: r,r1(3),r2(4,4)
  TYPE (point) :: a
  print*,"PASS"
end program main
$ flang-new FT_assumed_rank_ovr_gen_01_2.f90
error: Semantic errors in FT_assumed_rank_ovr_gen_01_.f90
./FT_assumed_rank_ovr_gen_01_.f90:14:13: error: Assumed-rank array cannot be forwarded to 'x=' argument
      if(kind(ax)/=4)print*,201
              ^^
$
$ gfortran FT_assumed_rank_ovr_gen_01_.f90; ./a.out
 PASS
$
$ ifort -diag-disable=10448 FT_assumed_rank_ovr_gen_01_2.f90
 PASS
$
llvmbot commented 1 week ago

@llvm/issue-subscribers-flang-frontend

Author: None (ohno-fj)

``` Version of flang-new : 20.0.0(357bd61744bb8cc2b9b07447294fa977e5758550/AArch64 ``` When a dummy argument defined as `assumed-rank` is used within `kind` intrinsic function, a compilation-time error occurs. The following are the test program, Flang-new, Gfortran and ifort compilation/execution result. FT_assumed_rank_ovr_gen_01_2.f90: ```fortran MODULE mod4 IMPLICIT NONE TYPE point REAL :: x, y contains procedure,pass::assign_point generic ::assignment(=) =>assign_point END TYPE point CONTAINS recursive SUBROUTINE assign_point (px,ax) class(point), INTENT(inout) :: px REAL, INTENT(in) :: ax(..) px%x=10.99 if(kind(ax)/=4)print*,201 END SUBROUTINE assign_point END MODULE mod4 program main use mod4 REAL :: r,r1(3),r2(4,4) TYPE (point) :: a print*,"PASS" end program main ``` ``` $ flang-new FT_assumed_rank_ovr_gen_01_2.f90 error: Semantic errors in FT_assumed_rank_ovr_gen_01_.f90 ./FT_assumed_rank_ovr_gen_01_.f90:14:13: error: Assumed-rank array cannot be forwarded to 'x=' argument if(kind(ax)/=4)print*,201 ^^ $ ``` ``` $ gfortran FT_assumed_rank_ovr_gen_01_.f90; ./a.out PASS $ ``` ``` $ ifort -diag-disable=10448 FT_assumed_rank_ovr_gen_01_2.f90 PASS $ ```
klausler commented 1 week ago

https://github.com/llvm/llvm-project/pull/107787