cb424d7448
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).
91 lines
3.2 KiB
Fortran
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
|