with Element_Size;
separate (Analyze_Generic)
procedure Record_Representation_Clause (For_Clause : Representation_Clause;
                                        Result     : in out Lines.Lines_Type) is

    type Data_Pointer is access Re.Data;

    The_Record : Ap.Element := Reps.Associated_Type (For_Clause);

    Types_Component_List : Re.Record_Kind_List := Re.Make (The_Record);
    Reps_Component_List  : Data_Pointer := new Re.Data'(Re.Make (For_Clause));

    Warnings : Lines.Lines_Type := Lines.Make;
begin
    Check_For_Sizes (Type_List  => Types_Component_List,
                     Rep_List   => Reps_Component_List.all,  
                     The_Record => The_Record,
                     Warnings   => Warnings);

    Check_For_Duplicate_Names (Rep_List => Reps_Component_List.all);

    Check_For_Undefined (Type_List => Types_Component_List,
                         Rep_List  => Reps_Component_List.all);
    Check_For_Position (Rep_List => Reps_Component_List.all);

    Build_Output (Record_Element => The_Record,
                  Errors         => Reps_Component_List.all,
                  Warnings       => Warnings,
                  Result         => Result);
end Record_Representation_Clause;