| ! { dg-do run } |
| ! |
| ! PR 47455: [4.6 Regression][OOP] internal compiler error: in fold_convert_loc, at fold-const.c:2028 |
| ! |
| ! Contributed by Thomas Henlich <thenlich@users.sourceforge.net> |
| |
| module class_t |
| type :: tx |
| integer :: i |
| end type |
| type :: t |
| type(tx) :: x |
| procedure(find_x), pointer :: ppc |
| contains |
| procedure :: find_x |
| end type |
| type(tx), target :: zero = tx(0) |
| contains |
| function find_x(this) |
| class(t), intent(in) :: this |
| type(tx), pointer :: find_x |
| find_x => zero |
| end function find_x |
| end module |
| |
| program test |
| use class_t |
| class(t),allocatable :: this |
| procedure(find_x), pointer :: pp |
| allocate(this) |
| ! (1) ordinary function call |
| zero = tx(1) |
| this%x = find_x(this) |
| if (this%x%i /= 1) STOP 1 |
| ! (2) procedure pointer |
| zero = tx(2) |
| pp => find_x |
| this%x = pp(this) |
| if (this%x%i /= 2) STOP 2 |
| ! (3) PPC |
| zero = tx(3) |
| this%ppc => find_x |
| this%x = this%ppc() |
| if (this%x%i /= 3) STOP 3 |
| ! (4) TBP |
| zero = tx(4) |
| this%x = this%find_x() |
| if (this%x%i /= 4) STOP 4 |
| end |