-- { dg-do run { target i?86-*-* x86_64-*-* alpha*-*-* ia64-*-* } } -- { dg-options "-O2" } with Ada.Characters.Handling; use Ada.Characters.Handling; with Interfaces; use Interfaces; with Ada.Unchecked_Conversion; procedure Opt47 is subtype String4 is String (1 .. 4); function To_String4 is new Ada.Unchecked_Conversion (Unsigned_32, String4); type Arr is array (Integer range <>) of Unsigned_32; Leaf : Arr (1 .. 4) := (1349478766, 1948272498, 1702436946, 1702061409); Value : Unsigned_32; Result : String (1 .. 32); Last : Integer := 0; begin for I in 1 .. 4 loop Value := Leaf (I); for J in reverse String4'Range loop if Is_Graphic (To_String4 (Value)(J)) then Last := Last + 1; Result (Last) := To_String4 (Value)(J); end if; end loop; end loop; if Result (1) /= 'P' then raise Program_Error; end if; end;