1! { dg-do compile }
2! { dg-options "-std=legacy" }
3! Tests the patch for PRs 25084, 20852, 25085 and 25086, all of
4! which involve assumed character length functions.
5! Compiled from original PR testcases, which were all contributed
6! by Joost VandeVondele  <jv244@cam.ac.uk>
7!
8! PR25084 - the error is not here but in any use of .IN.
9! It is OK to define an assumed character length function
10! in an interface but it cannot be invoked (5.1.1.5).
11
12MODULE M1
13 TYPE  SET
14  INTEGER  CARD
15 END  TYPE  SET
16END MODULE M1
17
18MODULE  INTEGER_SETS
19 INTERFACE  OPERATOR  (.IN.)
20  FUNCTION ELEMENT(X,A) ! { dg-error "cannot be assumed character length" }
21     USE M1
22     CHARACTER(LEN=*)      :: ELEMENT
23     INTEGER, INTENT(IN)   ::  X
24     TYPE(SET), INTENT(IN) ::   A
25  END FUNCTION ELEMENT
26 END  INTERFACE
27END MODULE
28
29! 5.1.1.5 of the Standard: A function name declared with an asterisk
30! char-len-param shall not be array-valued, pointer-valued, recursive
31! or pure
32!
33! PR20852
34RECURSIVE FUNCTION TEST() ! { dg-error "cannot be recursive" }
35 CHARACTER(LEN=*) :: TEST
36 TEST = ""
37END FUNCTION
38
39!PR25085
40FUNCTION F1()             ! { dg-error "cannot be array-valued" }
41  CHARACTER(LEN=*), DIMENSION(10) :: F1
42  F1 = ""
43END FUNCTION F1
44
45!PR25086
46FUNCTION F2() result(f4)  ! { dg-error "cannot be pointer-valued" }
47  CHARACTER(LEN=*), POINTER  :: f4
48  f4 = ""
49END FUNCTION F2
50
51!PR?????
52pure FUNCTION F3()        ! { dg-error "cannot be pure" }
53  CHARACTER(LEN=*)  :: F3
54  F3 = ""
55END FUNCTION F3
56
57function not_OK (ch)
58  character(*) not_OK, ch ! OK in an external function
59  not_OK = ch
60end function not_OK
61
62  use m1
63
64  character(4) :: answer
65  character(*), external :: not_OK
66  integer :: i
67  type (set) :: z
68
69  interface
70    function ext (i)
71      character(*) :: ext
72      integer :: i
73    end function ext
74  end interface
75
76  answer = not_OK ("unOK") ! { dg-error "since it is not a dummy" }
77
78END
79
80