-- { dg-do compile } with Ada.Text_IO; use Ada.Text_IO; procedure Discr58 is type Field(Flag : Boolean := True) is record case Flag is when True => Param1 : Boolean := False; when False => Param2 : Boolean := True; end case; end record; type Header(Flag : Boolean := True) is record Param3 : Integer := 0; Params : Field(Flag) := (if Flag = True then (Flag => True, others => <>) else (Flag => False, others => <>)); end record; type Message(Flag : Boolean) is record -- This assignment crashes GNAT The_Header : Header(Flag) := Header'(Flag => True, others => <>); end record; It : Message (True); begin Put_Line("Hello World"); Put_Line (Boolean'Image (It.The_Header.Flag)); Put_Line (Boolean'Image (It.The_Header.Params.Flag)); end Discr58;