! { dg-do run } ! { dg-additional-options "-fcheck=bits" } ! PR fortran/108937 - Intrinsic IBITS(I,POS,LEN) fails when LEN equals ! to BIT_SIZE(I) ! Contributed by saitofuyuki@jamstec.go.jp program test_bits implicit none integer, parameter :: KT = kind (1) integer, parameter :: lbits = bit_size (0_KT) integer(kind=KT) :: x, y0, y1 integer(kind=KT) :: p, l x = -1 p = 0 do l = 0, lbits y0 = ibits (x, p, l) y1 = ibits_1(x, p, l) if (y0 /= y1) then print *, l, y0, y1 stop 1+l end if end do contains elemental integer(kind=KT) function ibits_1(I, POS, LEN) result(n) !! IBITS(I, POS, LEN) = (I >> POS) & ~((~0) << LEN) implicit none integer(kind=KT),intent(in) :: I integer, intent(in) :: POS, LEN n = IAND (ISHFT(I, - POS), NOT(ISHFT(-1_KT, LEN))) end function ibits_1 end program test_bits