1 ! RUN: %python %S/test_errors.py %s %flang_fc1
2 ! Test restrictions on what subprograms can be used for defined operators.
7 !ERROR: OPERATOR(+) procedure 'add1' must be a function
8 subroutine add1(x
, y
, z
)
10 real, intent(in
) :: y
, z
18 logical, intent(in
) :: x
20 real function sub2(x
, y
)
21 logical, intent(in
) :: x
, y
23 !ERROR: OPERATOR(-) function 'sub3' must have one or two dummy arguments
24 real function sub3(x
, y
, z
)
25 real, intent(in
) :: x
, y
, z
28 interface operator(.not
.)
29 !ERROR: OPERATOR(.NOT.) function 'not1' must have one dummy argument
30 real function not1(x
, y
)
31 real, intent(in
) :: x
, y
38 !ERROR: A function interface may not declare an assumed-length CHARACTER(*) result
39 character(*) function divide(x
, y
)
40 character(*), intent(in
) :: x
, y
44 !WARNING: In OPERATOR(<) function 'lt1', dummy argument 'x' should have INTENT(IN) or VALUE attribute
45 !ERROR: In OPERATOR(<) function 'lt1', dummy argument 'y' may not be OPTIONAL
46 logical function lt1(x
, y
)
48 real, value
, optional
:: y
50 !ERROR: In OPERATOR(<) function 'lt2', dummy argument 'x' may not be INTENT(OUT)
51 !ERROR: In OPERATOR(<) function 'lt2', dummy argument 'y' must be a data object
52 logical function lt2(x
, y
)
53 logical, intent(out
) :: x
62 subroutine s(alcf1
, alcf2
)
64 character(*) function alcf1(x
, y
)
65 character(*), intent(in
) :: x
, y
67 character(*) function alcf2(x
, y
)
68 character(*), intent(in
) :: x
, y
72 !ERROR: OPERATOR(+) function 'alcf1' may not have assumed-length CHARACTER(*) result
75 !ERROR: OPERATOR(-) function 'alcf2' may not have assumed-length CHARACTER(*) result
76 generic
:: operator(-) => alcf2
82 !ERROR: OPERATOR(+) function 'add' conflicts with intrinsic operator
83 complex function add(x
, y
)
87 !ERROR: OPERATOR(+) function 'plus' conflicts with intrinsic operator
89 complex, intent(in
) :: x
92 interface operator(.not
.)
93 !WARNING: The external interface 'not1' is not compatible with an earlier definition (distinct numbers of dummy arguments)
97 !ERROR: OPERATOR(.NOT.) function 'not2' conflicts with intrinsic operator
98 logical(8) function not2(x
)
99 logical(8), value
:: x
102 interface operator(.and
.)
103 !ERROR: OPERATOR(.AND.) function 'and' conflicts with intrinsic operator
104 real function and(x
, y
)
105 logical(1), value
:: x
106 logical(8), value
:: y
109 interface operator(//)
110 real function concat1(x
, y
)
113 real function concat2(x
, y
)
114 character(kind
=1, len
=4), intent(in
) :: x
115 character(kind
=4, len
=4), intent(in
) :: y
117 !ERROR: OPERATOR(//) function 'concat3' conflicts with intrinsic operator
118 real function concat3(x
, y
)
119 character(kind
=4, len
=4), intent(in
) :: x
120 character(kind
=4, len
=4), intent(in
) :: y