| ! { dg-do compile } |
| ! PR fortran/96556 - this used to cause an ICE. |
| ! Test case by Juergen Reuter. |
| module polarizations |
| |
| implicit none |
| private |
| |
| type :: smatrix_t |
| private |
| integer :: dim = 0 |
| integer :: n_entry = 0 |
| integer, dimension(:,:), allocatable :: index |
| contains |
| procedure :: write => smatrix_write |
| end type smatrix_t |
| |
| type, extends (smatrix_t) :: pmatrix_t |
| private |
| contains |
| procedure :: write => pmatrix_write |
| procedure :: normalize => pmatrix_normalize |
| end type pmatrix_t |
| |
| contains |
| |
| subroutine msg_error (string) |
| character(len=*), intent(in), optional :: string |
| end subroutine msg_error |
| |
| subroutine smatrix_write (object) |
| class(smatrix_t), intent(in) :: object |
| end subroutine smatrix_write |
| |
| subroutine pmatrix_write (object) |
| class(pmatrix_t), intent(in) :: object |
| call object%smatrix_t%write () |
| end subroutine pmatrix_write |
| |
| subroutine pmatrix_normalize (pmatrix) |
| class(pmatrix_t), intent(inout) :: pmatrix |
| integer :: i, hmax |
| logical :: fermion, ok |
| do i = 1, pmatrix%n_entry |
| associate (index => pmatrix%index(:,i)) |
| if (index(1) == index(2)) then |
| call error ("diagonal must be real") |
| end if |
| end associate |
| end do |
| contains |
| subroutine error (msg) |
| character(*), intent(in) :: msg |
| call pmatrix%write () |
| end subroutine error |
| end subroutine pmatrix_normalize |
| |
| end module polarizations |