| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! C721 A type-param-value of * shall be used only |
| ! * to declare a dummy argument, |
| ! * to declare a named constant, |
| ! * in the type-spec of an ALLOCATE statement wherein each allocate-object is |
| ! a dummy argument of type CHARACTER with an assumed character length, |
| ! * in the type-spec or derived-type-spec of a type guard statement (11.1.11), |
| ! or |
| ! * in an external function, to declare the character length parameter of the function result. |
| subroutine s(arg) |
| character(len=*), pointer :: arg |
| character*(*), parameter :: cvar1 = "abc" |
| character*4, cvar2 |
| character(len=4_4) :: cvar3 |
| !ERROR: An assumed (*) type parameter may be used only for a (non-statement function) dummy argument, associate name, named constant, or external function result |
| character(len=*) :: cvar4 |
| |
| type derived(param) |
| integer, len :: param |
| class(*), allocatable :: x |
| end type |
| type(derived(34)) :: a |
| interface |
| function fun() |
| character(len=4) :: fun |
| end function fun |
| end interface |
| |
| select type (ax => a%x) |
| type is (integer) |
| print *, "hello" |
| type is (character(len=*)) |
| print *, "hello" |
| class is (derived(param=*)) |
| print *, "hello" |
| class default |
| print *, "hello" |
| end select |
| |
| allocate (character(len=*) :: arg) |
| end subroutine s |