| ! RUN: bbc %s -o "-" -emit-fir | FileCheck %s |
| |
| subroutine sub() |
| real :: x |
| ! CHECK: fir.call @_QPasubroutine() |
| call AsUbRoUtInE(); |
| ! CHECK: fir.call @_QPfoo() |
| x = foo() |
| end subroutine |
| |
| module testMod |
| contains |
| subroutine sub() |
| end subroutine |
| |
| function foo() |
| end function |
| end module |
| |
| subroutine sub1() |
| use testMod |
| real :: x |
| ! CHECK: fir.call @_QMtestmodPsub() |
| call Sub(); |
| ! CHECK: fir.call @_QMtestmodPfoo() |
| x = foo() |
| end subroutine |
| |
| subroutine sub2() |
| use testMod, localfoo => foo, localsub => sub |
| real :: x |
| ! CHECK: fir.call @_QMtestmodPsub() |
| call localsub(); |
| ! CHECK: fir.call @_QMtestmodPfoo() |
| x = localfoo() |
| end subroutine |
| |
| |
| |
| subroutine sub3() |
| real :: x |
| ! CHECK: fir.call @_QFsub3Psub() |
| call sub(); |
| ! CHECK: fir.call @_QFsub3Pfoo() |
| x = foo() |
| contains |
| subroutine sub() |
| end subroutine |
| |
| function foo() |
| end function |
| end subroutine |
| |
| function foo1() |
| real :: bar1 |
| ! CHECK: fir.call @_QPbar1() |
| foo1 = bar1() |
| end function |
| |
| function foo2() |
| ! CHECK: fir.call @_QPbar2() |
| foo2 = bar2() |
| end function |
| |
| function foo3() |
| interface |
| real function bar3() |
| end function |
| end interface |
| ! CHECK: fir.call @_QPbar3() |
| foo3 = bar3() |
| end function |
| |
| function foo4() |
| external :: bar4 |
| ! CHECK: fir.call @_QPbar4() |
| foo4 = bar4() |
| end function |
| |
| module test_bindmodule |
| contains |
| ! CHECK: func @modulecproc() |
| ! CHECK: func @bind_modulecproc() |
| subroutine modulecproc() bind(c) |
| end subroutine |
| subroutine modulecproc_1() bind(c, name="bind_modulecproc") |
| end subroutine |
| end module |
| ! CHECK-LABEL: func @_QPtest_bindmodule_call() { |
| subroutine test_bindmodule_call |
| use test_bindmodule |
| interface |
| subroutine somecproc() bind(c) |
| end subroutine |
| subroutine somecproc_1() bind(c, name="bind_somecproc") |
| end subroutine |
| end interface |
| ! CHECK: fir.call @modulecproc() |
| ! CHECK: fir.call @bind_modulecproc() |
| ! CHECK: fir.call @somecproc() |
| ! CHECK: fir.call @bind_somecproc() |
| call modulecproc() |
| call modulecproc_1() |
| call somecproc() |
| call somecproc_1() |
| end subroutine |
| |
| ! CHECK-LABEL: func @_QPtest_bind_interface() { |
| subroutine test_bind_interface() |
| interface |
| subroutine some_bindc_iface() bind(C, name="some_name_some_foo_does_not_inherit") |
| end subroutine |
| end interface |
| procedure(some_bindc_iface) :: foo5 |
| ! CHECK: fir.call @foo5 |
| call foo5() |
| end |