1-- { dg-do run } 2-- { dg-options "-gnatp" } 3 4procedure Discr24 is 5 6 type Family_Type is (Family_Inet, Family_Inet6); 7 type Port_Type is new Natural; 8 9 subtype Inet_Addr_Comp_Type is Natural range 0 .. 255; 10 11 type Inet_Addr_VN_Type is array (Natural range <>) of Inet_Addr_Comp_Type; 12 13 subtype Inet_Addr_V4_Type is Inet_Addr_VN_Type (1 .. 4); 14 subtype Inet_Addr_V6_Type is Inet_Addr_VN_Type (1 .. 16); 15 16 type Inet_Addr_Type (Family : Family_Type := Family_Inet) is record 17 case Family is 18 when Family_Inet => 19 Sin_V4 : Inet_Addr_V4_Type := (others => 0); 20 21 when Family_Inet6 => 22 Sin_V6 : Inet_Addr_V6_Type := (others => 0); 23 end case; 24 end record; 25 26 type Sock_Addr_Type (Family : Family_Type := Family_Inet) is record 27 Addr : Inet_Addr_Type (Family); 28 Port : Port_Type; 29 end record; 30 31 function F return Inet_Addr_Type is 32 begin 33 return Inet_Addr_Type' 34 (Family => Family_Inet, Sin_V4 => (192, 168, 169, 170)); 35 end F; 36 37 SA : Sock_Addr_Type; 38 39begin 40 SA.Addr.Sin_V4 := (172, 16, 17, 18); 41 SA.Port := 1111; 42 SA.Addr := F; 43 if SA.Port /= 1111 then 44 raise Program_Error; 45 end if; 46end; 47