Files
RedBear-OS/local/recipes/dev/libclc/source/flang/test/Semantics/modfile03.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

274 lines
3.7 KiB
Fortran

! RUN: %python %S/test_modfile.py %s %flang_fc1
! Check modfile generation with use-association.
module m1
integer :: x1
integer, private :: x2
end
!Expect: m1.mod
!module m1
!integer(4)::x1
!integer(4),private::x2
!end
module m2
use m1
integer :: y1
end
!Expect: m2.mod
!module m2
!use m1,only:x1
!integer(4)::y1
!end
module m3
use m2, z1 => x1
end
!Expect: m3.mod
!module m3
!use m2,only:y1
!use m2,only:z1=>x1
!end
module m4
use m1
use m2
end
!Expect: m4.mod
!module m4
!use m1,only:x1
!use m2,only:y1
!end
module m5a
integer, parameter :: k1 = 4
integer :: l1 = 2
type t1
real :: a
end type
contains
pure integer function f1(i)
value :: i
f1 = i
end
end
!Expect: m5a.mod
!module m5a
! integer(4),parameter::k1=4_4
! integer(4)::l1
! type::t1
! real(4)::a
! end type
!contains
! pure function f1(i)
! integer(4),value::i
! integer(4)::f1
! end
!end
module m5b
use m5a, only: k2 => k1, l2 => l1, f2 => f1
interface
subroutine s(x, y)
import f2, l2
character(l2, k2) :: x
character(f2(l2)) :: y
end subroutine
end interface
end
!Expect: m5b.mod
!module m5b
! use m5a,only:k2=>k1
! use m5a,only:l2=>l1
! use m5a,only:f2=>f1
! interface
! subroutine s(x,y)
! import::f2
! import::l2
! character(l2,4)::x
! character(f2(l2),1)::y
! end
! end interface
!end
module m6a
type t1
end type
end
!Expect: m6a.mod
!module m6a
! type::t1
! end type
!end
module m6b
use m6a, only: t2 => t1
contains
subroutine s(x)
type(t2) :: x
end
end
!Expect: m6b.mod
!module m6b
! use m6a,only:t2=>t1
!contains
! subroutine s(x)
! type(t2)::x
! end
!end
module m6c
use m6a, only: t2 => t1
type, extends(t2) :: t
end type
end
!Expect: m6c.mod
!module m6c
! use m6a,only:t2=>t1
! type,extends(t2)::t
! end type
!end
module m6d
use m6a, only: t2 => t1
type(t2), parameter :: p = t2()
end
!Expect: m6d.mod
!module m6d
! use m6a,only:t2=>t1
! type(t2),parameter::p=t2()
!end
module m6e
use m6a, only: t2 => t1
interface
subroutine s(x)
import t2
type(t2) :: x
end subroutine
end interface
end
!Expect: m6e.mod
!module m6e
! use m6a,only:t2=>t1
! interface
! subroutine s(x)
! import::t2
! type(t2)::x
! end
! end interface
!end
module m7a
real :: x
end
!Expect: m7a.mod
!module m7a
! real(4)::x
!end
module m7b
use m7a
private
end
!Expect: m7b.mod
!module m7b
! use m7a,only:x
! private::x
!end
module m8a
private foo
type t
contains
procedure, nopass :: foo
end type
contains
pure integer function foo(n)
integer, intent(in) :: n
foo = n
end
end
!Expect: m8a.mod
!module m8a
!type::t
!contains
!procedure,nopass::foo
!end type
!private::foo
!contains
!pure function foo(n)
!integer(4),intent(in)::n
!integer(4)::foo
!end
!end
module m8b
use m8a
contains
subroutine foo(x,a)
type(t), intent(in) :: x
real a(x%foo(10))
end
end
!Expect: m8b.mod
!module m8b
!use m8a,only:m8a$foo=>foo
!use m8a,only:t
!private::m8a$foo
!contains
!subroutine foo(x,a)
!type(t),intent(in)::x
!real(4)::a(1_8:int(m8a$foo(10_4),kind=8))
!end
!end
module m9a
private
public t
type t
integer n
contains
procedure f
end type
contains
pure integer function f(x, k)
class(t), intent(in) :: x
integer, intent(in) :: k
f = x%n + k
end
end
!Expect: m9a.mod
!module m9a
!type::t
!integer(4)::n
!contains
!procedure::f
!end type
!private::f
!contains
!pure function f(x,k)
!class(t),intent(in)::x
!integer(4),intent(in)::k
!integer(4)::f
!end
!end
module m9b
use m9a
contains
subroutine s(x, y)
class(t), intent(in) :: x
real y(x%f(x%n))
end
end
!Expect: m9b.mod
!module m9b
!use m9a,only:t
!contains
!subroutine s(x,y)
!class(t),intent(in)::x
!real(4)::y(1_8:int(x%f(x%n),kind=8))
!end
!end