xref: /llvm-project/flang/test/Semantics/bind-c12.f90 (revision e2a3880d7ffeefb433d686b0eda59a9e34d98e16)
1ab7930bdSPeter Klausler!RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic -Werror
2ab7930bdSPeter Klausler
3ab7930bdSPeter Klausler!PORTABILITY: An interoperable procedure should have an interface
4ab7930bdSPeter Klauslersubroutine subr1(e) bind(c)
580a54edcSPeter Klausler  external e
680a54edcSPeter Klauslerend
7ab7930bdSPeter Klausler
8ab7930bdSPeter Klauslersubroutine subr2(p) bind(c)
9ab7930bdSPeter Klausler  !PORTABILITY: An interoperable procedure should have an interface
10ab7930bdSPeter Klausler  procedure() :: p
11ab7930bdSPeter Klauslerend
12ab7930bdSPeter Klausler
13ab7930bdSPeter Klauslersubroutine subr3(p) bind(c)
14ab7930bdSPeter Klausler  !PORTABILITY: An interoperable procedure should have an interface
15ab7930bdSPeter Klausler  procedure(real) :: p
16ab7930bdSPeter Klauslerend
17ab7930bdSPeter Klausler
18ab7930bdSPeter Klauslersubroutine subr4(p) bind(c)
19ab7930bdSPeter Klausler  interface
20ab7930bdSPeter Klausler    !PORTABILITY: A dummy procedure of an interoperable procedure should be BIND(C)
21ab7930bdSPeter Klausler    subroutine p(n)
22ab7930bdSPeter Klausler      integer, intent(in) :: n
23ab7930bdSPeter Klausler    end
24ab7930bdSPeter Klausler  end interface
25ab7930bdSPeter Klauslerend
26ab7930bdSPeter Klausler
27ab7930bdSPeter Klauslersubroutine subr5(p) bind(c)
28ab7930bdSPeter Klausler  interface
29*e2a3880dSPeter Klausler    !WARNING: A dummy procedure of an interoperable procedure should be BIND(C)
30ab7930bdSPeter Klausler    subroutine p(c)
31ab7930bdSPeter Klausler      character(*), intent(in) :: c
32ab7930bdSPeter Klausler    end
33ab7930bdSPeter Klausler  end interface
34ab7930bdSPeter Klauslerend
35ab7930bdSPeter Klausler
36ab7930bdSPeter Klauslersubroutine subr6(p) bind(c)
37ab7930bdSPeter Klausler  interface
38ab7930bdSPeter Klausler    function p()
39ab7930bdSPeter Klausler      !ERROR: Interoperable function result must be scalar
40ab7930bdSPeter Klausler      real p(1)
41ab7930bdSPeter Klausler    end
42ab7930bdSPeter Klausler  end interface
43ab7930bdSPeter Klauslerend
44ab7930bdSPeter Klausler
45ab7930bdSPeter Klauslersubroutine subr7(p) bind(c)
46ab7930bdSPeter Klausler  interface
47ab7930bdSPeter Klausler    !ERROR: Interoperable character function result must have length one
48ab7930bdSPeter Klausler    character(*) function p()
49ab7930bdSPeter Klausler    end
50ab7930bdSPeter Klausler  end interface
51ab7930bdSPeter Klauslerend
52ab7930bdSPeter Klausler
53ab7930bdSPeter Klauslersubroutine subr8(p) bind(c)
54ab7930bdSPeter Klausler  interface
55*e2a3880dSPeter Klausler    !WARNING: A dummy procedure of an interoperable procedure should be BIND(C)
56ab7930bdSPeter Klausler    subroutine p(n)
57ab7930bdSPeter Klausler      integer, intent(in), value :: n
58ab7930bdSPeter Klausler    end
59ab7930bdSPeter Klausler  end interface
60ab7930bdSPeter Klauslerend
61ab7930bdSPeter Klausler
62ab7930bdSPeter Klauslersubroutine subr9(p) bind(c)
63ab7930bdSPeter Klausler  !ERROR: An interface name with the BIND attribute must appear if the BIND attribute appears in a procedure declaration
64ab7930bdSPeter Klausler  procedure(q), bind(c), pointer :: p
65ab7930bdSPeter Klausler  interface
66ab7930bdSPeter Klausler    function q()
67ab7930bdSPeter Klausler      real q(1)
68ab7930bdSPeter Klausler    end
69ab7930bdSPeter Klausler  end interface
70ab7930bdSPeter Klauslerend
71