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

126 lines
5.5 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1()
! C701 (R701) The type-param-value for a kind type parameter shall be a
! constant expression.
!
! C702 (R701) A colon shall not be used as a type-param-value except in the
! declaration of an entity that has the POINTER or ALLOCATABLE attribute.
!
! C704 (R703) In a declaration-type-spec, every type-param-value that is
! not a colon or an asterisk shall be a specification expression.
! Section 10.1.11 defines specification expressions
!
! 15.4.2.2(4)(c) A procedure must have an explicit interface if it has a
! result that has a nonassumed type parameter value that is not a constant
! expression.
!
integer, parameter :: constVal = 1
integer :: nonConstVal = 1
!PORTABILITY: specification expression refers to local object 'nonconstval' (initialized and saved) [-Wsaved-local-in-spec-expr]
character(nonConstVal) :: colonString1
character(len=20, kind=constVal + 1) :: constKindString
character(len=:, kind=constVal + 1), pointer :: constKindString1
!ERROR: 'constkindstring2' has a type CHARACTER(KIND=2,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
character(len=:, kind=constVal + 1) :: constKindString2
!ERROR: Must be a constant value
character(len=20, kind=nonConstVal) :: nonConstKindString
!ERROR: 'deferredstring' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
character(len=:) :: deferredString
!ERROR: 'colonstring2' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
character(:) :: colonString2
!OK because of the allocatable attribute
character(:), allocatable :: colonString3
!ERROR: 'foo1' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
character(:), external :: foo1
!ERROR: 'foo2' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
procedure(character(:)) :: foo2
interface
function foo3()
!ERROR: 'foo3' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
character(:) foo3
end function
end interface
!ERROR: Must have INTEGER type, but is REAL(4)
character(3.5) :: badParamValue
type derived(typeKind, typeLen)
integer, kind :: typeKind
integer, len :: typeLen
character(typeKind) :: kindValue
character(typeLen) :: lenValue
end type derived
type (derived(constVal, 3)) :: constDerivedKind
!ERROR: Value of KIND type parameter 'typekind' must be constant
!PORTABILITY: specification expression refers to local object 'nonconstval' (initialized and saved) [-Wsaved-local-in-spec-expr]
type (derived(nonConstVal, 3)) :: nonConstDerivedKind
!OK because all type-params are constants
type (derived(3, constVal)) :: constDerivedLen
!PORTABILITY: specification expression refers to local object 'nonconstval' (initialized and saved) [-Wsaved-local-in-spec-expr]
type (derived(3, nonConstVal)) :: nonConstDerivedLen
!ERROR: 'colonderivedlen' has a type derived(typekind=3_4,typelen=:) with a deferred type parameter but is neither an allocatable nor an object pointer
type (derived(3, :)) :: colonDerivedLen
!ERROR: Value of KIND type parameter 'typekind' must be constant
!ERROR: 'colonderivedlen1' has a type derived(typekind=:,typelen=:) with a deferred type parameter but is neither an allocatable nor an object pointer
type (derived( :, :)) :: colonDerivedLen1
type (derived( :, :)), pointer :: colonDerivedLen2
type (derived(4, :)), pointer :: colonDerivedLen3
end subroutine s1
!C702
!ERROR: 'f1' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
character(:) function f1
end function
function f2
!ERROR: 'f2' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
character(:) f2
end function
function f3() result(res)
!ERROR: 'res' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
character(:) res
end function
!ERROR: 'f4' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
function f4
implicit character(:)(f)
end function
!Not errors.
Program d5
Type string(maxlen)
Integer,Kind :: maxlen
Character(maxlen) :: value
End Type
Type(string(80)) line
line%value = 'ok'
Print *,Trim(line%value)
End Program
subroutine outer
integer n
contains
character(n) function inner1()
inner1 = ''
end function inner1
function inner2()
real inner2(n)
end function inner2
end subroutine outer
subroutine s2(dp,dpp)
!ERROR: 'dp' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
procedure(character(:)) :: dp
!ERROR: 'dpp' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
procedure(character(:)), pointer :: dpp
!ERROR: 'pp' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
procedure(character(:)), pointer :: pp
!ERROR: 'xp' has a type CHARACTER(KIND=1,LEN=:) with a deferred type parameter but is neither an allocatable nor an object pointer
procedure(character(:)) :: xp
end subroutine