-- { dg-do compile } with Pack3_Pkg; package Pack3 is subtype N_TYPE is INTEGER range 0..5; type LIST_ARRAY is array (N_TYPE range <>) of INTEGER; type LIST (N : N_TYPE := 0) is record LIST : LIST_ARRAY(1..N); end record; pragma PACK(LIST); subtype CS is STRING(1..Pack3_Pkg.F); type CSA is array (NATURAL range <>) of CS; type REC is record I1, I2 : INTEGER; end record ; type CMD is (CO, AS); type CMD_BLOCK_TYPE (D : CMD := CO) is record N : CSA (1..4); case D is when CO => L : LIST; when AS => R : REC; end case ; end record; pragma PACK(CMD_BLOCK_TYPE); type CMD_TYPE is (RIGHT, WRONG); type CMD_RESULT (D : CMD_TYPE) is record case D is when RIGHT => C : CMD_BLOCK_TYPE; when WRONG => null; end case; end record ; pragma PACK(CMD_RESULT); end Pack3;