-- { dg-do compile } procedure Varsize_Temp (Nbytes : Natural) is type Message_T (Length : Natural) is record case Length is when 0 => null; when others => Id : Natural; end case; end record; type Local_Message_T is new Message_T (Nbytes); function One_message return Local_Message_T is M : Local_Message_T; begin if M.Length > 0 then M.Id := 1; end if; return M; end; procedure Process (X : Local_Message_T) is begin null; end; begin Process (One_Message); end;