| ! { dg-do run } |
| ! { dg-options "-fcheck=bounds" } |
| ! { dg-shouldfail "Array bounds mismatch" } |
| ! |
| ! Test that pr72832 is fixed now. |
| ! Contributed by Daan van Vugt |
| |
| program allocate_source |
| type :: t |
| integer :: i |
| end type t |
| type, extends(t) :: tt |
| end type tt |
| |
| call test_type() |
| call test_class_correct() |
| call test_class_fail() |
| |
| contains |
| |
| subroutine test_class_correct() |
| class(t), allocatable, dimension(:) :: a, b |
| allocate(tt::a(1:2)) |
| a(:)%i = [ 1,2 ] |
| if (size(a) /= 2) STOP 1 |
| if (any(a(:)%i /= [ 1,2])) STOP 2 |
| |
| allocate(b(1:4), source=a(1)) |
| if (size(b) /= 4) STOP 3 |
| if (any(b(:)%i /= [ 1,1,1,1])) STOP 4 |
| select type (b1 => b(1)) |
| class is (tt) |
| continue |
| class default |
| STOP 5 |
| end select |
| end subroutine |
| |
| subroutine test_class_fail() |
| class(t), allocatable, dimension(:) :: a, b |
| allocate(tt::a(1:2)) |
| a(:)%i = [ 1,2 ] |
| if (size(a) /= 2) STOP 6 |
| if (any(a(:)%i /= [ 1,2])) STOP 7 |
| |
| allocate(b(1:4), source=a) ! Fail expected: sizes do not conform |
| if (size(b) /= 4) STOP 8 |
| if (any(b(1:2)%i /= [ 1,2])) STOP 9 |
| select type (b1 => b(1)) |
| class is (tt) |
| continue |
| class default |
| STOP 10 |
| end select |
| end subroutine |
| |
| subroutine test_type() |
| type(t), allocatable, dimension(:) :: a, b |
| allocate(a(1:2)) |
| if (size(a) /= 2) STOP 11 |
| |
| allocate(b(1:4), source=a) |
| if (size(b) /= 4) STOP 12 |
| end subroutine |
| end program allocate_source |
| |
| |