Issue |
138807
|
Summary |
[Flang] About using names with multiple declarations (intrinsic statement, interface block, derived type) in a program
|
Labels |
flang:frontend
|
Assignees |
|
Reporter |
ohno-fj
|
```
Version of flang : 20.0.0(842e5915778a820c63cf38b75bec932a6ea8c18b)/AArch64
```
In the attached program, this program has three declarations using `name (int)`:
- `intrinsic statement`
`intrinsic-procedure-name-list` is defined as `intrinsic function (int)`.
- `generic-spec of interface block`
`external procedure (ifunc01)` is defined as `generic specification (int)`.
- `derived-type definition`
`type-name` is defined as a `derived type (int)`.
Is this confusing usage incorrect?
I checked `Fortran standard 2023` and could not see if this program is incorrect.
Currently, Flang and Gfortran seem to recognize that `intrinsic statement` is valid and `name (int)` is an `int intrinsic function`.
The following are the test program, Flang, Gfortran and ifx compilation/execution result.
snf_fsstc_19_23.f90:
```fortran
program main
intrinsic :: int
interface int
function ifunc01(if01_arg01, if01_arg02) result(irst01)
integer :: if01_arg01
integer :: if01_arg02
integer :: irst01
end function ifunc01
end interface int
type int
real :: ti1_r01
end type int
type (int) ::aaa
aaa=int(1)
! if (aaa%ti1_r01.ne.1) print *,'err'
! if (int(2,1).ne.2) print *,'err'
print *,'pass'
end program main
function ifunc01(if01_arg01, if01_arg02) result(irst01)
integer :: if01_arg01
integer :: if01_arg02
integer :: irst01
irst01 = int(if01_arg01) + int(if01_arg02)
end function ifunc01
```
```
$ flang snf_fsstc_19_23.f90
error: Semantic errors in snf_fsstc_19_23.f90
./snf_fsstc_19_23.f90:14:3: error: No intrinsic or user-defined ASSIGNMENT(=) matches operand types TYPE(int) and INTEGER(4)
aaa=int(1)
^^^^^^^^^^
$
```
```
$ gfortran snf_fsstc_19_23.f90
snf_fsstc_19_23.f90:14:6:
14 | aaa=int(1)
| 1
Error: Cannot convert INTEGER(4) to TYPE(int) at (1)
$
```
```
$ ifx snf_fsstc_19_23.f90; ./a.out
pass
$
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs