1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
|
! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
implicit none
contains
subroutine foo(x)
real :: x
end subroutine
end module
!Note: PGI, Intel, GNU, and NAG allow this; Sun does not
module m2
use m1
implicit none
!WARNING: 'foo' should not be the name of both a generic interface and a procedure unless it is a specific procedure of the generic
interface foo
module procedure s
end interface
contains
subroutine s(i)
integer :: i
end subroutine
end module
subroutine foo
!ERROR: Cannot use-associate 'foo'; it is already declared in this scope
use m1
end
subroutine bar
!ERROR: Cannot use-associate 'bar'; it is already declared in this scope
use m1, bar => foo
end
!OK to use-associate a type with the same name as a generic
module m3a
type :: foo
end type
end
module m3b
use m3a
interface foo
end interface
end
! Can't have derived type and function with same name
module m4a
type :: foo
end type
contains
!ERROR: 'foo' is already declared in this scoping unit
function foo(x)
end
end
! Even if there is also a generic interface of that name
module m4b
type :: foo
end type
interface foo
procedure :: foo
end interface foo
contains
!ERROR: 'foo' is already declared in this scoping unit
function foo(x)
end
end
module m4c
type :: foo
end type
interface foo
!ERROR: 'foo' is already declared in this scoping unit
real function foo()
end function foo
end interface foo
end
! Use associating a name that is a generic and a derived type
module m5a
interface g
end interface
type g
end type
end module
module m5b
use m5a
interface g
procedure f
end interface
type(g) :: x
contains
function f(i)
end function
end module
subroutine s5
use m5b
type(g) :: y
end
module m6
real :: f6
interface g6
!ERROR: 'f6' is already declared in this scoping unit
real function f6()
end function f6
end interface g6
end module m6
module m7
integer :: f7
interface g7
!ERROR: 'f7' is already declared in this scoping unit
real function f7()
end function f7
end interface g7
end module m7
module m8
real :: f8
interface g8
!ERROR: 'f8' is already declared in this scoping unit
subroutine f8()
end subroutine f8
end interface g8
end module m8
module m9
type f9
end type f9
interface f9
real function f9()
end function f9
end interface f9
contains
!ERROR: 'f9' is already declared in this scoping unit
function f9(x)
end function f9
end module m9
module m10
type :: t10
end type t10
interface f10
function f10()
end function f10
end interface f10
contains
!ERROR: 'f10' is already declared in this scoping unit
function f10(x)
end function f10
end module m10
module m11
type :: t11
end type t11
interface i11
function f11()
end function f11
end interface i11
contains
!ERROR: 'f11' is already declared in this scoping unit
function f11(x)
end function f11
end module m11
module m12
interface f12
function f12()
end function f12
end interface f12
contains
!ERROR: 'f12' is already declared in this scoping unit
function f12(x)
end function f12
end module m12
module m13
interface f13
function f13()
end function f13
end interface f13
contains
!ERROR: 'f13' is already declared in this scoping unit
function f13()
end function f13
end module m13
! Not an error
module m14
interface gen1
module procedure s
end interface
generic :: gen2 => s
contains
subroutine s(x)
integer(1) :: x
end subroutine s
end module m14
module m15
use m14
interface gen1
module procedure gen1
end interface
generic :: gen2 => gen2
contains
subroutine gen1(x)
integer(2) :: x
end subroutine gen1
subroutine gen2(x)
integer(4) :: x
end subroutine gen2
end module m15
module m15a
interface foo
module procedure foo
end interface
contains
function foo()
end
end
module m15b
interface foo
module procedure foo
end interface
contains
function foo(x)
end
end
subroutine test15
use m15a
!ERROR: Cannot use-associate generic interface 'foo' with specific procedure of the same name when another such interface and procedure are in scope
use m15b
end
module m16a
type foo
integer j
end type
interface foo
module procedure bar
end interface
contains
function bar(j)
end
end
module m16b
type foo
integer j, k
end type
interface foo
module procedure bar
end interface
contains
function bar(x,y)
end
end
subroutine test16
use m16a
!ERROR: Generic interface 'foo' has ambiguous derived types from modules 'm16a' and 'm16b'
use m16b
end
subroutine test17
use m15a
!ERROR: Cannot use-associate generic interface 'foo' with derived type of the same name when another such interface and procedure are in scope
use m16a
end
subroutine test18
use m16a
!ERROR: Cannot use-associate generic interface 'foo' with specific procedure of the same name when another such interface and derived type are in scope
use m15a
end
|