-- { dg-do run } -- { dg-options "-O2" } procedure Derived_Aggregate is type Int is range 1 .. 10; type Str is array (Int range <>) of Character; type Parent (D1, D2 : Int; B : Boolean) is record S : Str (D1 .. D2); case B is when False => C1 : Integer; when True => C2 : Float; end case; end record; for Parent'Alignment use 8; type Derived (D : Int) is new Parent (D1 => D, D2 => D, B => False); function Ident (I : Integer) return integer is begin return I; end; Y : Derived := (D => 7, S => "b", C1 => Ident (32)); begin if Parent(Y).D1 /= 7 then raise Program_Error; end if; end;