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

91 lines
3.2 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
! C737 If EXTENDS appears and the type being defined has a potential
! subobject component of type EVENT_TYPE or LOCK_TYPE from the intrinsic
! module ISO_FORTRAN_ENV, its parent type shall be EVENT_TYPE or LOCK_TYPE
! or have a potential subobject component of type EVENT_TYPE or LOCK_TYPE.
module not_iso_fortran_env
type event_type
end type
type lock_type
end type
end module
subroutine C737_a()
use iso_fortran_env
type lockGrandParentType
type(lock_type) :: grandParentField
end type lockGrandParentType
type, extends(lockGrandParentType) :: lockParentType
real :: parentField
end type lockParentType
type eventParentType
type(event_type) :: parentField
end type eventParentType
type noLockParentType
end type noLockParentType
type, extends(lockParentType) :: goodChildType1
type(lock_type) :: childField
end type goodChildType1
type, extends(lockParentType) :: goodChildType2
type(event_type) :: childField
end type goodChildType2
type, extends(lock_type) :: goodChildType3
type(event_type) :: childField
end type goodChildType3
type, extends(event_type) :: goodChildType4
type(lock_type) :: childField
end type goodChildType4
!ERROR: Type 'badchildtype1' has an EVENT_TYPE or LOCK_TYPE component, so the type at the base of its type extension chain ('nolockparenttype') must either have an EVENT_TYPE or LOCK_TYPE component, or be EVENT_TYPE or LOCK_TYPE
type, extends(noLockParentType) :: badChildType1
type(lock_type) :: childField
end type badChildType1
!ERROR: Type 'badchildtype2' has an EVENT_TYPE or LOCK_TYPE component, so the type at the base of its type extension chain ('nolockparenttype') must either have an EVENT_TYPE or LOCK_TYPE component, or be EVENT_TYPE or LOCK_TYPE
type, extends(noLockParentType) :: badChildType2
type(event_type) :: childField
end type badChildType2
!ERROR: Type 'badchildtype3' has an EVENT_TYPE or LOCK_TYPE component, so the type at the base of its type extension chain ('nolockparenttype') must either have an EVENT_TYPE or LOCK_TYPE component, or be EVENT_TYPE or LOCK_TYPE
type, extends(noLockParentType) :: badChildType3
type(lockParentType) :: childField
end type badChildType3
!ERROR: Type 'badchildtype4' has an EVENT_TYPE or LOCK_TYPE component, so the type at the base of its type extension chain ('nolockparenttype') must either have an EVENT_TYPE or LOCK_TYPE component, or be EVENT_TYPE or LOCK_TYPE
type, extends(noLockParentType) :: badChildType4
type(eventParentType) :: childField
end type badChildType4
end subroutine C737_a
subroutine C737_b()
use not_iso_fortran_env
type lockParentType
type(lock_type) :: parentField
end type lockParentType
type noLockParentType
end type noLockParentType
! actually OK since this is not the predefined lock_type
type, extends(noLockParentType) :: notBadChildType1
type(lock_type) :: childField
end type notBadChildType1
! actually OK since this is not the predefined event_type
type, extends(noLockParentType) :: notBadChildType2
type(event_type) :: childField
end type notBadChildType2
end subroutine C737_b