• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1! RUN: %S/test_errors.sh %s %t %f18
2! C721 A type-param-value of * shall be used only
3! * to declare a dummy argument,
4! * to declare a named constant,
5! * in the type-spec of an ALLOCATE statement wherein each allocate-object is
6!   a dummy argument of type CHARACTER with an assumed character length,
7! * in the type-spec or derived-type-spec of a type guard statement (11.1.11),
8!   or
9! * in an external function, to declare the character length parameter of the function result.
10subroutine s(arg)
11  character(len=*), pointer :: arg
12  character*(*), parameter  :: cvar1 = "abc"
13  character*4,  cvar2
14  character(len=4_4) :: cvar3
15  !ERROR: An assumed (*) type parameter may be used only for a (non-statement function) dummy argument, associate name, named constant, or external function result
16  character(len=*) :: cvar4
17
18  type derived(param)
19    integer, len :: param
20    class(*), allocatable :: x
21  end type
22  type(derived(34)) :: a
23  interface
24    function fun()
25      character(len=4) :: fun
26    end function fun
27  end interface
28
29  select type (ax => a%x)
30    type is (integer)
31      print *, "hello"
32    type is (character(len=*))
33      print *, "hello"
34    class is (derived(param=*))
35      print *, "hello"
36    class default
37      print *, "hello"
38  end select
39
40  allocate (character(len=*) :: arg)
41end subroutine s
42