| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! Test instantiation of components that are procedure pointers. |
| ! |
| program test |
| type dtype(kindParam) |
| integer, kind :: kindParam = 4 |
| !ERROR: KIND parameter value (66) of intrinsic type REAL did not resolve to a supported value |
| !ERROR: KIND parameter value (55) of intrinsic type REAL did not resolve to a supported value |
| procedure (real(kindParam)), pointer, nopass :: field => null() |
| end type |
| |
| type base(kindParam) |
| integer, kind :: kindParam = 4 |
| !ERROR: KIND parameter value (77) of intrinsic type REAL did not resolve to a supported value |
| procedure (real(kindParam)), pointer, nopass :: field => null() |
| end type |
| type dependentType(kindParam) |
| integer, kind :: kindParam = 4 |
| procedure (type(base(kindParam))), pointer, nopass :: field => null() |
| end type |
| |
| ! OK unless entities are declared with the default type |
| type badDefaultType(kindParam) |
| integer, kind :: kindParam = 99 |
| !ERROR: KIND parameter value (99) of intrinsic type REAL did not resolve to a supported value |
| !ERROR: KIND parameter value (44) of intrinsic type REAL did not resolve to a supported value |
| procedure (real(kindParam)), pointer, nopass :: field => null() |
| end type |
| |
| type parent(kindParam) |
| integer, kind :: kindParam = 4 |
| !ERROR: KIND parameter value (33) of intrinsic type REAL did not resolve to a supported value |
| !ERROR: KIND parameter value (88) of intrinsic type REAL did not resolve to a supported value |
| procedure (real(kindParam)), pointer, nopass :: parentField => null() |
| end type |
| type, extends(parent) :: child |
| integer :: field |
| end type child |
| contains |
| subroutine testGoodDefault(arg) |
| type(dtype) :: arg |
| if (associated(arg%field)) stop 'fail' |
| end subroutine testGoodDefault |
| |
| subroutine testStar(arg) |
| type(dtype(*)),intent(inout) :: arg |
| if (associated(arg%field)) stop 'fail' |
| end subroutine testStar |
| |
| subroutine testBadDeclaration(arg) |
| type(dtype(66)) :: arg |
| if (associated(arg%field)) stop 'fail' |
| end subroutine testBadDeclaration |
| |
| subroutine testBadLocalDeclaration() |
| type(dtype(55)) :: local |
| if (associated(local%field)) stop 'fail' |
| end subroutine testBadLocalDeclaration |
| |
| subroutine testDependent() |
| type(dependentType(77)) :: local |
| end subroutine testDependent |
| |
| subroutine testBadDefault() |
| type(badDefaultType) :: local |
| end subroutine testBadDefault |
| |
| subroutine testBadDefaultWithBadDeclaration() |
| type(badDefaultType(44)) :: local |
| end subroutine testBadDefaultWithBadDeclaration |
| |
| subroutine testBadDefaultWithGoodDeclaration() |
| type(badDefaultType(4)) :: local |
| end subroutine testBadDefaultWithGoodDeclaration |
| |
| subroutine testExtended() |
| type(child(33)) :: local1 |
| type(child(4)) :: local2 |
| type(parent(88)) :: local3 |
| type(parent(8)) :: local4 |
| end subroutine testExtended |
| end program test |