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).
205 lines
6.6 KiB
Fortran
205 lines
6.6 KiB
Fortran
! RUN: %python %S/test_errors.py %s %flang_fc1
|
|
! Tests for the 14 items that specify a "specification expression" in section
|
|
! 10.1.11
|
|
|
|
! a constant or subobject of a constant,
|
|
subroutine s1()
|
|
type dType
|
|
integer :: field
|
|
end type dType
|
|
|
|
type(dType), parameter :: dConst = dType(3)
|
|
real, dimension(3) :: realVar1
|
|
real, dimension(dConst%field) :: realVar2
|
|
end subroutine s1
|
|
|
|
! an object designator with a base object that is a dummy argument that has
|
|
! neither the OPTIONAL nor the INTENT (OUT) attribute,
|
|
subroutine s2(inArg, inoutArg, outArg, optArg)
|
|
integer, intent(in) :: inArg
|
|
integer, intent(inout) :: inoutArg
|
|
integer, intent(out) :: outArg
|
|
integer, intent(in), optional :: optArg
|
|
real, dimension(inArg) :: realVar1
|
|
real, dimension(inoutArg) :: realVar2
|
|
!ERROR: Invalid specification expression: reference to INTENT(OUT) dummy argument 'outarg'
|
|
real, dimension(outArg) :: realVar3
|
|
!ERROR: Invalid specification expression: reference to OPTIONAL dummy argument 'optarg'
|
|
real, dimension(optArg) :: realVar4
|
|
|
|
outArg = 3
|
|
block
|
|
!PORTABILITY: specification expression refers to host-associated INTENT(OUT) dummy argument 'outarg'
|
|
real a(outArg)
|
|
!ERROR: Invalid specification expression: reference to OPTIONAL dummy argument 'optarg'
|
|
real b(optArg)
|
|
end block
|
|
contains
|
|
subroutine s2inner
|
|
!PORTABILITY: specification expression refers to host-associated INTENT(OUT) dummy argument 'outarg'
|
|
real a(outArg)
|
|
!ERROR: Invalid specification expression: reference to OPTIONAL dummy argument 'optarg'
|
|
real b(optArg)
|
|
end
|
|
end subroutine s2
|
|
|
|
! an object designator with a base object that is in a common block,
|
|
subroutine s3()
|
|
integer :: intVar
|
|
common intCommonVar
|
|
real, dimension(intCommonVar) :: realVar
|
|
end subroutine s3
|
|
|
|
! an object designator with a base object that is made accessible by
|
|
! use or host association,
|
|
module m4
|
|
integer :: intVar
|
|
end module m4
|
|
|
|
subroutine s4()
|
|
use m4
|
|
real, dimension(intVar) :: realVar
|
|
end subroutine s4
|
|
|
|
! an array constructor where each element and each scalar-int-expr of
|
|
! each ac-implied-do-control is a restricted expression,
|
|
subroutine s5()
|
|
real, dimension(storage_size([1,2])) :: realVar
|
|
end subroutine s5
|
|
|
|
! a structure constructor where each component is a restricted expression,
|
|
subroutine s6()
|
|
type :: dType
|
|
integer :: field1
|
|
integer :: field2
|
|
end type dType
|
|
|
|
real, dimension(storage_size(dType(1, 2))) :: realArray
|
|
end subroutine s6
|
|
|
|
! a specification inquiry where each designator or argument is
|
|
! (a) a restricted expression or
|
|
subroutine s7a()
|
|
real, dimension(3) :: realArray1
|
|
real, dimension(size(realArray1)) :: realArray2
|
|
end subroutine s7a
|
|
|
|
! a specification inquiry where each designator or argument is
|
|
! (b) a variable that is not an optional dummy argument, and whose
|
|
! properties inquired about are not
|
|
! (i) dependent on the upper bound of the last dimension of an
|
|
! assumed-size array,
|
|
subroutine s7bi(assumedArg)
|
|
integer, dimension(2, *) :: assumedArg
|
|
real, dimension(ubound(assumedArg, 1)) :: realArray1
|
|
!ERROR: DIM=2 dimension is out of range for rank-2 assumed-size array
|
|
real, dimension(ubound(assumedArg, 2)) :: realArray2
|
|
end subroutine s7bi
|
|
|
|
! a specification inquiry where each designator or argument is
|
|
! (b) a variable that is not an optional dummy argument, and whose
|
|
! properties inquired about are not
|
|
! (ii) deferred, or
|
|
subroutine s7bii(dummy)
|
|
character(len=:), pointer :: dummy
|
|
! Should be an error since "dummy" is deferred, but all compilers handle it
|
|
real, dimension(len(dummy)) :: realArray
|
|
end subroutine s7bii
|
|
|
|
! a specification inquiry where each designator or argument is
|
|
! (b) a variable that is not an optional dummy argument, and whose
|
|
! properties inquired about are not
|
|
! (iii) defined by an expression that is not a restricted expression,
|
|
subroutine s7biii(x, y)
|
|
real, intent(out) :: x(:)
|
|
real, optional :: y(:)
|
|
integer, parameter :: localConst = 5
|
|
integer :: local = 5
|
|
! OK, since "localConst" is a constant
|
|
real, dimension(localConst) :: realArray1
|
|
!PORTABILITY: specification expression refers to local object 'local' (initialized and saved) [-Wsaved-local-in-spec-expr]
|
|
real, dimension(local) :: realArray2
|
|
real, dimension(size(realArray1)) :: realArray3 ! ok
|
|
real, dimension(size(x)) :: realArray4 ! ok
|
|
real, dimension(merge(1,2,present(y))) :: realArray5 ! ok
|
|
!ERROR: Invalid specification expression: reference to OPTIONAL dummy argument 'y'
|
|
real, dimension(size(y)) :: realArray6
|
|
end subroutine s7biii
|
|
|
|
! a specification inquiry that is a constant expression,
|
|
subroutine s8()
|
|
integer :: iVar
|
|
real, dimension(bit_size(iVar)) :: realArray
|
|
end subroutine s8
|
|
|
|
! a reference to the intrinsic function PRESENT,
|
|
subroutine s9(optArg)
|
|
integer, optional :: optArg
|
|
real, dimension(merge(3, 4, present(optArg))) :: realArray
|
|
end subroutine s9
|
|
|
|
! a reference to any other standard intrinsic function where each
|
|
! argument is a restricted expression,
|
|
subroutine s10()
|
|
integer :: iVar
|
|
real, dimension(bit_size(iVar)) :: realArray
|
|
end subroutine s10
|
|
|
|
! a reference to a transformational function from the intrinsic module
|
|
! IEEE_ARITHMETIC, IEEE_EXCEPTIONS, or ISO_C_BINDING, where each argument
|
|
! is a restricted expression,
|
|
subroutine s11()
|
|
use ieee_exceptions
|
|
real, dimension(merge(3, 4, ieee_support_halting(ieee_invalid))) :: realArray
|
|
end subroutine s11
|
|
|
|
! a reference to a specification function where each argument is a
|
|
! restricted expression,
|
|
module m12
|
|
contains
|
|
pure function specFunc(arg)
|
|
integer, intent(in) :: arg
|
|
integer :: specFunc
|
|
specFunc = 3 + arg
|
|
end function specFunc
|
|
end module m12
|
|
|
|
subroutine s12()
|
|
use m12
|
|
real, dimension(specFunc(2)) :: realArray
|
|
end subroutine s12
|
|
|
|
! a type parameter of the derived type being defined,
|
|
subroutine s13()
|
|
type :: dtype(param)
|
|
integer, len :: param
|
|
real, dimension(param) :: realField
|
|
end type dtype
|
|
end subroutine s13
|
|
|
|
! an ac-do-variable within an array constructor where each
|
|
! scalar-int-expr of the corresponding ac-implied-do-control is a restricted
|
|
! expression, or
|
|
subroutine s14()
|
|
real, dimension(5) :: realField = [(i, i = 1, 5)]
|
|
end subroutine s14
|
|
|
|
! a restricted expression enclosed in parentheses,where each subscript,
|
|
! section subscript, substring starting point, substring ending point, and
|
|
! type parameter value is a restricted expression
|
|
subroutine s15()
|
|
type :: dtype(param)
|
|
integer, len :: param
|
|
real, dimension((param + 2)) :: realField
|
|
end type dtype
|
|
end subroutine s15
|
|
|
|
! Regression test: don't get confused by host association
|
|
subroutine s16(n)
|
|
integer :: n
|
|
contains
|
|
subroutine inner(r)
|
|
real, dimension(n) :: r
|
|
end subroutine
|
|
end subroutine s16
|