--  { dg-do compile }
procedure Limited4 is
    TBD_Error : exception;

    type Lim_Rec is limited record
        A : Integer;
        B : Boolean;
    end record;

    type Lim_Tagged is tagged limited record
        R : Lim_Rec;
        N : Natural;
    end record;

    type Lim_Ext is new Lim_Tagged with record
       G : Natural;
    end record;

    --  a) initialization expression of a CW object_declaration

    Obj1 : Lim_Tagged'Class := (raise TBD_Error);
    Obj2 : Lim_Tagged'Class := Lim_Tagged'Class'(raise TBD_Error);

    --  b) initialization expression of a CW component_declaration
    --  ... is illegal: cannot have unconstrained components.
    --
    --  type Rec is record
    --     Comp01 : Lim_Tagged'Class := (raise TBD_Error);
    --     Comp02 : Lim_Tagged'Class := Lim_Tagged'Class'((raise TBD_Error));
    --  end record;

    --  c) the expression of a record_component_association

    Obj : Lim_Tagged := (R => raise TBD_Error, N => 4);

    --  d) the expression for an ancestor_part of an extension_aggregate

    Ext1 : Lim_Ext := ((raise TBD_Error) with G => 0);
    Ext2 : Lim_Ext := (Lim_Tagged'(raise TBD_Error) with G => 0);

    --  e) default_expression or actual parameter for a formal object of
    --     mode in

    function Do_Test1 (Obj : Lim_Tagged) return Boolean is
    begin
       return True;
    end;

    function Do_Test2
      (Obj : Lim_Tagged := (raise TBD_Error)) return Boolean is
    begin
       return True;
    end;

    Check : Boolean;
begin
    Check := Do_Test1 (raise TBD_Error);
    Check := Do_Test2;
end;
