Files
RedBear-OS/local/recipes/dev/libclc/source/flang/test/Semantics/resolve09.f90
T
vasilito cb424d7448 build: static patch-sanity linter (shift-left the malformed-patch class)
verify-patch-sanity.py validates every active recipe .patch has internally-
consistent hunk line counts — catching the 'malformed patch at line N' failure
at commit/CI/preflight time instead of hours into a cook. This cycle hit that
class three times (qtwaylandscanner, sddm, xwayland), each only discovered when
cookbook tried to apply the patch.

Running it across the repo found 29 latent malformed patches (validated against
GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22').
They were harmless only because they sit in vendored recipes (baked, not re-
applied) — but would fail on any version-bump re-derivation. --fix recounts the
hunk headers (body untouched) and repaired all 29.

Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test
(test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats
(empty placeholders, bare-@@ git hunks).
2026-08-01 05:13:02 +03:00

163 lines
3.1 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
integer :: y
procedure() :: a
procedure(real) :: b
call a ! OK - can be function or subroutine
!ERROR: Cannot call subroutine 'a' like a function
c = a()
!ERROR: Cannot call function 'b' like a subroutine
call b
!ERROR: Cannot call function 'y' like a subroutine
call y
call x
!ERROR: Cannot call subroutine 'x' like a function
z = x()
end
subroutine s
!ERROR: Cannot call function 'f' like a subroutine
call f
!ERROR: Cannot call subroutine 's' like a function
i = s()
contains
function f()
end
end
subroutine s2
! subroutine vs. function is determined by use
external :: a, b
call a()
!ERROR: Cannot call subroutine 'a' like a function
x = a()
x = b()
!ERROR: Cannot call function 'b' like a subroutine
call b()
end
subroutine s3
! subroutine vs. function is determined by use, even in internal subprograms
external :: a
procedure() :: b
contains
subroutine s3a()
x = a()
call b()
end
subroutine s3b()
!ERROR: Cannot call function 'a' like a subroutine
call a()
!ERROR: Cannot call subroutine 'b' like a function
x = b()
end
end
module m1
!Function vs subroutine in a module is resolved to a subroutine if
!no other information.
external :: exts, extf, extunk
procedure() :: procs, procf, procunk
contains
subroutine s
call exts()
call procs()
x = extf()
x = procf()
end
end
module m2
use m1
contains
subroutine test
call exts() ! ok
call procs() ! ok
call extunk() ! ok
call procunk() ! ok
x = extf() ! ok
x = procf() ! ok
!ERROR: Cannot call subroutine 'extunk' like a function
!ERROR: Function result characteristics are not known
x = extunk()
!ERROR: Cannot call subroutine 'procunk' like a function
!ERROR: Function result characteristics are not known
x = procunk()
end
end
module modulename
end
! Call to entity in global scope, even with IMPORT, NONE
subroutine s4
block
import, none
integer :: i
!ERROR: 'modulename' is not a callable procedure
call modulename()
end block
end
! Call to entity in global scope, even with IMPORT, NONE
subroutine s5
block
import, none
integer :: i
i = foo()
!ERROR: Cannot call function 'foo' like a subroutine
call foo()
end block
end
subroutine s6
call a6()
end
!ERROR: 'a6' was previously called as a subroutine
function a6()
a6 = 0.0
end
subroutine s7
x = a7()
end
!ERROR: 'a7' was previously called as a function
subroutine a7()
end
!OK: use of a8 and b8 is consistent
subroutine s8
call a8()
x = b8()
end
subroutine a8()
end
function b8()
b8 = 0.0
end
subroutine s9
type t
procedure(), nopass, pointer :: p1, p2
end type
type(t) x
print *, x%p1()
call x%p2
!ERROR: Cannot call function 'p1' like a subroutine
call x%p1
!ERROR: Cannot call subroutine 'p2' like a function
print *, x%p2()
end subroutine
subroutine s10
call a10
!ERROR: Actual argument for 'a=' may not be a procedure
print *, abs(a10)
end
subroutine s11
real, pointer :: p(:)
!ERROR: A NULL() pointer is not allowed for 'a=' intrinsic argument
print *, rank(null())
print *, rank(null(mold=p)) ! ok
end