-- { dg-do run } -- { dg-options "-O" } with Opt27_Pkg; procedure Opt27 is type Rec_T is record A, B, C, D, E : Integer; end record; package List is new Opt27_Pkg (Rec_T); My_List : List.List_T; function Is_Match (Element : Rec_T; Template : Integer) return Boolean is begin return (Element.C = Template); end; function Find_Int is new List.Find_Elem (Integer, Is_Match); Node : List.Node_T := Find_Int (10, My_List); begin if not List.Is_Null (Node) then raise Program_Error; end if; end;