xref: /llvm-project/flang/test/Semantics/resolve91.f90 (revision 8bcb1cededa410016f9a00bebbce09b54e5c9f88)
1! RUN: %python %S/test_errors.py %s %flang_fc1
2! Tests for duplicate definitions and initializations, mostly of procedures
3module m
4  procedure(real), pointer :: p
5  !ERROR: EXTERNAL attribute was already specified on 'p'
6  !ERROR: POINTER attribute was already specified on 'p'
7  !ERROR: The type of 'p' has already been declared
8  procedure(integer), pointer :: p
9end
10
11module m1
12    real, dimension(:), pointer :: realArray => null()
13    !ERROR: POINTER attribute was already specified on 'realarray'
14    !ERROR: The type of 'realarray' has already been declared
15    real, dimension(:), pointer :: realArray => localArray
16end module m1
17
18module m2
19  interface
20    subroutine sub()
21    end subroutine sub
22  end interface
23
24  procedure(sub), pointer :: p1 => null()
25  !ERROR: EXTERNAL attribute was already specified on 'p1'
26  !ERROR: POINTER attribute was already specified on 'p1'
27  !ERROR: The interface for procedure 'p1' has already been declared
28  procedure(sub), pointer :: p1 => null()
29
30end module m2
31
32module m3
33  interface
34    real function fun()
35    end function fun
36  end interface
37
38  procedure(fun), pointer :: f1 => null()
39  !ERROR: EXTERNAL attribute was already specified on 'f1'
40  !ERROR: POINTER attribute was already specified on 'f1'
41  !ERROR: The interface for procedure 'f1' has already been declared
42  procedure(fun), pointer :: f1 => null()
43
44end module m3
45
46module m4
47  real, dimension(:), pointer :: localArray => null()
48  type :: t2
49    real, dimension(:), pointer :: realArray => null()
50    !ERROR: Component 'realarray' is already declared in this derived type
51    real, dimension(:), pointer :: realArray => localArray
52  end type
53end module m4
54
55module m5
56  !ERROR: Actual argument for 'string=' has bad type 'REAL(4)'
57  character(len=len(a)) :: b
58  !ERROR: The type of 'a' has already been implicitly declared
59  character(len=len(b)) :: a
60end module m5
61
62module m6
63  integer, dimension(3) :: iarray
64  !ERROR: Derived type 'ubound' not found
65  character(len=ubound(iarray)(1)) :: first
66end module m6
67
68module m7
69  integer, dimension(2) :: iarray
70  !ERROR: Derived type 'ubound' not found
71  integer :: ivar = ubound(iarray)(1)
72end module m7
73
74module m8
75  integer :: iVar = 3
76  !ERROR: The type of 'ivar' has already been declared
77  integer :: iVar = 4
78  integer, target :: jVar = 5
79  integer, target :: kVar = 5
80  integer, pointer :: pVar => jVar
81  !ERROR: POINTER attribute was already specified on 'pvar'
82  !ERROR: The type of 'pvar' has already been declared
83  integer, pointer :: pVar => kVar
84end module m8
85
86module m9
87  integer :: p, q
88  procedure() p ! ok
89  !ERROR: The type of 'q' has already been declared
90  procedure(real) q
91end module m9
92