-- { dg-do run } -- { dg-options "-O2" } with System; procedure SSO18 is type Arr is array (1..32) of Short_Integer; type Rev_Arr is array (1..32) of Short_Integer with Scalar_Storage_Order => System.High_Order_First; C : constant Arr := (others => 16); RA : Rev_Arr; A : Arr; begin RA := Rev_Arr(C); A := Arr (RA); if A /= C or else RA(1) /= 16 then raise Program_Error; end if; end;