! { dg-do run }
! { dg-options "-funsigned" }
program memain

  unsigned(1) :: u1
  unsigned(2) :: u2
  unsigned(4) :: u4
  unsigned(8) :: u8

  u1 = 1u_1
  if (shifta (                 1u  , 1) /=                    0u_1) error stop 1
  if (shifta (                 u1  , 1) /=                    0u_1) error stop 2

  u1 = 128u_1
  if (shifta (               128u_1, 1) /=                  192u_1) error stop 3
  if (shiftl (               128u_1, 1) /=                    0u_1) error stop 4
  if (shiftr (               128u_1, 1) /=                   64u_1) error stop 5

  if (shifta (                   u1, 1) /=                  192u_1) error stop 6
  if (shiftl (                   u1, 1) /=                    0u_1) error stop 7
  if (shiftr (                   u1, 1) /=                   64u_1) error stop 8

  u2 = 32768u_2
  if (shifta (             32768u_2, 1) /=                49152u_2) error stop 9
  if (shiftl (             32768u_2, 1) /=                    0u_2) error stop 10
  if (shiftr (             32768u_2, 1) /=                16384u_2) error stop 11
  if (shifta (                   u2, 1) /=                49152u_2) error stop 12
  if (shiftl (                   u2, 1) /=                    0u_2) error stop 13
  if (shiftr (                   u2, 1) /=                16384u_2) error stop 14

  u4 = 2147483648u_4
  if (shifta (        2147483648u_4, 1) /=           3221225472u_4) error stop 15
  if (shiftl (        2147483648u_4, 1) /=                    0u_4) error stop 16
  if (shiftr (        2147483648u_4, 1) /=           1073741824u_4) error stop 17
  if (shifta (                   u4, 1) /=           3221225472u_4) error stop 18
  if (shiftl (                   u4, 1) /=                    0u_4) error stop 19
  if (shiftr (                   u4, 1) /=           1073741824u_4) error stop 20

  u8 = 9223372036854775808u_8
  if (shifta(9223372036854775808u_8, 1) /= 13835058055282163712u_8) error stop 21
  if (shiftl(9223372036854775808u_8, 1) /=                    0u_8) error stop 22
  if (shiftr(9223372036854775808u_8, 1) /=  4611686018427387904u_8) error stop 23
  if (shifta(                    u8, 1) /= 13835058055282163712u_8) error stop 24
  if (shiftl(                    u8, 1) /=                    0u_8) error stop 25
  if (shiftr(                    u8, 1) /=  4611686018427387904u_8) error stop 26
end program memain