| ! { dg-do run } |
| ! { dg-options "-finit-derived -finit-integer=1" } |
| ! |
| ! Make sure -finit-derived works on class variables. |
| ! Based on class_result_1.f03 |
| ! |
| |
| module points_2i |
| |
| implicit none |
| |
| type point2i |
| integer :: x, y |
| end type |
| |
| contains |
| |
| subroutine print( point ) |
| class(point2i) :: point |
| write(*,'(2i4)') point%x, point%y |
| end subroutine |
| |
| subroutine set_vector( point, rx, ry ) |
| class(point2i) :: point |
| integer :: rx, ry |
| point%x = rx |
| point%y = ry |
| end subroutine |
| |
| function add_vector( point, vector ) |
| class(point2i), intent(in) :: point, vector |
| class(point2i), allocatable :: add_vector |
| allocate( add_vector ) |
| add_vector%x = point%x + vector%x |
| add_vector%y = point%y + vector%y |
| end function |
| |
| end module |
| |
| |
| program init_flag_15 |
| |
| use points_2i |
| implicit none |
| |
| type(point2i), target :: point_2i, vector_2i |
| class(point2i), pointer :: point, vector |
| type(point2i) :: vsum |
| integer :: i |
| |
| point => point_2i ! = (1, 1) due to -finit-integer |
| vector => vector_2i |
| call set_vector(vector, 2, 2) |
| vsum = add_vector(point, vector) |
| |
| call print(point) |
| call print(vector) |
| call print(vsum) |
| |
| if (vsum%x .ne. 3 .or. vsum%y .ne. 3) then |
| STOP 1 |
| endif |
| |
| end program |