Open
Description
Description
Flang 20.1.1 cannot compile files that define a function returning res(max(n, 0))
in a module/submodule split, but it does compile successfully if the function and its implementation are placed in a single file.
$ flang -c bug_sub.f90 bug.f90
error: Semantic errors in bug_sub.f90
./bug_sub.f90:4:24: error: Result of function 'f1' is not compatible with the result of the corresponding interface body: function results have distinct extents (max(0_8,int(max(n,0_4),kind=8)) vs max(0_8,int(max(n,0_4),kind=8)))
pure module function f1(n) result(res)
^^
./test_m.mod:4:22: Declaration of 'f1'
module pure function f1(n) result(res)
^^
./bug_sub.f90:9:24: error: Result of function 'f2' is not compatible with the result of the corresponding interface body: function results have distinct extents (max(0_8,int(min(n,0_4),kind=8)) vs max(0_8,int(min(n,0_4),kind=8)))
pure module function f2(n) result(res)
^^
./test_m.mod:10:22: Declaration of 'f2'
module pure function f2(n) result(res)
^^
$ flang -c bug_in_one.f90
(Compilation success)
bug.f90
module test_m
implicit none
private
public :: f1, f2
interface f1
pure module function f1(n) result(res)
integer, intent(in) :: n
integer :: res(max(n, 0))
end function f1
end interface f1
interface f2
pure module function f2(n) result(res)
integer, intent(in) :: n
integer :: res(min(n, 0))
end function f2
end interface f2
end module test_m
bug_sub.f90
submodule (test_m) test_sub_m
implicit none
contains
pure module function f1(n) result(res)
integer, intent(in) :: n
integer :: res(max(n, 0))
res(:) = 0
end function f1
pure module function f2(n) result(res)
integer, intent(in) :: n
integer :: res(min(n, 0))
res(:) = 0
end function f2
end submodule test_sub_m
bug_in_one.f90
module test_in_one_m
implicit none
private
public :: f1, f2
interface f1
pure module function f1(n) result(res)
integer, intent(in) :: n
integer :: res(max(n, 0))
end function f1
end interface f1
interface f2
pure module function f2(n) result(res)
integer, intent(in) :: n
integer :: res(min(n, 0))
end function f2
end interface f2
end module test_in_one_m
submodule (test_in_one_m) test_in_one_sub_m
implicit none
contains
pure module function f1(n) result(res)
integer, intent(in) :: n
integer :: res(max(n, 0))
res(:) = 0
end function f1
pure module function f2(n) result(res)
integer, intent(in) :: n
integer :: res(min(n, 0))
res(:) = 0
end function f2
end submodule test_in_one_sub_m
OS, environment
- CPU(x86_64)
Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
$ flang --version
flang version 20.1.1 (https://github.com/llvm/llvm-project 424c2d9b7e4de40d0804dd374721e6411c27d1d1)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/flang/LLVM-20.1.1-Linux-X64/bin