| ! { dg-do compile } |
| ! { dg-prune-output "compilation terminated." } |
| ! |
| ! FIRSTPRIVATE + class array |
| ! |
| ! For now: Expected to give "Sorry" for polymorphic arrays. |
| ! |
| ! Polymorphic arrays are tricky - at least if not allocatable, they become: |
| ! var.0 = var._data.data |
| ! which needs to be handled properly. |
| ! |
| ! |
| program select_type_openmp |
| !use omp_lib |
| implicit none |
| class(*), allocatable :: B(:) |
| |
| allocate(B, source=["abcdef","cdefi2"]) |
| allocate(B, source=[1,2,3]) |
| call sub(B) |
| contains |
| subroutine sub(val2) |
| class(*), allocatable :: val2(:) |
| |
| !$OMP PARALLEL firstprivate(val2) ! { dg-error "Sorry, polymorphic arrays not yet supported for firstprivate" } |
| if (.not.allocated(val2)) stop 3 |
| select type (val2) |
| type is (character(len=*)) |
| if (len(val2) /= 6) stop 44 |
| if (val2(1) /= "abcdef" .or. val2(2) /= "cdefi2") stop 4545 |
| val2 = ["123456", "789ABC"] |
| class default |
| stop 991 |
| end select |
| select type (val2) |
| type is (character(len=*)) |
| if (len(val2) /= 6) stop 44 |
| if (val2(1) /= "123456" .or. val2(2) /= "789ABC") stop 453 |
| class default |
| stop 991 |
| end select |
| !$OMP END PARALLEL |
| |
| if (.not.allocated(val2)) stop 3 |
| select type (val2) |
| type is (character(len=*)) |
| if (len(val2) /= 6) stop 44 |
| if (val2(1) /= "abcdef" .or. val2(2) /= "cdefi2") stop 456 |
| class default |
| stop 991 |
| end select |
| print *, "PASS!" |
| end subroutine |
| end program select_type_openmp |