Merge from mainline
[official-gcc.git] / gcc / testsuite / gfortran.dg / assumed_charlen_function_1.f90
blobc90617dcec065f2aad749e8f11b079c62829c73d
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>
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).
12 MODULE M1
13 TYPE SET
14 INTEGER CARD
15 END TYPE SET
16 END MODULE M1
18 MODULE INTEGER_SETS
19 INTERFACE OPERATOR (.IN.)
20 FUNCTION ELEMENT(X,A)
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
27 END MODULE
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
33 ! PR20852
34 RECURSIVE FUNCTION TEST() ! { dg-error "cannot be recursive" }
35 CHARACTER(LEN=*) :: TEST
36 TEST = ""
37 END FUNCTION
39 !PR25085
40 FUNCTION F1() ! { dg-error "cannot be array-valued" }
41 CHARACTER(LEN=*), DIMENSION(10) :: F1
42 F1 = ""
43 END FUNCTION F1
45 !PR25086
46 FUNCTION F2() result(f4) ! { dg-error "cannot be pointer-valued" }
47 CHARACTER(LEN=*), POINTER :: f4
48 f4 = ""
49 END FUNCTION F2
51 !PR?????
52 pure FUNCTION F3() ! { dg-error "cannot be pure" }
53 CHARACTER(LEN=*) :: F3
54 F3 = ""
55 END FUNCTION F3
57 function not_OK (ch)
58 character(*) not_OK, ch ! OK in an external function
59 not_OK = ch
60 end function not_OK
62 use INTEGER_SETS
63 use m1
65 character(4) :: answer
66 character(*), external :: not_OK
67 integer :: i
68 type (set) :: z
70 interface
71 function ext (i)
72 character(*) :: ext
73 integer :: i
74 end function ext
75 end interface
77 answer = i.IN.z ! { dg-error "cannot be used|Operands of user operator" }
78 answer = ext (2) ! { dg-error "but cannot be used" }
80 answer = not_OK ("unOK") ! { dg-error "since it is not a dummy" }
82 END