1-- Copyright 2009-2020 Free Software Foundation, Inc. 2-- 3-- This program is free software; you can redistribute it and/or modify 4-- it under the terms of the GNU General Public License as published by 5-- the Free Software Foundation; either version 3 of the License, or 6-- (at your option) any later version. 7-- 8-- This program is distributed in the hope that it will be useful, 9-- but WITHOUT ANY WARRANTY; without even the implied warranty of 10-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11-- GNU General Public License for more details. 12-- 13-- You should have received a copy of the GNU General Public License 14-- along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16-- This program declares a bunch of unconstrained objects and 17-- discrinimated records; the goal is to check that GDB does not crash 18-- when printing them even if they are not initialized. 19 20with Parse_Controlled; 21 22procedure Parse is -- START 23 24 A : aliased Integer := 1; 25 26 type Access_Type is access all Integer; 27 28 type String_Access is access String; 29 30 type My_Record is record 31 Field1 : Access_Type; 32 Field2 : String (1 .. 2); 33 end record; 34 35 type Discriminants_Record (A : Integer; B : Boolean) is record 36 C : Float; 37 end record; 38 Z : Discriminants_Record := (A => 1, B => False, C => 2.0); 39 40 type Variable_Record (A : Boolean := True) is record 41 case A is 42 when True => 43 B : Integer; 44 when False => 45 C : Float; 46 D : Integer; 47 end case; 48 end record; 49 Y : Variable_Record := (A => True, B => 1); 50 Y2 : Variable_Record := (A => False, C => 1.0, D => 2); 51 Nv : Parse_Controlled.Null_Variant; 52 53 type Union_Type (A : Boolean := False) is record 54 case A is 55 when True => B : Integer; 56 when False => C : Float; 57 end case; 58 end record; 59 pragma Unchecked_Union (Union_Type); 60 Ut : Union_Type := (A => True, B => 3); 61 62 type Tagged_Type is tagged record 63 A : Integer; 64 B : Character; 65 end record; 66 Tt : Tagged_Type := (A => 2, B => 'C'); 67 68 type Child_Tagged_Type is new Tagged_Type with record 69 C : Float; 70 end record; 71 Ctt : Child_Tagged_Type := (Tt with C => 4.5); 72 73 type Child_Tagged_Type2 is new Tagged_Type with null record; 74 Ctt2 : Child_Tagged_Type2 := (Tt with null record); 75 76 type My_Record_Array is array (Natural range <>) of My_Record; 77 W : My_Record_Array := ((Field1 => A'Access, Field2 => "ab"), 78 (Field1 => A'Access, Field2 => "rt")); 79 80 type Discriminant_Record (Num1, Num2, 81 Num3, Num4 : Natural) is record 82 Field1 : My_Record_Array (1 .. Num2); 83 Field2 : My_Record_Array (Num1 .. 10); 84 Field3 : My_Record_Array (Num1 .. Num2); 85 Field4 : My_Record_Array (Num3 .. Num2); 86 Field5 : My_Record_Array (Num4 .. Num2); 87 end record; 88 Dire : Discriminant_Record (1, 7, 3, 0); 89 90 type Null_Variant_Part (Discr : Integer) is record 91 case Discr is 92 when 1 => Var_1 : Integer; 93 when 2 => Var_2 : Boolean; 94 when others => null; 95 end case; 96 end record; 97 Nvp : Null_Variant_Part (3); 98 99 type T_Type is array (Positive range <>) of Integer; 100 type T_Ptr_Type is access T_Type; 101 102 T_Ptr : T_Ptr_Type := new T_Type' (13, 17); 103 T_Ptr2 : T_Ptr_Type := new T_Type' (2 => 13, 3 => 17); 104 105 function Foos return String is 106 begin 107 return "string"; 108 end Foos; 109 110 My_Str : String := Foos; 111 112 type Value_Var_Type is ( V_Null, V_Boolean, V_Integer ); 113 type Value_Type( Var : Value_Var_Type := V_Null ) is 114 record 115 case Var is 116 when V_Null => 117 null; 118 when V_Boolean => 119 Boolean_Value : Boolean; 120 when V_Integer => 121 Integer_Value : Integer; 122 end case; 123 end record; 124 NBI_N : Value_Type := (Var => V_Null); 125 NBI_I : Value_Type := (Var => V_Integer, Integer_Value => 18); 126 NBI_B : Value_Type := (Var => V_Boolean, Boolean_Value => True); 127 128begin 129 null; 130end Parse; 131