-- { dg-do run } -- { dg-options "-O" } with Opt59_Pkg; use Opt59_Pkg; procedure Opt59 is type Enum is (Zero, One, Two); function Has_True (V : Boolean_Vector) return Boolean is begin for I in V'Range loop if V (I) then return True; end if; end loop; return False; end; Data1 : constant Boolean_Vector := Get_BV1; Data2 : constant Boolean_Vector := Get_BV2; Result : Boolean_Vector; function F return Enum is Res : Enum := Zero; Set1 : constant Boolean := Has_True (Data1); Set2 : constant Boolean := Has_True (Data2); begin if Set1 then Res := Two; elsif Set2 then Res := One; end if; return Res; end; Val : constant Enum := F; begin for I in Result'Range loop Result (I) := Data1 (I) or Data2 (I); end loop; if Val /= Zero then Test (Val = Two); end if; end;