entry_13.f90

来自「用于进行gcc测试」· F90 代码 · 共 81 行

F90
81
字号
! { dg-do run }! Tests the fix for pr31214, in which the typespec for the entry would be lost,! thereby causing the function to be disallowed, since the function and entry! types did not match.!! Contributed by Joost VandeVondele <jv244@cam.ac.uk>!module type_mod  implicit none  type x     real x  end type x  type y     real x  end type y  type z     real x  end type z  interface assignment(=)     module procedure equals  end interface assignment(=)  interface operator(//)     module procedure a_op_b, b_op_a  end interface operator(//)  interface operator(==)     module procedure a_po_b, b_po_a  end interface operator(==)  contains     subroutine equals(x,y)        type(z), intent(in) :: y        type(z), intent(out) :: x        x%x = y%x     end subroutine equals     function a_op_b(a,b)        type(x), intent(in) :: a        type(y), intent(in) :: b        type(z) a_op_b        type(z) b_op_a        a_op_b%x = a%x + b%x        return     entry b_op_a(b,a)        b_op_a%x = a%x - b%x     end function a_op_b     function a_po_b(a,b)        type(x), intent(in) :: a        type(y), intent(in) :: b        type(z) a_po_b        type(z) b_po_a     entry b_po_a(b,a)        a_po_b%x = a%x/b%x     end function a_po_bend module type_modprogram test  use type_mod  implicit none  type(x) :: x1 = x(19.0_4)  type(y) :: y1 = y(7.0_4)  type(z) z1  z1 = x1//y1  if (z1%x .ne. 19.0_4 + 7.0_4) call abort ()  z1 = y1//x1  if (z1%x .ne. 19.0_4 - 7.0_4) call abort ()  z1 = x1==y1  if (z1%x .ne. 19.0_4/7.0_4) call abort ()  z1 = y1==x1  if (z1%x .ne. 19.0_4/7.0_4) call abort ()end program test! { dg-final { cleanup-modules "type_mod" } }

⌨️ 快捷键说明

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