Skip to content

[flang] The function result res(max(n, 0)) has distinct extents when split across a module and its submodule #133646

Open
@osada-yum

Description

@osada-yum

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions