-- { dg-do run } -- { dg-options "-O2" } procedure Opt14 is type Rec is record I1, I2, I3 : Integer; end record; type Ptr is access Rec; P : Ptr := new Rec'(0,0,0); procedure Sub (R : In Out Rec) is begin R.I3 := R.I3 - 1; end; begin P.all := (1,2,3); Sub (P.all); if P.all /= (1,2,2) then raise Program_Error; end if; end;