| ! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic |
| ! |
| ! Error tests for structure constructors of derived types with allocatable components |
| |
| module m |
| type parent1 |
| integer, allocatable :: pa |
| end type parent1 |
| type parent2 |
| real, allocatable :: pa(:) |
| end type parent2 |
| type child |
| integer :: i |
| type(parent2) :: ca |
| end type |
| |
| contains |
| subroutine test1() |
| integer :: j |
| real :: arr(5) |
| integer, pointer :: ipp |
| real, pointer :: rpp(:) |
| !ERROR: Must be a constant value |
| type(parent1) :: tp1 = parent1(3) |
| !ERROR: Must be a constant value |
| type(parent1) :: tp2 = parent1(j) |
| type(parent1) :: tp3 = parent1(null()) |
| !PORTABILITY: NULL() with arguments is not standard conforming as the value for allocatable component 'pa' |
| type(parent1) :: tp4 = parent1(null(ipp)) |
| |
| !ERROR: Must be a constant value |
| type(parent2) :: tp5 = parent2([1.1,2.1,3.1]) |
| !ERROR: Must be a constant value |
| type(parent2) :: tp6 = parent2(arr) |
| type(parent2) :: tp7 = parent2(null()) |
| !PORTABILITY: NULL() with arguments is not standard conforming as the value for allocatable component 'pa' |
| type(parent2) :: tp8 = parent2(null(rpp)) |
| end subroutine test1 |
| |
| subroutine test2() |
| integer :: j |
| real :: arr(5) |
| integer, pointer :: ipp |
| real, pointer :: rpp(:) |
| type(parent1) :: tp1 |
| type(parent2) :: tp2 |
| tp1 = parent1(3) |
| tp1 = parent1(j) |
| tp1 = parent1(null()) |
| !PORTABILITY: NULL() with arguments is not standard conforming as the value for allocatable component 'pa' |
| tp1 = parent1(null(ipp)) |
| |
| tp2 = parent2([1.1,2.1,3.1]) |
| tp2 = parent2(arr) |
| tp2 = parent2(null()) |
| !PORTABILITY: NULL() with arguments is not standard conforming as the value for allocatable component 'pa' |
| tp2 = parent2(null(rpp)) |
| end subroutine test2 |
| |
| subroutine test3() |
| real, pointer :: pp(:) |
| type(child) :: tc1 = child(5, parent2(null())) |
| !PORTABILITY: NULL() with arguments is not standard conforming as the value for allocatable component 'pa' |
| type(child) :: tc10 = child(5, parent2(null(pp))) |
| !ERROR: Must be a constant value |
| type(child) :: tc3 = child(5, parent2([1.1,1.2])) |
| type(child) :: tc4 |
| |
| tc4 = child(5, parent2(null())) |
| tc4 = child(5, parent2([1.1,1.2])) |
| end subroutine test3 |
| end module m |