bind_c_usage_13.f03

来自「用于进行gcc测试」· F03 代码 · 共 152 行

F03
152
字号
! { dg-do compile }! { dg-options "-fdump-tree-original" }!! PR fortran/34079! Character bind(c) arguments shall not pass the length as additional argument!subroutine multiArgTest()  implicit noneinterface ! Array  subroutine multiso_array(x,y) bind(c)    use iso_c_binding    character(kind=c_char,len=1), dimension(*) :: x,y  end subroutine multiso_array  subroutine multiso2_array(x,y) bind(c) ! { dg-warning "may not be C interoperable" }    character(len=1), dimension(*) :: x,y  end subroutine multiso2_array  subroutine mult_array(x,y)    use iso_c_binding    character(kind=c_char,len=1), dimension(*) :: x,y  end subroutine mult_arrayend interfaceinterface ! Scalar: call by reference  subroutine multiso(x,y) bind(c)    use iso_c_binding    character(kind=c_char,len=1) :: x,y  end subroutine multiso  subroutine multiso2(x,y) bind(c) ! { dg-warning "may not be C interoperable" }    character(len=1) :: x,y  end subroutine multiso2  subroutine mult(x,y)    use iso_c_binding    character(kind=c_char,len=1) :: x,y  end subroutine multend interfaceinterface ! Scalar: call by VALUE  subroutine multiso_val(x,y) bind(c)    use iso_c_binding    character(kind=c_char,len=1), value :: x,y  end subroutine multiso_val  subroutine multiso2_val(x,y) bind(c) ! { dg-warning "may not be C interoperable" }    character(len=1), value :: x,y  end subroutine multiso2_val  subroutine mult_val(x,y)    use iso_c_binding    character(kind=c_char,len=1), value :: x,y  end subroutine mult_valend interfacecall mult_array    ("abc","ab")call multiso_array ("ABCDEF","ab")call multiso2_array("AbCdEfGhIj","ab")call mult    ("u","x")call multiso ("v","x")call multiso2("w","x")call mult_val    ("x","x")call multiso_val ("y","x")call multiso2_val("z","x")end subroutine multiArgTestprogram testimplicit noneinterface ! Array  subroutine subiso_array(x) bind(c)    use iso_c_binding    character(kind=c_char,len=1), dimension(*) :: x  end subroutine subiso_array  subroutine subiso2_array(x) bind(c) ! { dg-warning "may not be C interoperable" }    character(len=1), dimension(*) :: x  end subroutine subiso2_array  subroutine sub_array(x)    use iso_c_binding    character(kind=c_char,len=1), dimension(*) :: x  end subroutine sub_arrayend interfaceinterface ! Scalar: call by reference  subroutine subiso(x) bind(c)    use iso_c_binding    character(kind=c_char,len=1) :: x  end subroutine subiso  subroutine subiso2(x) bind(c) ! { dg-warning "may not be C interoperable" }    character(len=1) :: x  end subroutine subiso2  subroutine sub(x)    use iso_c_binding    character(kind=c_char,len=1) :: x  end subroutine subend interfaceinterface ! Scalar: call by VALUE  subroutine subiso_val(x) bind(c)    use iso_c_binding    character(kind=c_char,len=1), value :: x  end subroutine subiso_val  subroutine subiso2_val(x) bind(c) ! { dg-warning "may not be C interoperable" }    character(len=1), value :: x  end subroutine subiso2_val  subroutine sub_val(x)    use iso_c_binding    character(kind=c_char,len=1), value :: x  end subroutine sub_valend interfacecall sub_array    ("abc")call subiso_array ("ABCDEF")call subiso2_array("AbCdEfGhIj")call sub    ("u")call subiso ("v")call subiso2("w")call sub_val    ("x")call subiso_val ("y")call subiso2_val("z")end program test! Double argument dump:!! { dg-final { scan-tree-dump "mult_array .&.abc..1..lb: 1 sz: 1., &.ab..1..lb: 1 sz: 1., 3, 2.;" "original" } }! { dg-final { scan-tree-dump "multiso_array .&.ABCDEF..1..lb: 1 sz: 1., &.ab..1..lb: 1 sz: 1..;" "original" } }! { dg-final { scan-tree-dump "multiso2_array .&.AbCdEfGhIj..1..lb: 1 sz: 1., &.ab..1..lb: 1 sz: 1..;" "original" } }!! { dg-final { scan-tree-dump "mult .&.u..1..lb: 1 sz: 1., &.x..1..lb: 1 sz: 1., 1, 1.;" "original" } }! { dg-final { scan-tree-dump "multiso .&.v..1..lb: 1 sz: 1., &.x..1..lb: 1 sz: 1..;" "original" } }! { dg-final { scan-tree-dump "multiso2 .&.w..1..lb: 1 sz: 1., &.x..1..lb: 1 sz: 1..;" "original" } }!! { dg-final { scan-tree-dump "mult_val ..x., .x., 1, 1.;" "original" } }! { dg-final { scan-tree-dump "multiso_val .121, 120.;" "original" } }! { dg-final { scan-tree-dump "multiso2_val ..z., .x..;" "original" } }!! Single argument dump:!! { dg-final { scan-tree-dump "sub_array .&.abc..1..lb: 1 sz: 1., 3.;" "original" } }! { dg-final { scan-tree-dump "subiso_array .&.ABCDEF..1..lb: 1 sz: 1..;" "original" } }! { dg-final { scan-tree-dump "subiso2_array .&.AbCdEfGhIj..1..lb: 1 sz: 1..;" "original" } }!! { dg-final { scan-tree-dump "sub .&.u..1..lb: 1 sz: 1., 1.;" "original" } }! { dg-final { scan-tree-dump "subiso .&.v..1..lb: 1 sz: 1..;" "original" } }! { dg-final { scan-tree-dump "subiso2 .&.w..1..lb: 1 sz: 1..;" "original" } }!! { dg-final { scan-tree-dump "sub_val ..x., 1.;" "original" } }! { dg-final { scan-tree-dump "subiso_val .121.;" "original" } }! { dg-final { scan-tree-dump "subiso2_val ..z..;" "original" } }!! { dg-final { cleanup-tree-dump "original" } }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?