-- { dg-do run } procedure Generic_Comp is generic type Element_Type is private; type Index_Type is (<>); type Array_Type is array (Index_Type range <>) of Element_Type; with function ">" (Left, Right : Element_Type) return Boolean is <>; procedure Gen (Data: in out Array_Type); procedure Gen (Data: in out Array_Type) is begin if not (Data'Length > 1) or else not (Integer'(Data'Length) > 1) or else not Standard.">" (Data'Length, 1) or else not Standard.">" (Integer'(Data'Length), 1) then raise Program_Error; end if; end; type My_Array is array (Positive range <>) of Integer; function Less_Than (L, R : Integer) return Boolean is begin return L < R; end; procedure Chk_Down is new Gen (Element_Type => Integer, Index_Type => Positive, Array_Type => My_Array, ">" => Less_Than); Data : My_Array (1 .. 2); begin Chk_Down (Data); end;