-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[flang] Check for BIND(C) through use association.
If the interface specifies BIND(C), then the declarations using this interface inherit BIND(C), and if they are referenced via use association they must be classified as BIND(C) subprograms. Differential Revision: https://reviews.llvm.org/D145084
- Loading branch information
Showing
2 changed files
with
58 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
! RUN: bbc -emit-fir %s -o - | FileCheck %s | ||
|
||
! CHECK-DAG: func.func private @proc1() attributes {fir.bindc_name = "proc1"} | ||
module decl1 | ||
interface | ||
subroutine proc_iface() bind(C) | ||
end subroutine proc_iface | ||
end interface | ||
procedure (proc_iface) PrOc1 | ||
end module decl1 | ||
subroutine test1(x) | ||
use decl1 | ||
call PrOc1 | ||
end subroutine test1 | ||
|
||
! CHECK-DAG: func.func private @proc2() attributes {fir.bindc_name = "proc2"} | ||
module decl2 | ||
interface | ||
subroutine proc_iface() bind(C) | ||
end subroutine proc_iface | ||
end interface | ||
end module decl2 | ||
subroutine test2(x) | ||
use decl2 | ||
procedure (proc_iface) PrOc2 | ||
call PrOc2 | ||
end subroutine test2 | ||
|
||
! CHECK-DAG: func.func private @func3() -> f32 attributes {fir.bindc_name = "func3"} | ||
module decl3 | ||
interface | ||
real function func_iface() bind(C) | ||
end function func_iface | ||
end interface | ||
procedure (func_iface) FuNc3 | ||
end module decl3 | ||
subroutine test3(x) | ||
use decl3 | ||
real :: x | ||
x = FuNc3() | ||
end subroutine test3 | ||
|
||
! CHECK-DAG: func.func private @func4() -> f32 attributes {fir.bindc_name = "func4"} | ||
module decl4 | ||
interface | ||
real function func_iface() bind(C) | ||
end function func_iface | ||
end interface | ||
end module decl4 | ||
subroutine test4(x) | ||
use decl4 | ||
procedure (func_iface) FuNc4 | ||
real :: x | ||
x = FuNc4() | ||
end subroutine test4 | ||
|