-- { dg-do compile } -- { dg-options "-O2 -gnatws" } procedure Opt16 is generic type T (<>) is private; V, V1 : T; with function F1 (X : T) return T; package GP is R : Boolean := F1 (V) = V1; end GP; type AB is array (Boolean range <>) of Boolean; begin for I1 in Boolean loop for I2 in Boolean loop declare B1 : Boolean := I1; B2 : Boolean := I2; AB1 : AB (Boolean) := (I1, I2); T : AB (B1 .. B2) := (B1 .. B2 => True); F : AB (B1 .. B2) := (B1 .. B2 => False); package P is new GP (AB, AB1, NOT AB1, "NOT"); begin null; end; end loop; end loop; end;