--- /dev/null
+--- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/sinfo.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/sinfo.h 2004-06-02 00:54:16.000000000 +0200
+@@ -0,0 +1,847 @@
++/*--------------------------------------------------------------------------*/
++/* */
++/* GNAT COMPILER COMPONENTS */
++/* */
++/* S I N F O */
++/* */
++/* C Header File */
++/* */
++/* Copyright (C) 1992-2004, Free Software Foundation, Inc. */
++/* */
++/* GNAT is free software; you can redistribute it and/or modify it under */
++/* terms of the GNU General Public License as published by the Free Soft- */
++/* ware Foundation; either version 2, or (at your option) any later ver- */
++/* sion. GNAT is distributed in the hope that it will be useful, but WITH- */
++/* OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY */
++/* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License */
++/* for more details. You should have received a copy of the GNU General */
++/* Public License distributed with GNAT; see file COPYING. If not, write */
++/* to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, */
++/* MA 02111-1307, USA. */
++/* */
++/* As a special exception, if other files instantiate generics from this */
++/* unit, or you link this unit with other files to produce an executable, */
++/* this unit does not by itself cause the resulting executable to be */
++/* covered by the GNU General Public License. This exception does not */
++/* however invalidate any other reasons why the executable file might be */
++/* covered by the GNU Public License. */
++/* */
++/* GNAT was originally developed by the GNAT team at New York University. */
++/* Extensive contributions were provided by Ada Core Technologies Inc. */
++/* */
++/*--------------------------------------------------------------------------*/
++
++ #define N_Unused_At_Start 0
++ #define N_At_Clause 1
++ #define N_Component_Clause 2
++ #define N_Enumeration_Representation_Clause 3
++ #define N_Mod_Clause 4
++ #define N_Record_Representation_Clause 5
++ #define N_Attribute_Definition_Clause 6
++ #define N_Empty 7
++ #define N_Pragma 8
++ #define N_Pragma_Argument_Association 9
++ #define N_Error 10
++ #define N_Defining_Character_Literal 11
++ #define N_Defining_Identifier 12
++ #define N_Defining_Operator_Symbol 13
++ #define N_Expanded_Name 14
++ #define N_Identifier 15
++ #define N_Operator_Symbol 16
++ #define N_Character_Literal 17
++ #define N_Op_Add 18
++ #define N_Op_Concat 19
++ #define N_Op_Expon 20
++ #define N_Op_Subtract 21
++ #define N_Op_Divide 22
++ #define N_Op_Mod 23
++ #define N_Op_Multiply 24
++ #define N_Op_Rem 25
++ #define N_Op_And 26
++ #define N_Op_Eq 27
++ #define N_Op_Ge 28
++ #define N_Op_Gt 29
++ #define N_Op_Le 30
++ #define N_Op_Lt 31
++ #define N_Op_Ne 32
++ #define N_Op_Or 33
++ #define N_Op_Xor 34
++ #define N_Op_Rotate_Left 35
++ #define N_Op_Rotate_Right 36
++ #define N_Op_Shift_Left 37
++ #define N_Op_Shift_Right 38
++ #define N_Op_Shift_Right_Arithmetic 39
++ #define N_Op_Abs 40
++ #define N_Op_Minus 41
++ #define N_Op_Not 42
++ #define N_Op_Plus 43
++ #define N_Attribute_Reference 44
++ #define N_And_Then 45
++ #define N_Conditional_Expression 46
++ #define N_Explicit_Dereference 47
++ #define N_Function_Call 48
++ #define N_In 49
++ #define N_Indexed_Component 50
++ #define N_Integer_Literal 51
++ #define N_Not_In 52
++ #define N_Null 53
++ #define N_Or_Else 54
++ #define N_Procedure_Call_Statement 55
++ #define N_Qualified_Expression 56
++ #define N_Raise_Constraint_Error 57
++ #define N_Raise_Program_Error 58
++ #define N_Raise_Storage_Error 59
++ #define N_Aggregate 60
++ #define N_Allocator 61
++ #define N_Extension_Aggregate 62
++ #define N_Range 63
++ #define N_Real_Literal 64
++ #define N_Reference 65
++ #define N_Selected_Component 66
++ #define N_Slice 67
++ #define N_String_Literal 68
++ #define N_Subprogram_Info 69
++ #define N_Type_Conversion 70
++ #define N_Unchecked_Expression 71
++ #define N_Unchecked_Type_Conversion 72
++ #define N_Subtype_Indication 73
++ #define N_Component_Declaration 74
++ #define N_Entry_Declaration 75
++ #define N_Formal_Object_Declaration 76
++ #define N_Formal_Type_Declaration 77
++ #define N_Full_Type_Declaration 78
++ #define N_Incomplete_Type_Declaration 79
++ #define N_Loop_Parameter_Specification 80
++ #define N_Object_Declaration 81
++ #define N_Protected_Type_Declaration 82
++ #define N_Private_Extension_Declaration 83
++ #define N_Private_Type_Declaration 84
++ #define N_Subtype_Declaration 85
++ #define N_Function_Specification 86
++ #define N_Procedure_Specification 87
++ #define N_Entry_Index_Specification 88
++ #define N_Freeze_Entity 89
++ #define N_Access_Function_Definition 90
++ #define N_Access_Procedure_Definition 91
++ #define N_Task_Type_Declaration 92
++ #define N_Package_Body_Stub 93
++ #define N_Protected_Body_Stub 94
++ #define N_Subprogram_Body_Stub 95
++ #define N_Task_Body_Stub 96
++ #define N_Function_Instantiation 97
++ #define N_Package_Instantiation 98
++ #define N_Procedure_Instantiation 99
++ #define N_Package_Body 100
++ #define N_Subprogram_Body 101
++ #define N_Protected_Body 102
++ #define N_Task_Body 103
++ #define N_Implicit_Label_Declaration 104
++ #define N_Package_Declaration 105
++ #define N_Single_Task_Declaration 106
++ #define N_Subprogram_Declaration 107
++ #define N_Use_Package_Clause 108
++ #define N_Generic_Package_Declaration 109
++ #define N_Generic_Subprogram_Declaration 110
++ #define N_Constrained_Array_Definition 111
++ #define N_Unconstrained_Array_Definition 112
++ #define N_Exception_Renaming_Declaration 113
++ #define N_Object_Renaming_Declaration 114
++ #define N_Package_Renaming_Declaration 115
++ #define N_Subprogram_Renaming_Declaration 116
++ #define N_Generic_Function_Renaming_Declaration 117
++ #define N_Generic_Package_Renaming_Declaration 118
++ #define N_Generic_Procedure_Renaming_Declaration 119
++ #define N_Abort_Statement 120
++ #define N_Accept_Statement 121
++ #define N_Assignment_Statement 122
++ #define N_Asynchronous_Select 123
++ #define N_Block_Statement 124
++ #define N_Case_Statement 125
++ #define N_Code_Statement 126
++ #define N_Conditional_Entry_Call 127
++ #define N_Delay_Relative_Statement 128
++ #define N_Delay_Until_Statement 129
++ #define N_Entry_Call_Statement 130
++ #define N_Free_Statement 131
++ #define N_Goto_Statement 132
++ #define N_Loop_Statement 133
++ #define N_Null_Statement 134
++ #define N_Raise_Statement 135
++ #define N_Requeue_Statement 136
++ #define N_Return_Statement 137
++ #define N_Selective_Accept 138
++ #define N_Timed_Entry_Call 139
++ #define N_Exit_Statement 140
++ #define N_If_Statement 141
++ #define N_Accept_Alternative 142
++ #define N_Delay_Alternative 143
++ #define N_Elsif_Part 144
++ #define N_Entry_Body_Formal_Part 145
++ #define N_Iteration_Scheme 146
++ #define N_Terminate_Alternative 147
++ #define N_Abortable_Part 148
++ #define N_Abstract_Subprogram_Declaration 149
++ #define N_Access_Definition 150
++ #define N_Access_To_Object_Definition 151
++ #define N_Case_Statement_Alternative 152
++ #define N_Compilation_Unit 153
++ #define N_Compilation_Unit_Aux 154
++ #define N_Component_Association 155
++ #define N_Component_Definition 156
++ #define N_Component_List 157
++ #define N_Derived_Type_Definition 158
++ #define N_Decimal_Fixed_Point_Definition 159
++ #define N_Defining_Program_Unit_Name 160
++ #define N_Delta_Constraint 161
++ #define N_Designator 162
++ #define N_Digits_Constraint 163
++ #define N_Discriminant_Association 164
++ #define N_Discriminant_Specification 165
++ #define N_Enumeration_Type_Definition 166
++ #define N_Entry_Body 167
++ #define N_Entry_Call_Alternative 168
++ #define N_Exception_Declaration 169
++ #define N_Exception_Handler 170
++ #define N_Floating_Point_Definition 171
++ #define N_Formal_Decimal_Fixed_Point_Definition 172
++ #define N_Formal_Derived_Type_Definition 173
++ #define N_Formal_Discrete_Type_Definition 174
++ #define N_Formal_Floating_Point_Definition 175
++ #define N_Formal_Modular_Type_Definition 176
++ #define N_Formal_Ordinary_Fixed_Point_Definition 177
++ #define N_Formal_Package_Declaration 178
++ #define N_Formal_Private_Type_Definition 179
++ #define N_Formal_Signed_Integer_Type_Definition 180
++ #define N_Formal_Subprogram_Declaration 181
++ #define N_Generic_Association 182
++ #define N_Handled_Sequence_Of_Statements 183
++ #define N_Index_Or_Discriminant_Constraint 184
++ #define N_Itype_Reference 185
++ #define N_Label 186
++ #define N_Modular_Type_Definition 187
++ #define N_Number_Declaration 188
++ #define N_Ordinary_Fixed_Point_Definition 189
++ #define N_Others_Choice 190
++ #define N_Package_Specification 191
++ #define N_Parameter_Association 192
++ #define N_Parameter_Specification 193
++ #define N_Protected_Definition 194
++ #define N_Range_Constraint 195
++ #define N_Real_Range_Specification 196
++ #define N_Record_Definition 197
++ #define N_Signed_Integer_Type_Definition 198
++ #define N_Single_Protected_Declaration 199
++ #define N_Subunit 200
++ #define N_Task_Definition 201
++ #define N_Triggering_Alternative 202
++ #define N_Use_Type_Clause 203
++ #define N_Validate_Unchecked_Conversion 204
++ #define N_Variant 205
++ #define N_Variant_Part 206
++ #define N_With_Clause 207
++ #define N_With_Type_Clause 208
++ #define N_Unused_At_End 209
++
++ #define Number_Node_Kinds 210
++ SUBTYPE (N_Access_To_Subprogram_Definition, Node_Kind,
++ N_Access_Function_Definition,
++ N_Access_Procedure_Definition)
++ SUBTYPE (N_Array_Type_Definition, Node_Kind,
++ N_Constrained_Array_Definition,
++ N_Unconstrained_Array_Definition)
++ SUBTYPE (N_Binary_Op, Node_Kind,
++ N_Op_Add,
++ N_Op_Shift_Right_Arithmetic)
++ SUBTYPE (N_Body_Stub, Node_Kind,
++ N_Package_Body_Stub,
++ N_Task_Body_Stub)
++ SUBTYPE (N_Declaration, Node_Kind,
++ N_Component_Declaration,
++ N_Procedure_Specification)
++ SUBTYPE (N_Direct_Name, Node_Kind,
++ N_Identifier,
++ N_Character_Literal)
++ SUBTYPE (N_Entity, Node_Kind,
++ N_Defining_Character_Literal,
++ N_Defining_Operator_Symbol)
++ SUBTYPE (N_Generic_Declaration, Node_Kind,
++ N_Generic_Package_Declaration,
++ N_Generic_Subprogram_Declaration)
++ SUBTYPE (N_Generic_Instantiation, Node_Kind,
++ N_Function_Instantiation,
++ N_Procedure_Instantiation)
++ SUBTYPE (N_Generic_Renaming_Declaration, Node_Kind,
++ N_Generic_Function_Renaming_Declaration,
++ N_Generic_Procedure_Renaming_Declaration)
++ SUBTYPE (N_Has_Chars, Node_Kind,
++ N_Attribute_Definition_Clause,
++ N_Op_Plus)
++ SUBTYPE (N_Has_Entity, Node_Kind,
++ N_Expanded_Name,
++ N_Attribute_Reference)
++ SUBTYPE (N_Has_Etype, Node_Kind,
++ N_Error,
++ N_Subtype_Indication)
++ SUBTYPE (N_Has_Treat_Fixed_As_Integer, Node_Kind,
++ N_Op_Divide,
++ N_Op_Rem)
++ SUBTYPE (N_Later_Decl_Item, Node_Kind,
++ N_Task_Type_Declaration,
++ N_Generic_Subprogram_Declaration)
++ SUBTYPE (N_Op, Node_Kind,
++ N_Op_Add,
++ N_Op_Plus)
++ SUBTYPE (N_Op_Boolean, Node_Kind,
++ N_Op_And,
++ N_Op_Xor)
++ SUBTYPE (N_Op_Compare, Node_Kind,
++ N_Op_Eq,
++ N_Op_Ne)
++ SUBTYPE (N_Op_Shift, Node_Kind,
++ N_Op_Rotate_Left,
++ N_Op_Shift_Right_Arithmetic)
++ SUBTYPE (N_Proper_Body, Node_Kind,
++ N_Package_Body,
++ N_Task_Body)
++ SUBTYPE (N_Raise_xxx_Error, Node_Kind,
++ N_Raise_Constraint_Error,
++ N_Raise_Storage_Error)
++ SUBTYPE (N_Renaming_Declaration, Node_Kind,
++ N_Exception_Renaming_Declaration,
++ N_Generic_Procedure_Renaming_Declaration)
++ SUBTYPE (N_Representation_Clause, Node_Kind,
++ N_At_Clause,
++ N_Attribute_Definition_Clause)
++ SUBTYPE (N_Statement_Other_Than_Procedure_Call, Node_Kind,
++ N_Abort_Statement,
++ N_If_Statement)
++ SUBTYPE (N_Has_Condition, Node_Kind,
++ N_Exit_Statement,
++ N_Terminate_Alternative)
++ SUBTYPE (N_Subexpr, Node_Kind,
++ N_Expanded_Name,
++ N_Unchecked_Type_Conversion)
++ SUBTYPE (N_Subprogram_Specification, Node_Kind,
++ N_Function_Specification,
++ N_Procedure_Specification)
++ SUBTYPE (N_Unary_Op, Node_Kind,
++ N_Op_Abs,
++ N_Op_Plus)
++ SUBTYPE (N_Unit_Body, Node_Kind,
++ N_Package_Body,
++ N_Subprogram_Body)
++ INLINE Boolean ABE_Is_Certain (Node_Id N)
++ { return Flag18 (N); }
++ INLINE Boolean Abort_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Node_Id Abortable_Part (Node_Id N)
++ { return Node2 (N); }
++ INLINE Boolean Abstract_Present (Node_Id N)
++ { return Flag4 (N); }
++ INLINE List_Id Accept_Handler_Records (Node_Id N)
++ { return List5 (N); }
++ INLINE Node_Id Accept_Statement (Node_Id N)
++ { return Node2 (N); }
++ INLINE Elist_Id Access_Types_To_Process (Node_Id N)
++ { return Elist2 (N); }
++ INLINE List_Id Actions (Node_Id N)
++ { return List1 (N); }
++ INLINE Node_Id Activation_Chain_Entity (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Acts_As_Spec (Node_Id N)
++ { return Flag4 (N); }
++ INLINE Node_Id Aggregate_Bounds (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Aliased_Present (Node_Id N)
++ { return Flag4 (N); }
++ INLINE Boolean All_Others (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Boolean All_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE List_Id Alternatives (Node_Id N)
++ { return List4 (N); }
++ INLINE Node_Id Ancestor_Part (Node_Id N)
++ { return Node3 (N); }
++ INLINE Node_Id Array_Aggregate (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Assignment_OK (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Node_Id Associated_Node (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id At_End_Proc (Node_Id N)
++ { return Node1 (N); }
++ INLINE Name_Id Attribute_Name (Node_Id N)
++ { return Name2 (N); }
++ INLINE Node_Id Aux_Decls_Node (Node_Id N)
++ { return Node5 (N); }
++ INLINE Boolean Backwards_OK (Node_Id N)
++ { return Flag6 (N); }
++ INLINE Boolean Bad_Is_Detected (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Boolean By_Ref (Node_Id N)
++ { return Flag5 (N); }
++ INLINE Boolean Body_Required (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Node_Id Body_To_Inline (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Box_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Char_Code Char_Literal_Value (Node_Id N)
++ { return Char_Code2 (N); }
++ INLINE Name_Id Chars (Node_Id N)
++ { return Name1 (N); }
++ INLINE Boolean Check_Address_Alignment (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Node_Id Choice_Parameter (Node_Id N)
++ { return Node2 (N); }
++ INLINE List_Id Choices (Node_Id N)
++ { return List1 (N); }
++ INLINE Boolean Compile_Time_Known_Aggregate (Node_Id N)
++ { return Flag18 (N); }
++ INLINE List_Id Component_Associations (Node_Id N)
++ { return List2 (N); }
++ INLINE List_Id Component_Clauses (Node_Id N)
++ { return List3 (N); }
++ INLINE Node_Id Component_Definition (Node_Id N)
++ { return Node4 (N); }
++ INLINE List_Id Component_Items (Node_Id N)
++ { return List3 (N); }
++ INLINE Node_Id Component_List (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Component_Name (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Condition (Node_Id N)
++ { return Node1 (N); }
++ INLINE List_Id Condition_Actions (Node_Id N)
++ { return List3 (N); }
++ INLINE List_Id Config_Pragmas (Node_Id N)
++ { return List4 (N); }
++ INLINE Boolean Constant_Present (Node_Id N)
++ { return Flag17 (N); }
++ INLINE Node_Id Constraint (Node_Id N)
++ { return Node3 (N); }
++ INLINE List_Id Constraints (Node_Id N)
++ { return List1 (N); }
++ INLINE Boolean Context_Installed (Node_Id N)
++ { return Flag13 (N); }
++ INLINE List_Id Context_Items (Node_Id N)
++ { return List1 (N); }
++ INLINE Node_Id Controlling_Argument (Node_Id N)
++ { return Node1 (N); }
++ INLINE Boolean Conversion_OK (Node_Id N)
++ { return Flag14 (N); }
++ INLINE Node_Id Corresponding_Body (Node_Id N)
++ { return Node5 (N); }
++ INLINE Node_Id Corresponding_Generic_Association (Node_Id N)
++ { return Node5 (N); }
++ INLINE Uint Corresponding_Integer_Value (Node_Id N)
++ { return Uint4 (N); }
++ INLINE Node_Id Corresponding_Spec (Node_Id N)
++ { return Node5 (N); }
++ INLINE Node_Id Corresponding_Stub (Node_Id N)
++ { return Node3 (N); }
++ INLINE Entity_Id Dcheck_Function (Node_Id N)
++ { return Node5 (N); }
++ INLINE Node_Id Debug_Statement (Node_Id N)
++ { return Node3 (N); }
++ INLINE List_Id Declarations (Node_Id N)
++ { return List2 (N); }
++ INLINE Node_Id Default_Expression (Node_Id N)
++ { return Node5 (N); }
++ INLINE Node_Id Default_Name (Node_Id N)
++ { return Node2 (N); }
++ INLINE Entity_Id Defining_Identifier (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Defining_Unit_Name (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Delay_Alternative (Node_Id N)
++ { return Node4 (N); }
++ INLINE Boolean Delay_Finalize_Attach (Node_Id N)
++ { return Flag14 (N); }
++ INLINE Node_Id Delay_Statement (Node_Id N)
++ { return Node2 (N); }
++ INLINE Node_Id Delta_Expression (Node_Id N)
++ { return Node3 (N); }
++ INLINE Node_Id Digits_Expression (Node_Id N)
++ { return Node2 (N); }
++ INLINE Boolean Discr_Check_Funcs_Built (Node_Id N)
++ { return Flag11 (N); }
++ INLINE List_Id Discrete_Choices (Node_Id N)
++ { return List4 (N); }
++ INLINE Node_Id Discrete_Range (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Discrete_Subtype_Definition (Node_Id N)
++ { return Node4 (N); }
++ INLINE List_Id Discrete_Subtype_Definitions (Node_Id N)
++ { return List2 (N); }
++ INLINE List_Id Discriminant_Specifications (Node_Id N)
++ { return List4 (N); }
++ INLINE Node_Id Discriminant_Type (Node_Id N)
++ { return Node5 (N); }
++ INLINE Boolean Do_Accessibility_Check (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Do_Discriminant_Check (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Do_Division_Check (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Do_Length_Check (Node_Id N)
++ { return Flag4 (N); }
++ INLINE Boolean Do_Overflow_Check (Node_Id N)
++ { return Flag17 (N); }
++ INLINE Boolean Do_Range_Check (Node_Id N)
++ { return Flag9 (N); }
++ INLINE Boolean Do_Storage_Check (Node_Id N)
++ { return Flag17 (N); }
++ INLINE Boolean Do_Tag_Check (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Elaborate_All_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Boolean Elaborate_Present (Node_Id N)
++ { return Flag4 (N); }
++ INLINE Node_Id Elaboration_Boolean (Node_Id N)
++ { return Node2 (N); }
++ INLINE List_Id Else_Actions (Node_Id N)
++ { return List3 (N); }
++ INLINE List_Id Else_Statements (Node_Id N)
++ { return List4 (N); }
++ INLINE List_Id Elsif_Parts (Node_Id N)
++ { return List3 (N); }
++ INLINE Node_Id Enclosing_Variant (Node_Id N)
++ { return Node2 (N); }
++ INLINE Node_Id End_Label (Node_Id N)
++ { return Node4 (N); }
++ INLINE Uint End_Span (Node_Id N)
++ { return Uint5 (N); }
++ INLINE Node_Id Entity (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Entity_Or_Associated_Node (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Entry_Body_Formal_Part (Node_Id N)
++ { return Node5 (N); }
++ INLINE Node_Id Entry_Call_Alternative (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Entry_Call_Statement (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Entry_Direct_Name (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Entry_Index (Node_Id N)
++ { return Node5 (N); }
++ INLINE Node_Id Entry_Index_Specification (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Etype (Node_Id N)
++ { return Node5 (N); }
++ INLINE List_Id Exception_Choices (Node_Id N)
++ { return List4 (N); }
++ INLINE List_Id Exception_Handlers (Node_Id N)
++ { return List5 (N); }
++ INLINE Boolean Exception_Junk (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Node_Id Explicit_Actual_Parameter (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Expansion_Delayed (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Node_Id Explicit_Generic_Actual_Parameter (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Expression (Node_Id N)
++ { return Node3 (N); }
++ INLINE List_Id Expressions (Node_Id N)
++ { return List1 (N); }
++ INLINE Node_Id First_Bit (Node_Id N)
++ { return Node3 (N); }
++ INLINE Entity_Id First_Inlined_Subprogram (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean First_Name (Node_Id N)
++ { return Flag5 (N); }
++ INLINE Node_Id First_Named_Actual (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id First_Real_Statement (Node_Id N)
++ { return Node2 (N); }
++ INLINE Entity_Id First_Subtype_Link (Node_Id N)
++ { return Node5 (N); }
++ INLINE Boolean Float_Truncate (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Node_Id Formal_Type_Definition (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Forwards_OK (Node_Id N)
++ { return Flag5 (N); }
++ INLINE Boolean From_At_Mod (Node_Id N)
++ { return Flag4 (N); }
++ INLINE List_Id Generic_Associations (Node_Id N)
++ { return List3 (N); }
++ INLINE List_Id Generic_Formal_Declarations (Node_Id N)
++ { return List2 (N); }
++ INLINE Node_Id Generic_Parent (Node_Id N)
++ { return Node5 (N); }
++ INLINE Node_Id Generic_Parent_Type (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Handled_Statement_Sequence (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Handler_List_Entry (Node_Id N)
++ { return Node2 (N); }
++ INLINE Boolean Has_Created_Identifier (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Boolean Has_Dynamic_Length_Check (Node_Id N)
++ { return Flag10 (N); }
++ INLINE Boolean Has_Dynamic_Range_Check (Node_Id N)
++ { return Flag12 (N); }
++ INLINE Boolean Has_No_Elaboration_Code (Node_Id N)
++ { return Flag17 (N); }
++ INLINE Boolean Has_Priority_Pragma (Node_Id N)
++ { return Flag6 (N); }
++ INLINE Boolean Has_Private_View (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Boolean Has_Storage_Size_Pragma (Node_Id N)
++ { return Flag5 (N); }
++ INLINE Boolean Has_Task_Info_Pragma (Node_Id N)
++ { return Flag7 (N); }
++ INLINE Boolean Has_Task_Name_Pragma (Node_Id N)
++ { return Flag8 (N); }
++ INLINE Boolean Has_Wide_Character (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Elist_Id Hidden_By_Use_Clause (Node_Id N)
++ { return Elist4 (N); }
++ INLINE Node_Id High_Bound (Node_Id N)
++ { return Node2 (N); }
++ INLINE Node_Id Identifier (Node_Id N)
++ { return Node1 (N); }
++ INLINE Boolean Implicit_With (Node_Id N)
++ { return Flag16 (N); }
++ INLINE Boolean In_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Boolean Includes_Infinities (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Node_Id Instance_Spec (Node_Id N)
++ { return Node5 (N); }
++ INLINE Uint Intval (Node_Id N)
++ { return Uint3 (N); }
++ INLINE Boolean Is_Asynchronous_Call_Block (Node_Id N)
++ { return Flag7 (N); }
++ INLINE Boolean Is_Component_Left_Opnd (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Is_Component_Right_Opnd (Node_Id N)
++ { return Flag14 (N); }
++ INLINE Boolean Is_Controlling_Actual (Node_Id N)
++ { return Flag16 (N); }
++ INLINE Boolean Is_In_Discriminant_Check (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Boolean Is_Machine_Number (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Boolean Is_Null_Loop (Node_Id N)
++ { return Flag16 (N); }
++ INLINE Boolean Is_Overloaded (Node_Id N)
++ { return Flag5 (N); }
++ INLINE Boolean Is_Power_Of_2_For_Shift (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Is_Protected_Subprogram_Body (Node_Id N)
++ { return Flag7 (N); }
++ INLINE Boolean Is_Static_Expression (Node_Id N)
++ { return Flag6 (N); }
++ INLINE Boolean Is_Subprogram_Descriptor (Node_Id N)
++ { return Flag16 (N); }
++ INLINE Boolean Is_Task_Allocation_Block (Node_Id N)
++ { return Flag6 (N); }
++ INLINE Boolean Is_Task_Master (Node_Id N)
++ { return Flag5 (N); }
++ INLINE Node_Id Iteration_Scheme (Node_Id N)
++ { return Node2 (N); }
++ INLINE Entity_Id Itype (Node_Id N)
++ { return Node1 (N); }
++ INLINE Boolean Kill_Range_Check (Node_Id N)
++ { return Flag11 (N); }
++ INLINE Node_Id Label_Construct (Node_Id N)
++ { return Node2 (N); }
++ INLINE Node_Id Left_Opnd (Node_Id N)
++ { return Node2 (N); }
++ INLINE Node_Id Last_Bit (Node_Id N)
++ { return Node4 (N); }
++ INLINE Boolean Last_Name (Node_Id N)
++ { return Flag6 (N); }
++ INLINE Node_Id Library_Unit (Node_Id N)
++ { return Node4 (N); }
++ INLINE Boolean Limited_View_Installed (Node_Id N)
++ { return Flag18 (N); }
++ INLINE Boolean Limited_Present (Node_Id N)
++ { return Flag17 (N); }
++ INLINE List_Id Literals (Node_Id N)
++ { return List1 (N); }
++ INLINE List_Id Loop_Actions (Node_Id N)
++ { return List2 (N); }
++ INLINE Node_Id Loop_Parameter_Specification (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Low_Bound (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Mod_Clause (Node_Id N)
++ { return Node2 (N); }
++ INLINE Boolean More_Ids (Node_Id N)
++ { return Flag5 (N); }
++ INLINE Boolean Must_Be_Byte_Aligned (Node_Id N)
++ { return Flag14 (N); }
++ INLINE Boolean Must_Not_Freeze (Node_Id N)
++ { return Flag8 (N); }
++ INLINE Node_Id Name (Node_Id N)
++ { return Node2 (N); }
++ INLINE List_Id Names (Node_Id N)
++ { return List2 (N); }
++ INLINE Node_Id Next_Entity (Node_Id N)
++ { return Node2 (N); }
++ INLINE Node_Id Next_Named_Actual (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Next_Rep_Item (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Next_Use_Clause (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean No_Ctrl_Actions (Node_Id N)
++ { return Flag7 (N); }
++ INLINE Boolean No_Elaboration_Check (Node_Id N)
++ { return Flag14 (N); }
++ INLINE Boolean No_Entities_Ref_In_Spec (Node_Id N)
++ { return Flag8 (N); }
++ INLINE Boolean No_Initialization (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean No_Truncation (Node_Id N)
++ { return Flag17 (N); }
++ INLINE Boolean Null_Present (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Null_Record_Present (Node_Id N)
++ { return Flag17 (N); }
++ INLINE Node_Id Object_Definition (Node_Id N)
++ { return Node4 (N); }
++ INLINE Boolean OK_For_Stream (Node_Id N)
++ { return Flag4 (N); }
++ INLINE Node_Id Original_Discriminant (Node_Id N)
++ { return Node2 (N); }
++ INLINE Entity_Id Original_Entity (Node_Id N)
++ { return Node2 (N); }
++ INLINE List_Id Others_Discrete_Choices (Node_Id N)
++ { return List1 (N); }
++ INLINE Boolean Out_Present (Node_Id N)
++ { return Flag17 (N); }
++ INLINE List_Id Parameter_Associations (Node_Id N)
++ { return List3 (N); }
++ INLINE Boolean Parameter_List_Truncated (Node_Id N)
++ { return Flag17 (N); }
++ INLINE List_Id Parameter_Specifications (Node_Id N)
++ { return List3 (N); }
++ INLINE Node_Id Parameter_Type (Node_Id N)
++ { return Node2 (N); }
++ INLINE Node_Id Parent_Spec (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Position (Node_Id N)
++ { return Node2 (N); }
++ INLINE List_Id Pragma_Argument_Associations (Node_Id N)
++ { return List2 (N); }
++ INLINE List_Id Pragmas_After (Node_Id N)
++ { return List5 (N); }
++ INLINE List_Id Pragmas_Before (Node_Id N)
++ { return List4 (N); }
++ INLINE Node_Id Prefix (Node_Id N)
++ { return Node3 (N); }
++ INLINE Uint Present_Expr (Node_Id N)
++ { return Uint3 (N); }
++ INLINE Boolean Prev_Ids (Node_Id N)
++ { return Flag6 (N); }
++ INLINE Boolean Print_In_Hex (Node_Id N)
++ { return Flag13 (N); }
++ INLINE List_Id Private_Declarations (Node_Id N)
++ { return List3 (N); }
++ INLINE Boolean Private_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Node_Id Procedure_To_Call (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Proper_Body (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Protected_Definition (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Protected_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Boolean Raises_Constraint_Error (Node_Id N)
++ { return Flag7 (N); }
++ INLINE Node_Id Range_Constraint (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Range_Expression (Node_Id N)
++ { return Node4 (N); }
++ INLINE Node_Id Real_Range_Specification (Node_Id N)
++ { return Node4 (N); }
++ INLINE Ureal Realval (Node_Id N)
++ { return Ureal3 (N); }
++ INLINE Uint Reason (Node_Id N)
++ { return Uint3 (N); }
++ INLINE Node_Id Record_Extension_Part (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Redundant_Use (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Node_Id Return_Type (Node_Id N)
++ { return Node2 (N); }
++ INLINE Boolean Reverse_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Node_Id Right_Opnd (Node_Id N)
++ { return Node3 (N); }
++ INLINE Boolean Rounded_Result (Node_Id N)
++ { return Flag18 (N); }
++ INLINE Node_Id Scope (Node_Id N)
++ { return Node3 (N); }
++ INLINE List_Id Select_Alternatives (Node_Id N)
++ { return List1 (N); }
++ INLINE Node_Id Selector_Name (Node_Id N)
++ { return Node2 (N); }
++ INLINE List_Id Selector_Names (Node_Id N)
++ { return List1 (N); }
++ INLINE Boolean Shift_Count_OK (Node_Id N)
++ { return Flag4 (N); }
++ INLINE Entity_Id Source_Type (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Specification (Node_Id N)
++ { return Node1 (N); }
++ INLINE List_Id Statements (Node_Id N)
++ { return List3 (N); }
++ INLINE Boolean Static_Processing_OK (Node_Id N)
++ { return Flag4 (N); }
++ INLINE Node_Id Storage_Pool (Node_Id N)
++ { return Node1 (N); }
++ INLINE String_Id Strval (Node_Id N)
++ { return Str3 (N); }
++ INLINE Node_Id Subtype_Indication (Node_Id N)
++ { return Node5 (N); }
++ INLINE Node_Id Subtype_Mark (Node_Id N)
++ { return Node4 (N); }
++ INLINE List_Id Subtype_Marks (Node_Id N)
++ { return List2 (N); }
++ INLINE Boolean Tagged_Present (Node_Id N)
++ { return Flag15 (N); }
++ INLINE Entity_Id Target_Type (Node_Id N)
++ { return Node2 (N); }
++ INLINE Entity_Id Task_Body_Procedure (Node_Id N)
++ { return Node2 (N); }
++ INLINE Node_Id Task_Definition (Node_Id N)
++ { return Node3 (N); }
++ INLINE List_Id Then_Actions (Node_Id N)
++ { return List2 (N); }
++ INLINE List_Id Then_Statements (Node_Id N)
++ { return List2 (N); }
++ INLINE Boolean Treat_Fixed_As_Integer (Node_Id N)
++ { return Flag14 (N); }
++ INLINE Node_Id Triggering_Alternative (Node_Id N)
++ { return Node1 (N); }
++ INLINE Node_Id Triggering_Statement (Node_Id N)
++ { return Node1 (N); }
++ INLINE Elist_Id TSS_Elist (Node_Id N)
++ { return Elist3 (N); }
++ INLINE Node_Id Type_Definition (Node_Id N)
++ { return Node3 (N); }
++ INLINE Node_Id Unit (Node_Id N)
++ { return Node2 (N); }
++ INLINE Boolean Unknown_Discriminants_Present (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Unreferenced_In_Spec (Node_Id N)
++ { return Flag7 (N); }
++ INLINE Node_Id Variant_Part (Node_Id N)
++ { return Node4 (N); }
++ INLINE List_Id Variants (Node_Id N)
++ { return List1 (N); }
++ INLINE List_Id Visible_Declarations (Node_Id N)
++ { return List2 (N); }
++ INLINE Boolean Was_Originally_Stub (Node_Id N)
++ { return Flag13 (N); }
++ INLINE Boolean Zero_Cost_Handling (Node_Id N)
++ { return Flag5 (N); }
++
+--- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/einfo.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/einfo.h 2004-06-02 00:54:19.000000000 +0200
+@@ -0,0 +1,1814 @@
++/*--------------------------------------------------------------------------*/
++/* */
++/* GNAT COMPILER COMPONENTS */
++/* */
++/* E I N F O */
++/* */
++/* C Header File */
++/* */
++/* Copyright (C) 1992-2003 Free Software Foundation, Inc. */
++/* */
++/* GNAT is free software; you can redistribute it and/or modify it under */
++/* terms of the GNU General Public License as published by the Free Soft- */
++/* ware Foundation; either version 2, or (at your option) any later ver- */
++/* sion. GNAT is distributed in the hope that it will be useful, but WITH- */
++/* OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY */
++/* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License */
++/* for more details. You should have received a copy of the GNU General */
++/* Public License distributed with GNAT; see file COPYING. If not, write */
++/* to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, */
++/* MA 02111-1307, USA. */
++/* */
++/* As a special exception, if other files instantiate generics from this */
++/* unit, or you link this unit with other files to produce an executable, */
++/* this unit does not by itself cause the resulting executable to be */
++/* covered by the GNU General Public License. This exception does not */
++/* however invalidate any other reasons why the executable file might be */
++/* covered by the GNU Public License. */
++/* */
++/* GNAT was originally developed by the GNAT team at New York University. */
++/* Extensive contributions were provided by Ada Core Technologies Inc. */
++/* */
++/*--------------------------------------------------------------------------*/
++
++ #define E_Void 0
++ #define E_Variable 1
++ #define E_Component 2
++ #define E_Constant 3
++ #define E_Discriminant 4
++ #define E_Loop_Parameter 5
++ #define E_In_Parameter 6
++ #define E_Out_Parameter 7
++ #define E_In_Out_Parameter 8
++ #define E_Generic_In_Out_Parameter 9
++ #define E_Generic_In_Parameter 10
++ #define E_Named_Integer 11
++ #define E_Named_Real 12
++ #define E_Enumeration_Type 13
++ #define E_Enumeration_Subtype 14
++ #define E_Signed_Integer_Type 15
++ #define E_Signed_Integer_Subtype 16
++ #define E_Modular_Integer_Type 17
++ #define E_Modular_Integer_Subtype 18
++ #define E_Ordinary_Fixed_Point_Type 19
++ #define E_Ordinary_Fixed_Point_Subtype 20
++ #define E_Decimal_Fixed_Point_Type 21
++ #define E_Decimal_Fixed_Point_Subtype 22
++ #define E_Floating_Point_Type 23
++ #define E_Floating_Point_Subtype 24
++ #define E_Access_Type 25
++ #define E_Access_Subtype 26
++ #define E_Access_Attribute_Type 27
++ #define E_Allocator_Type 28
++ #define E_General_Access_Type 29
++ #define E_Access_Subprogram_Type 30
++ #define E_Access_Protected_Subprogram_Type 31
++ #define E_Anonymous_Access_Type 32
++ #define E_Array_Type 33
++ #define E_Array_Subtype 34
++ #define E_String_Type 35
++ #define E_String_Subtype 36
++ #define E_String_Literal_Subtype 37
++ #define E_Class_Wide_Type 38
++ #define E_Class_Wide_Subtype 39
++ #define E_Record_Type 40
++ #define E_Record_Subtype 41
++ #define E_Record_Type_With_Private 42
++ #define E_Record_Subtype_With_Private 43
++ #define E_Private_Type 44
++ #define E_Private_Subtype 45
++ #define E_Limited_Private_Type 46
++ #define E_Limited_Private_Subtype 47
++ #define E_Incomplete_Type 48
++ #define E_Task_Type 49
++ #define E_Task_Subtype 50
++ #define E_Protected_Type 51
++ #define E_Protected_Subtype 52
++ #define E_Exception_Type 53
++ #define E_Subprogram_Type 54
++ #define E_Enumeration_Literal 55
++ #define E_Function 56
++ #define E_Operator 57
++ #define E_Procedure 58
++ #define E_Entry 59
++ #define E_Entry_Family 60
++ #define E_Block 61
++ #define E_Entry_Index_Parameter 62
++ #define E_Exception 63
++ #define E_Generic_Function 64
++ #define E_Generic_Procedure 65
++ #define E_Generic_Package 66
++ #define E_Label 67
++ #define E_Loop 68
++ #define E_Package 69
++ #define E_Package_Body 70
++ #define E_Protected_Object 71
++ #define E_Protected_Body 72
++ #define E_Task_Body 73
++ #define E_Subprogram_Body 74
++
++ SUBTYPE (Access_Kind, Entity_Kind,
++ E_Access_Type, E_Anonymous_Access_Type)
++
++ SUBTYPE (Array_Kind, Entity_Kind,
++ E_Array_Type, E_String_Literal_Subtype)
++
++ SUBTYPE (Class_Wide_Kind, Entity_Kind,
++ E_Class_Wide_Type, E_Class_Wide_Subtype)
++
++ SUBTYPE (Composite_Kind, Entity_Kind,
++ E_Array_Type, E_Protected_Subtype)
++
++ SUBTYPE (Concurrent_Kind, Entity_Kind,
++ E_Task_Type, E_Protected_Subtype)
++
++ SUBTYPE (Concurrent_Body_Kind, Entity_Kind,
++ E_Protected_Body, E_Task_Body)
++
++ SUBTYPE (Decimal_Fixed_Point_Kind, Entity_Kind,
++ E_Decimal_Fixed_Point_Type, E_Decimal_Fixed_Point_Subtype)
++
++ SUBTYPE (Digits_Kind, Entity_Kind,
++ E_Decimal_Fixed_Point_Type, E_Floating_Point_Subtype)
++
++ SUBTYPE (Discrete_Kind, Entity_Kind,
++ E_Enumeration_Type, E_Modular_Integer_Subtype)
++
++ SUBTYPE (Discrete_Or_Fixed_Point_Kind, Entity_Kind,
++ E_Enumeration_Type, E_Decimal_Fixed_Point_Subtype)
++
++ SUBTYPE (Elementary_Kind, Entity_Kind,
++ E_Enumeration_Type, E_Anonymous_Access_Type)
++
++ SUBTYPE (Enumeration_Kind, Entity_Kind,
++ E_Enumeration_Type, E_Enumeration_Subtype)
++
++ SUBTYPE (Entry_Kind, Entity_Kind,
++ E_Entry, E_Entry_Family)
++
++ SUBTYPE (Fixed_Point_Kind, Entity_Kind,
++ E_Ordinary_Fixed_Point_Type, E_Decimal_Fixed_Point_Subtype)
++
++ SUBTYPE (Float_Kind, Entity_Kind,
++ E_Floating_Point_Type, E_Floating_Point_Subtype)
++
++ SUBTYPE (Formal_Kind, Entity_Kind,
++ E_In_Parameter, E_In_Out_Parameter)
++
++ SUBTYPE (Generic_Subprogram_Kind, Entity_Kind,
++ E_Generic_Function, E_Generic_Procedure)
++
++ SUBTYPE (Generic_Unit_Kind, Entity_Kind,
++ E_Generic_Function, E_Generic_Package)
++
++ SUBTYPE (Incomplete_Or_Private_Kind, Entity_Kind,
++ E_Record_Type_With_Private, E_Incomplete_Type)
++
++ SUBTYPE (Integer_Kind, Entity_Kind,
++ E_Signed_Integer_Type, E_Modular_Integer_Subtype)
++
++ SUBTYPE (Modular_Integer_Kind, Entity_Kind,
++ E_Modular_Integer_Type, E_Modular_Integer_Subtype)
++
++ SUBTYPE (Named_Kind, Entity_Kind,
++ E_Named_Integer, E_Named_Real)
++
++ SUBTYPE (Numeric_Kind, Entity_Kind,
++ E_Signed_Integer_Type, E_Floating_Point_Subtype)
++
++ SUBTYPE (Object_Kind, Entity_Kind,
++ E_Variable, E_Generic_In_Parameter)
++
++ SUBTYPE (Ordinary_Fixed_Point_Kind, Entity_Kind,
++ E_Ordinary_Fixed_Point_Type, E_Ordinary_Fixed_Point_Subtype)
++
++ SUBTYPE (Overloadable_Kind, Entity_Kind,
++ E_Enumeration_Literal, E_Entry)
++
++ SUBTYPE (Private_Kind, Entity_Kind,
++ E_Record_Type_With_Private, E_Limited_Private_Subtype)
++
++ SUBTYPE (Protected_Kind, Entity_Kind,
++ E_Protected_Type, E_Protected_Subtype)
++
++ SUBTYPE (Real_Kind, Entity_Kind,
++ E_Ordinary_Fixed_Point_Type, E_Floating_Point_Subtype)
++
++ SUBTYPE (Record_Kind, Entity_Kind,
++ E_Class_Wide_Type, E_Record_Subtype_With_Private)
++
++ SUBTYPE (Scalar_Kind, Entity_Kind,
++ E_Enumeration_Type, E_Floating_Point_Subtype)
++
++ SUBTYPE (String_Kind, Entity_Kind,
++ E_String_Type, E_String_Literal_Subtype)
++
++ SUBTYPE (Subprogram_Kind, Entity_Kind,
++ E_Function, E_Procedure)
++
++ SUBTYPE (Signed_Integer_Kind, Entity_Kind,
++ E_Signed_Integer_Type, E_Signed_Integer_Subtype)
++
++ SUBTYPE (Task_Kind, Entity_Kind,
++ E_Task_Type, E_Task_Subtype)
++
++ SUBTYPE (Type_Kind, Entity_Kind,
++ E_Enumeration_Type, E_Subprogram_Type)
++
++ typedef char Component_Alignment_Kind;
++ #define Calign_Default 0
++ #define Calign_Component_Size 1
++ #define Calign_Component_Size_4 2
++ #define Calign_Storage_Unit 3
++
++ typedef Boolean B;
++ typedef Component_Alignment_Kind C;
++ typedef Entity_Id E;
++ typedef Mechanism_Type M;
++ typedef Node_Id N;
++ typedef Uint U;
++ typedef Ureal R;
++ typedef Elist_Id L;
++ typedef List_Id S;
++
++ INLINE L Accept_Address (E Id);
++ INLINE E Access_Disp_Table (E Id);
++ INLINE E Actual_Subtype (E Id);
++ INLINE B Address_Taken (E Id);
++ INLINE E Alias (E Id);
++ INLINE U Alignment (E Id);
++ INLINE E Associated_Final_Chain (E Id);
++ INLINE E Associated_Formal_Package (E Id);
++ INLINE N Associated_Node_For_Itype (E Id);
++ INLINE E Associated_Storage_Pool (E Id);
++ INLINE N Barrier_Function (E Id);
++ INLINE N Block_Node (E Id);
++ INLINE E Body_Entity (E Id);
++ INLINE B Body_Needed_For_SAL (E Id);
++ INLINE E CR_Discriminant (E Id);
++ INLINE B C_Pass_By_Copy (E Id);
++ INLINE B Can_Never_Be_Null (E Id);
++ INLINE B Checks_May_Be_Suppressed (E Id);
++ INLINE E Class_Wide_Type (E Id);
++ INLINE E Cloned_Subtype (E Id);
++
++ #define Component_Alignment einfo__component_alignment
++ C Component_Alignment (E Id);
++
++ INLINE N Component_Clause (E Id);
++ INLINE U Component_Bit_Offset (E Id);
++ INLINE U Component_Size (E Id);
++ INLINE E Component_Type (E Id);
++ INLINE E Corresponding_Concurrent_Type (E Id);
++ INLINE E Corresponding_Discriminant (E Id);
++ INLINE E Corresponding_Equality (E Id);
++ INLINE E Corresponding_Record_Type (E Id);
++ INLINE E Corresponding_Remote_Type (E Id);
++ INLINE N Current_Value (E Id);
++ INLINE B Debug_Info_Off (E Id);
++ INLINE E Debug_Renaming_Link (E Id);
++ INLINE E DTC_Entity (E Id);
++ INLINE U DT_Entry_Count (E Id);
++ INLINE U DT_Position (E Id);
++ INLINE E Default_Expr_Function (E Id);
++ INLINE B Default_Expressions_Processed (E Id);
++ INLINE N Default_Value (E Id);
++ INLINE B Delay_Cleanups (E Id);
++ INLINE B Delay_Subprogram_Descriptors (E Id);
++ INLINE R Delta_Value (E Id);
++ INLINE L Dependent_Instances (E Id);
++ INLINE B Depends_On_Private (E Id);
++ INLINE U Digits_Value (E Id);
++ INLINE E Directly_Designated_Type (E Id);
++ INLINE B Discard_Names (E Id);
++ INLINE E Discriminal (E Id);
++ INLINE E Discriminal_Link (E Id);
++ INLINE E Discriminant_Checking_Func (E Id);
++ INLINE L Discriminant_Constraint (E Id);
++ INLINE N Discriminant_Default_Value (E Id);
++ INLINE U Discriminant_Number (E Id);
++ INLINE B Elaborate_All_Desirable (E Id);
++ INLINE E Elaboration_Entity (E Id);
++ INLINE B Elaboration_Entity_Required (E Id);
++ INLINE E Enclosing_Scope (E Id);
++ INLINE B Entry_Accepted (E Id);
++ INLINE E Entry_Bodies_Array (E Id);
++ INLINE E Entry_Cancel_Parameter (E Id);
++ INLINE E Entry_Component (E Id);
++ INLINE E Entry_Formal (E Id);
++ INLINE E Entry_Index_Constant (E Id);
++ INLINE E Entry_Index_Type (E Id);
++ INLINE E Entry_Parameters_Type (E Id);
++ INLINE E Enum_Pos_To_Rep (E Id);
++ INLINE U Enumeration_Pos (E Id);
++ INLINE U Enumeration_Rep (E Id);
++ INLINE N Enumeration_Rep_Expr (E Id);
++ INLINE E Equivalent_Type (E Id);
++ INLINE U Esize (E Id);
++ INLINE U Exception_Code (E Id);
++ INLINE E Extra_Accessibility (E Id);
++ INLINE E Extra_Constrained (E Id);
++ INLINE E Extra_Formal (E Id);
++ INLINE E Finalization_Chain_Entity (E Id);
++
++ #define Finalize_Storage_Only einfo__finalize_storage_only
++ B Finalize_Storage_Only (E Id);
++
++ INLINE E First_Entity (E Id);
++ INLINE N First_Index (E Id);
++ INLINE E First_Literal (E Id);
++ INLINE E First_Optional_Parameter (E Id);
++ INLINE E First_Private_Entity (E Id);
++ INLINE N First_Rep_Item (E Id);
++ INLINE N Freeze_Node (E Id);
++ INLINE B From_With_Type (E Id);
++ INLINE E Full_View (E Id);
++ INLINE B Function_Returns_With_DSP (E Id);
++ INLINE E Generic_Homonym (E Id);
++ INLINE L Generic_Renamings (E Id);
++ INLINE S Handler_Records (E Id);
++ INLINE B Has_Aliased_Components (E Id);
++ INLINE B Has_Alignment_Clause (E Id);
++ INLINE B Has_All_Calls_Remote (E Id);
++ INLINE B Has_Atomic_Components (E Id);
++ INLINE B Has_Biased_Representation (E Id);
++ INLINE B Has_Completion (E Id);
++ INLINE B Has_Completion_In_Body (E Id);
++ INLINE B Has_Complex_Representation (E Id);
++ INLINE B Has_Component_Size_Clause (E Id);
++ INLINE B Has_Contiguous_Rep (E Id);
++ INLINE B Has_Controlled_Component (E Id);
++ INLINE B Has_Controlling_Result (E Id);
++ INLINE B Has_Convention_Pragma (E Id);
++ INLINE B Has_Delayed_Freeze (E Id);
++ INLINE B Has_Discriminants (E Id);
++ INLINE B Has_Enumeration_Rep_Clause (E Id);
++ INLINE B Has_Exit (E Id);
++ INLINE B Has_External_Tag_Rep_Clause (E Id);
++ INLINE B Has_Fully_Qualified_Name (E Id);
++ INLINE B Has_Gigi_Rep_Item (E Id);
++ INLINE B Has_Homonym (E Id);
++
++ #define Has_Interrupt_Handler einfo__has_interrupt_handler
++ B Has_Interrupt_Handler (E Id);
++
++ INLINE B Has_Machine_Radix_Clause (E Id);
++ INLINE B Has_Master_Entity (E Id);
++ INLINE B Has_Missing_Return (E Id);
++ INLINE B Has_Nested_Block_With_Handler (E Id);
++ INLINE B Has_Forward_Instantiation (E Id);
++ INLINE B Has_Non_Standard_Rep (E Id);
++ INLINE B Has_Object_Size_Clause (E Id);
++ INLINE B Has_Per_Object_Constraint (E Id);
++ INLINE B Has_Pragma_Controlled (E Id);
++ INLINE B Has_Pragma_Elaborate_Body (E Id);
++ INLINE B Has_Pragma_Inline (E Id);
++ INLINE B Has_Pragma_Pack (E Id);
++ INLINE B Has_Pragma_Pure_Function (E Id);
++ INLINE B Has_Pragma_Unreferenced (E Id);
++ INLINE B Has_Primitive_Operations (E Id);
++ INLINE B Has_Qualified_Name (E Id);
++ INLINE B Has_Record_Rep_Clause (E Id);
++ INLINE B Has_Recursive_Call (E Id);
++ INLINE B Has_Size_Clause (E Id);
++ INLINE B Has_Small_Clause (E Id);
++ INLINE B Has_Specified_Layout (E Id);
++ INLINE B Has_Storage_Size_Clause (E Id);
++ INLINE B Has_Subprogram_Descriptor (E Id);
++ INLINE B Has_Task (E Id);
++ INLINE B Has_Unchecked_Union (E Id);
++ INLINE B Has_Unknown_Discriminants (E Id);
++ INLINE B Has_Volatile_Components (E Id);
++ INLINE B Has_Xref_Entry (E Id);
++ INLINE E Hiding_Loop_Variable (E Id);
++ INLINE E Homonym (E Id);
++ INLINE B In_Package_Body (E Id);
++ INLINE B In_Private_Part (E Id);
++ INLINE B In_Use (E Id);
++ INLINE L Inner_Instances (E Id);
++ INLINE N Interface_Name (E Id);
++ INLINE B Is_AST_Entry (E Id);
++ INLINE B Is_Abstract (E Id);
++ INLINE B Is_Access_Constant (E Id);
++ INLINE B Is_Aliased (E Id);
++ INLINE B Is_Asynchronous (E Id);
++ INLINE B Is_Atomic (E Id);
++ INLINE B Is_Bit_Packed_Array (E Id);
++ INLINE B Is_CPP_Class (E Id);
++ INLINE B Is_Called (E Id);
++ INLINE B Is_Character_Type (E Id);
++ INLINE B Is_Child_Unit (E Id);
++ INLINE B Is_Class_Wide_Equivalent_Type (E Id);
++ INLINE B Is_Compilation_Unit (E Id);
++ INLINE B Is_Completely_Hidden (E Id);
++ INLINE B Is_Constr_Subt_For_UN_Aliased (E Id);
++ INLINE B Is_Constr_Subt_For_U_Nominal (E Id);
++ INLINE B Is_Constrained (E Id);
++ INLINE B Is_Constructor (E Id);
++ INLINE B Is_Controlled (E Id);
++ INLINE B Is_Controlling_Formal (E Id);
++ INLINE B Is_Discrim_SO_Function (E Id);
++ INLINE B Is_Dispatching_Operation (E Id);
++ INLINE B Is_Eliminated (E Id);
++ INLINE B Is_Entry_Formal (E Id);
++ INLINE B Is_Exported (E Id);
++ INLINE B Is_First_Subtype (E Id);
++ INLINE B Is_For_Access_Subtype (E Id);
++ INLINE B Is_Frozen (E Id);
++ INLINE B Is_Generic_Instance (E Id);
++ INLINE B Is_Hidden (E Id);
++ INLINE B Is_Hidden_Open_Scope (E Id);
++ INLINE B Is_Immediately_Visible (E Id);
++ INLINE B Is_Imported (E Id);
++ INLINE B Is_Inlined (E Id);
++ INLINE B Is_Instantiated (E Id);
++ INLINE B Is_Internal (E Id);
++ INLINE B Is_Interrupt_Handler (E Id);
++ INLINE B Is_Intrinsic_Subprogram (E Id);
++ INLINE B Is_Itype (E Id);
++ INLINE B Is_Known_Non_Null (E Id);
++ INLINE B Is_Known_Valid (E Id);
++ INLINE B Is_Limited_Composite (E Id);
++ INLINE B Is_Machine_Code_Subprogram (E Id);
++ INLINE B Is_Non_Static_Subtype (E Id);
++ INLINE B Is_Null_Init_Proc (E Id);
++ INLINE B Is_Optional_Parameter (E Id);
++ INLINE B Is_Package_Body_Entity (E Id);
++ INLINE B Is_Packed (E Id);
++ INLINE B Is_Packed_Array_Type (E Id);
++ INLINE B Is_Potentially_Use_Visible (E Id);
++ INLINE B Is_Preelaborated (E Id);
++ INLINE B Is_Private_Composite (E Id);
++ INLINE B Is_Private_Descendant (E Id);
++ INLINE B Is_Psected (E Id);
++ INLINE B Is_Public (E Id);
++ INLINE B Is_Pure (E Id);
++ INLINE B Is_Remote_Call_Interface (E Id);
++ INLINE B Is_Remote_Types (E Id);
++ INLINE B Is_Renaming_Of_Object (E Id);
++ INLINE B Is_Shared_Passive (E Id);
++ INLINE B Is_Statically_Allocated (E Id);
++ INLINE B Is_Tag (E Id);
++ INLINE B Is_Tagged_Type (E Id);
++ INLINE B Is_Thread_Body (E Id);
++ INLINE B Is_True_Constant (E Id);
++ INLINE B Is_Unchecked_Union (E Id);
++ INLINE B Is_Unsigned_Type (E Id);
++ INLINE B Is_VMS_Exception (E Id);
++ INLINE B Is_Valued_Procedure (E Id);
++ INLINE B Is_Visible_Child_Unit (E Id);
++
++ #define Is_Volatile einfo__is_volatile
++ B Is_Volatile (E Id);
++
++ #define Is_Wrapper_Package einfo__is_wrapper_package
++ B Is_Wrapper_Package (E Id);
++
++ INLINE B Kill_Elaboration_Checks (E Id);
++ INLINE B Kill_Range_Checks (E Id);
++ INLINE B Kill_Tag_Checks (E Id);
++ INLINE E Last_Entity (E Id);
++ INLINE L Limited_Views (E Id);
++ INLINE E Lit_Indexes (E Id);
++ INLINE E Lit_Strings (E Id);
++ INLINE B Machine_Radix_10 (E Id);
++ INLINE E Master_Id (E Id);
++ INLINE B Materialize_Entity (E Id);
++ INLINE M Mechanism (E Id);
++ INLINE U Modulus (E Id);
++ INLINE B Needs_Debug_Info (E Id);
++ INLINE B Needs_No_Actuals (E Id);
++ INLINE B Never_Set_In_Source (E Id);
++ INLINE E Next_Inlined_Subprogram (E Id);
++ INLINE B No_Pool_Assigned (E Id);
++ INLINE B No_Return (E Id);
++ INLINE B Non_Binary_Modulus (E Id);
++ INLINE E Non_Limited_View (E Id);
++ INLINE B Nonzero_Is_True (E Id);
++ INLINE U Normalized_First_Bit (E Id);
++ INLINE U Normalized_Position (E Id);
++ INLINE U Normalized_Position_Max (E Id);
++ INLINE E Object_Ref (E Id);
++ INLINE E Original_Array_Type (E Id);
++ INLINE E Original_Record_Component (E Id);
++ INLINE E Packed_Array_Type (E Id);
++ INLINE E Parent_Subtype (E Id);
++ INLINE L Primitive_Operations (E Id);
++ INLINE E Prival (E Id);
++ INLINE L Privals_Chain (E Id);
++ INLINE L Private_Dependents (E Id);
++ INLINE N Private_View (E Id);
++ INLINE E Protected_Body_Subprogram (E Id);
++ INLINE E Protected_Formal (E Id);
++ INLINE E Protected_Operation (E Id);
++ INLINE U RM_Size (E Id);
++ INLINE B Reachable (E Id);
++ INLINE B Referenced (E Id);
++ INLINE B Referenced_As_LHS (E Id);
++ INLINE N Referenced_Object (E Id);
++ INLINE N Register_Exception_Call (E Id);
++ INLINE E Related_Array_Object (E Id);
++ INLINE E Related_Instance (E Id);
++ INLINE N Renamed_Entity (E Id);
++ INLINE N Renamed_Object (E Id);
++ INLINE U Renaming_Map (E Id);
++ INLINE B Return_Present (E Id);
++ INLINE B Returns_By_Ref (E Id);
++ INLINE B Reverse_Bit_Order (E Id);
++ INLINE N Scalar_Range (E Id);
++ INLINE U Scale_Value (E Id);
++ INLINE U Scope_Depth_Value (E Id);
++ INLINE B Sec_Stack_Needed_For_Return (E Id);
++ INLINE S Shadow_Entities (E Id);
++ INLINE E Shared_Var_Assign_Proc (E Id);
++ INLINE E Shared_Var_Read_Proc (E Id);
++ INLINE N Size_Check_Code (E Id);
++ INLINE B Size_Known_At_Compile_Time (E Id);
++ INLINE B Size_Depends_On_Discriminant (E Id);
++ INLINE R Small_Value (E Id);
++ INLINE E Spec_Entity (E Id);
++ INLINE E Storage_Size_Variable (E Id);
++ INLINE L Stored_Constraint (E Id);
++ INLINE B Strict_Alignment (E Id);
++ INLINE U String_Literal_Length (E Id);
++ INLINE N String_Literal_Low_Bound (E Id);
++ INLINE B Suppress_Elaboration_Warnings (E Id);
++ INLINE B Suppress_Init_Proc (E Id);
++ INLINE B Suppress_Style_Checks (E Id);
++ INLINE B Treat_As_Volatile (E Id);
++ INLINE E Underlying_Full_View (E Id);
++ INLINE N Unset_Reference (E Id);
++ INLINE B Uses_Sec_Stack (E Id);
++ INLINE B Vax_Float (E Id);
++ INLINE B Warnings_Off (E Id);
++ INLINE B Is_Access_Type (E Id);
++ INLINE B Is_Array_Type (E Id);
++ INLINE B Is_Class_Wide_Type (E Id);
++ INLINE B Is_Composite_Type (E Id);
++ INLINE B Is_Concurrent_Body (E Id);
++ INLINE B Is_Concurrent_Record_Type (E Id);
++ INLINE B Is_Concurrent_Type (E Id);
++ INLINE B Is_Decimal_Fixed_Point_Type (E Id);
++ INLINE B Is_Digits_Type (E Id);
++ INLINE B Is_Discrete_Or_Fixed_Point_Type (E Id);
++ INLINE B Is_Discrete_Type (E Id);
++ INLINE B Is_Elementary_Type (E Id);
++ INLINE B Is_Entry (E Id);
++ INLINE B Is_Enumeration_Type (E Id);
++ INLINE B Is_Fixed_Point_Type (E Id);
++ INLINE B Is_Floating_Point_Type (E Id);
++ INLINE B Is_Formal (E Id);
++ INLINE B Is_Formal_Subprogram (E Id);
++ INLINE B Is_Generic_Actual_Type (E Id);
++ INLINE B Is_Generic_Unit (E Id);
++ INLINE B Is_Generic_Type (E Id);
++ INLINE B Is_Generic_Subprogram (E Id);
++ INLINE B Is_Incomplete_Or_Private_Type (E Id);
++ INLINE B Is_Integer_Type (E Id);
++ INLINE B Is_Limited_Record (E Id);
++ INLINE B Is_Modular_Integer_Type (E Id);
++ INLINE B Is_Named_Number (E Id);
++ INLINE B Is_Numeric_Type (E Id);
++ INLINE B Is_Object (E Id);
++ INLINE B Is_Ordinary_Fixed_Point_Type (E Id);
++ INLINE B Is_Overloadable (E Id);
++ INLINE B Is_Overriding_Operation (E Id);
++ INLINE B Is_Private_Type (E Id);
++ INLINE B Is_Protected_Type (E Id);
++ INLINE B Is_Real_Type (E Id);
++ INLINE B Is_Record_Type (E Id);
++ INLINE B Is_Scalar_Type (E Id);
++ INLINE B Is_Signed_Integer_Type (E Id);
++ INLINE B Is_Subprogram (E Id);
++ INLINE B Is_Task_Type (E Id);
++ INLINE B Is_Type (E Id);
++
++ #define Address_Clause einfo__address_clause
++ N Address_Clause (E Id);
++
++ #define Alignment_Clause einfo__alignment_clause
++ N Alignment_Clause (E Id);
++
++ #define Ancestor_Subtype einfo__ancestor_subtype
++ E Ancestor_Subtype (E Id);
++
++ #define Base_Type einfo__base_type
++ E Base_Type (E Id);
++
++ #define Constant_Value einfo__constant_value
++ N Constant_Value (E Id);
++
++ #define Declaration_Node einfo__declaration_node
++ N Declaration_Node (E Id);
++
++ #define Designated_Type einfo__designated_type
++ E Designated_Type (E Id);
++
++ #define Enclosing_Dynamic_Scope einfo__enclosing_dynamic_scope
++ E Enclosing_Dynamic_Scope (E Id);
++
++ #define First_Component einfo__first_component
++ E First_Component (E Id);
++
++ #define First_Discriminant einfo__first_discriminant
++ E First_Discriminant (E Id);
++
++ #define First_Formal einfo__first_formal
++ E First_Formal (E Id);
++
++ #define First_Stored_Discriminant einfo__first_stored_discriminant
++ E First_Stored_Discriminant (E Id);
++
++ #define First_Subtype einfo__first_subtype
++ E First_Subtype (E Id);
++
++ #define Has_Attach_Handler einfo__has_attach_handler
++ B Has_Attach_Handler (E Id);
++
++ #define Has_Entries einfo__has_entries
++ B Has_Entries (E Id);
++
++ #define Has_Foreign_Convention einfo__has_foreign_convention
++ B Has_Foreign_Convention (E Id);
++
++ #define Has_Private_Ancestor einfo__has_private_ancestor
++ B Has_Private_Ancestor (E Id);
++
++ INLINE B Has_Private_Declaration (E Id);
++
++ #define Implementation_Base_Type einfo__implementation_base_type
++ E Implementation_Base_Type (E Id);
++
++ #define Is_Always_Inlined einfo__is_always_inlined
++ B Is_Always_Inlined (E Id);
++
++ #define Is_Boolean_Type einfo__is_boolean_type
++ B Is_Boolean_Type (E Id);
++
++ #define Is_By_Copy_Type einfo__is_by_copy_type
++ B Is_By_Copy_Type (E Id);
++
++ #define Is_By_Reference_Type einfo__is_by_reference_type
++ B Is_By_Reference_Type (E Id);
++
++ #define Is_Derived_Type einfo__is_derived_type
++ B Is_Derived_Type (E Id);
++
++ #define Is_Dynamic_Scope einfo__is_dynamic_scope
++ B Is_Dynamic_Scope (E Id);
++
++ #define Is_Indefinite_Subtype einfo__is_indefinite_subtype
++ B Is_Indefinite_Subtype (E Id);
++
++ #define Is_Limited_Type einfo__is_limited_type
++ B Is_Limited_Type (E Id);
++
++ #define Is_Package einfo__is_package
++ B Is_Package (E Id);
++
++ #define Is_Protected_Private einfo__is_protected_private
++ B Is_Protected_Private (E Id);
++
++ #define Is_Protected_Record_Type einfo__is_protected_record_type
++ B Is_Protected_Record_Type (E Id);
++
++ #define Is_Return_By_Reference_Type einfo__is_return_by_reference_type
++ B Is_Return_By_Reference_Type (E Id);
++
++ #define Is_String_Type einfo__is_string_type
++ B Is_String_Type (E Id);
++
++ #define Is_Task_Record_Type einfo__is_task_record_type
++ B Is_Task_Record_Type (E Id);
++
++ #define Next_Component einfo__next_component
++ E Next_Component (E Id);
++
++ #define Next_Discriminant einfo__next_discriminant
++ E Next_Discriminant (E Id);
++
++ #define Next_Formal einfo__next_formal
++ E Next_Formal (E Id);
++
++ #define Next_Formal_With_Extras einfo__next_formal_with_extras
++ E Next_Formal_With_Extras (E Id);
++
++ INLINE E Next_Literal (E Id);
++
++ #define Next_Stored_Discriminant einfo__next_stored_discriminant
++ E Next_Stored_Discriminant (E Id);
++
++ #define Number_Dimensions einfo__number_dimensions
++ Pos Number_Dimensions (E Id);
++
++ #define Number_Discriminants einfo__number_discriminants
++ Pos Number_Discriminants (E Id);
++
++ #define Number_Entries einfo__number_entries
++ Nat Number_Entries (E Id);
++
++ #define Number_Formals einfo__number_formals
++ Pos Number_Formals (E Id);
++
++ INLINE Formal_Kind Parameter_Mode (E Id);
++
++ #define Root_Type einfo__root_type
++ E Root_Type (E Id);
++
++ #define Scope_Depth_Set einfo__scope_depth_set
++ B Scope_Depth_Set (E Id);
++
++ #define Size_Clause einfo__size_clause
++ N Size_Clause (E Id);
++
++ #define Tag_Component einfo__tag_component
++ E Tag_Component (E Id);
++
++ #define Type_High_Bound einfo__type_high_bound
++ N Type_High_Bound (E Id);
++
++ #define Type_Low_Bound einfo__type_low_bound
++ N Type_Low_Bound (E Id);
++
++ #define Underlying_Type einfo__underlying_type
++ E Underlying_Type (E Id);
++
++ #define Known_Alignment einfo__known_alignment
++ B Known_Alignment (Entity_Id E);
++
++ #define Known_Component_Bit_Offset einfo__known_component_bit_offset
++ B Known_Component_Bit_Offset (Entity_Id E);
++
++ #define Known_Component_Size einfo__known_component_size
++ B Known_Component_Size (Entity_Id E);
++
++ #define Known_Esize einfo__known_esize
++ B Known_Esize (Entity_Id E);
++
++ #define Known_Normalized_First_Bit einfo__known_normalized_first_bit
++ B Known_Normalized_First_Bit (Entity_Id E);
++
++ #define Known_Normalized_Position einfo__known_normalized_position
++ B Known_Normalized_Position (Entity_Id E);
++
++ #define Known_Normalized_Position_Max einfo__known_normalized_position_max
++ B Known_Normalized_Position_Max (Entity_Id E);
++
++ #define Known_RM_Size einfo__known_rm_size
++ B Known_RM_Size (Entity_Id E);
++
++ #define Known_Static_Component_Bit_Offset einfo__known_static_component_bit_offset
++ B Known_Static_Component_Bit_Offset (Entity_Id E);
++
++ #define Known_Static_Component_Size einfo__known_static_component_size
++ B Known_Static_Component_Size (Entity_Id E);
++
++ #define Known_Static_Esize einfo__known_static_esize
++ B Known_Static_Esize (Entity_Id E);
++
++ #define Known_Static_Normalized_First_Bit einfo__known_static_normalized_first_bit
++ B Known_Static_Normalized_First_Bit (Entity_Id E);
++
++ #define Known_Static_Normalized_Position einfo__known_static_normalized_position
++ B Known_Static_Normalized_Position (Entity_Id E);
++
++ #define Known_Static_Normalized_Position_Max einfo__known_static_normalized_position_max
++ B Known_Static_Normalized_Position_Max (Entity_Id E);
++
++ #define Known_Static_RM_Size einfo__known_static_rm_size
++ B Known_Static_RM_Size (Entity_Id E);
++
++ #define Unknown_Alignment einfo__unknown_alignment
++ B Unknown_Alignment (Entity_Id E);
++
++ #define Unknown_Component_Bit_Offset einfo__unknown_component_bit_offset
++ B Unknown_Component_Bit_Offset (Entity_Id E);
++
++ #define Unknown_Component_Size einfo__unknown_component_size
++ B Unknown_Component_Size (Entity_Id E);
++
++ #define Unknown_Esize einfo__unknown_esize
++ B Unknown_Esize (Entity_Id E);
++
++ #define Unknown_Normalized_First_Bit einfo__unknown_normalized_first_bit
++ B Unknown_Normalized_First_Bit (Entity_Id E);
++
++ #define Unknown_Normalized_Position einfo__unknown_normalized_position
++ B Unknown_Normalized_Position (Entity_Id E);
++
++ #define Unknown_Normalized_Position_Max einfo__unknown_normalized_position_max
++ B Unknown_Normalized_Position_Max (Entity_Id E);
++
++ #define Unknown_RM_Size einfo__unknown_rm_size
++ B Unknown_RM_Size (Entity_Id E);
++
++
++ INLINE L Accept_Address (E Id)
++ { return Elist21 (Id); }
++
++ INLINE E Access_Disp_Table (E Id)
++ { return Node16 (Implementation_Base_Type (Id)); }
++
++ INLINE E Actual_Subtype (E Id)
++ { return Node17 (Id); }
++
++ INLINE B Address_Taken (E Id)
++ { return Flag104 (Id); }
++
++ INLINE E Alias (E Id)
++ { return Node18 (Id); }
++
++ INLINE U Alignment (E Id)
++ { return Uint14 (Id); }
++
++ INLINE E Associated_Final_Chain (E Id)
++ { return Node23 (Id); }
++
++ INLINE E Associated_Formal_Package (E Id)
++ { return Node12 (Id); }
++
++ INLINE N Associated_Node_For_Itype (E Id)
++ { return Node8 (Id); }
++
++ INLINE E Associated_Storage_Pool (E Id)
++ { return Node22 (Root_Type (Id)); }
++
++ INLINE N Barrier_Function (E Id)
++ { return Node12 (Id); }
++
++ INLINE N Block_Node (E Id)
++ { return Node11 (Id); }
++
++ INLINE E Body_Entity (E Id)
++ { return Node19 (Id); }
++
++ INLINE B Body_Needed_For_SAL (E Id)
++ { return Flag40 (Id); }
++
++ INLINE B C_Pass_By_Copy (E Id)
++ { return Flag125 (Implementation_Base_Type (Id)); }
++
++ INLINE B Can_Never_Be_Null (E Id)
++ { return Flag38 (Id); }
++
++ INLINE B Checks_May_Be_Suppressed (E Id)
++ { return Flag31 (Id); }
++
++ INLINE E Class_Wide_Type (E Id)
++ { return Node9 (Id); }
++
++ INLINE E Cloned_Subtype (E Id)
++ { return Node16 (Id); }
++
++ INLINE U Component_Bit_Offset (E Id)
++ { return Uint11 (Id); }
++
++ INLINE N Component_Clause (E Id)
++ { return Node13 (Id); }
++
++ INLINE U Component_Size (E Id)
++ { return Uint22 (Implementation_Base_Type (Id)); }
++
++ INLINE E Component_Type (E Id)
++ { return Node20 (Implementation_Base_Type (Id)); }
++
++ INLINE E Corresponding_Concurrent_Type (E Id)
++ { return Node18 (Id); }
++
++ INLINE E Corresponding_Discriminant (E Id)
++ { return Node19 (Id); }
++
++ INLINE E Corresponding_Equality (E Id)
++ { return Node13 (Id); }
++
++ INLINE E Corresponding_Record_Type (E Id)
++ { return Node18 (Id); }
++
++ INLINE E Corresponding_Remote_Type (E Id)
++ { return Node22 (Id); }
++
++ INLINE N Current_Value (E Id)
++ { return Node9 (Id); }
++
++ INLINE E CR_Discriminant (E Id)
++ { return Node23 (Id); }
++
++ INLINE B Debug_Info_Off (E Id)
++ { return Flag166 (Id); }
++
++ INLINE E Debug_Renaming_Link (E Id)
++ { return Node13 (Id); }
++
++ INLINE E Default_Expr_Function (E Id)
++ { return Node21 (Id); }
++
++ INLINE B Default_Expressions_Processed (E Id)
++ { return Flag108 (Id); }
++
++ INLINE N Default_Value (E Id)
++ { return Node20 (Id); }
++
++ INLINE B Delay_Cleanups (E Id)
++ { return Flag114 (Id); }
++
++ INLINE B Delay_Subprogram_Descriptors (E Id)
++ { return Flag50 (Id); }
++
++ INLINE R Delta_Value (E Id)
++ { return Ureal18 (Id); }
++
++ INLINE L Dependent_Instances (E Id)
++ { return Elist8 (Id); }
++
++ INLINE B Depends_On_Private (E Id)
++ { return Flag14 (Id); }
++
++ INLINE U Digits_Value (E Id)
++ { return Uint17 (Id); }
++
++ INLINE E Directly_Designated_Type (E Id)
++ { return Node20 (Id); }
++
++ INLINE B Discard_Names (E Id)
++ { return Flag88 (Id); }
++
++ INLINE E Discriminal (E Id)
++ { return Node17 (Id); }
++
++ INLINE N Discriminal_Link (E Id)
++ { return Node10 (Id); }
++
++ INLINE E Discriminant_Checking_Func (E Id)
++ { return Node20 (Id); }
++
++ INLINE L Discriminant_Constraint (E Id)
++ { return Elist21 (Id); }
++
++ INLINE N Discriminant_Default_Value (E Id)
++ { return Node20 (Id); }
++
++ INLINE U Discriminant_Number (E Id)
++ { return Uint15 (Id); }
++
++ INLINE U DT_Entry_Count (E Id)
++ { return Uint15 (Id); }
++
++ INLINE U DT_Position (E Id)
++ { return Uint15 (Id); }
++
++ INLINE E DTC_Entity (E Id)
++ { return Node16 (Id); }
++
++ INLINE B Elaborate_All_Desirable (E Id)
++ { return Flag146 (Id); }
++
++ INLINE E Elaboration_Entity (E Id)
++ { return Node13 (Id); }
++
++ INLINE B Elaboration_Entity_Required (E Id)
++ { return Flag174 (Id); }
++
++ INLINE E Enclosing_Scope (E Id)
++ { return Node18 (Id); }
++
++ INLINE B Entry_Accepted (E Id)
++ { return Flag152 (Id); }
++
++ INLINE E Entry_Bodies_Array (E Id)
++ { return Node15 (Id); }
++
++ INLINE E Entry_Cancel_Parameter (E Id)
++ { return Node23 (Id); }
++
++ INLINE E Entry_Component (E Id)
++ { return Node11 (Id); }
++
++ INLINE E Entry_Formal (E Id)
++ { return Node16 (Id); }
++
++ INLINE N Entry_Index_Constant (E Id)
++ { return Node18 (Id); }
++
++ INLINE E Entry_Parameters_Type (E Id)
++ { return Node15 (Id); }
++
++ INLINE E Enum_Pos_To_Rep (E Id)
++ { return Node23 (Id); }
++
++ INLINE Uint Enumeration_Pos (E Id)
++ { return Uint11 (Id); }
++
++ INLINE U Enumeration_Rep (E Id)
++ { return Uint12 (Id); }
++
++ INLINE N Enumeration_Rep_Expr (E Id)
++ { return Node22 (Id); }
++
++ INLINE E Equivalent_Type (E Id)
++ { return Node18 (Id); }
++
++ INLINE Uint Esize (E Id)
++ { return Uint12 (Id); }
++
++ INLINE Uint Exception_Code (E Id)
++ { return Uint22 (Id); }
++
++ INLINE E Extra_Accessibility (E Id)
++ { return Node13 (Id); }
++
++ INLINE E Extra_Constrained (E Id)
++ { return Node23 (Id); }
++
++ INLINE E Extra_Formal (E Id)
++ { return Node15 (Id); }
++
++ INLINE E Finalization_Chain_Entity (E Id)
++ { return Node19 (Id); }
++
++ INLINE E First_Entity (E Id)
++ { return Node17 (Id); }
++
++ INLINE N First_Index (E Id)
++ { return Node17 (Id); }
++
++ INLINE E First_Literal (E Id)
++ { return Node17 (Id); }
++
++ INLINE E First_Optional_Parameter (E Id)
++ { return Node14 (Id); }
++
++ INLINE E First_Private_Entity (E Id)
++ { return Node16 (Id); }
++
++ INLINE E First_Rep_Item (E Id)
++ { return Node6 (Id); }
++
++ INLINE N Freeze_Node (E Id)
++ { return Node7 (Id); }
++
++ INLINE B From_With_Type (E Id)
++ { return Flag159 (Id); }
++
++ INLINE E Full_View (E Id)
++ { return Node11 (Id); }
++
++ INLINE B Function_Returns_With_DSP (E Id)
++ { return Flag169 (Id); }
++
++ INLINE E Generic_Homonym (E Id)
++ { return Node11 (Id); }
++
++ INLINE L Generic_Renamings (E Id)
++ { return Elist23 (Id); }
++
++ INLINE S Handler_Records (E Id)
++ { return List10 (Id); }
++
++ INLINE B Has_Aliased_Components (E Id)
++ { return Flag135 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Alignment_Clause (E Id)
++ { return Flag46 (Id); }
++
++ INLINE B Has_All_Calls_Remote (E Id)
++ { return Flag79 (Id); }
++
++ INLINE B Has_Atomic_Components (E Id)
++ { return Flag86 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Biased_Representation (E Id)
++ { return Flag139 (Id); }
++
++ INLINE B Has_Completion (E Id)
++ { return Flag26 (Id); }
++
++ INLINE B Has_Completion_In_Body (E Id)
++ { return Flag71 (Id); }
++
++ INLINE B Has_Complex_Representation (E Id)
++ { return Flag140 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Component_Size_Clause (E Id)
++ { return Flag68 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Controlled_Component (E Id)
++ { return Flag43 (Base_Type (Id)); }
++
++ INLINE B Has_Contiguous_Rep (E Id)
++ { return Flag181 (Id); }
++
++ INLINE B Has_Controlling_Result (E Id)
++ { return Flag98 (Id); }
++
++ INLINE B Has_Convention_Pragma (E Id)
++ { return Flag119 (Id); }
++
++ INLINE B Has_Delayed_Freeze (E Id)
++ { return Flag18 (Id); }
++
++ INLINE B Has_Discriminants (E Id)
++ { return Flag5 (Id); }
++
++ INLINE B Has_Enumeration_Rep_Clause (E Id)
++ { return Flag66 (Id); }
++
++ INLINE B Has_Exit (E Id)
++ { return Flag47 (Id); }
++
++ INLINE B Has_External_Tag_Rep_Clause (E Id)
++ { return Flag110 (Id); }
++
++ INLINE B Has_Forward_Instantiation (E Id)
++ { return Flag175 (Id); }
++
++ INLINE B Has_Fully_Qualified_Name (E Id)
++ { return Flag173 (Id); }
++
++ INLINE B Has_Gigi_Rep_Item (E Id)
++ { return Flag82 (Id); }
++
++ INLINE B Has_Homonym (E Id)
++ { return Flag56 (Id); }
++
++ INLINE B Has_Machine_Radix_Clause (E Id)
++ { return Flag83 (Id); }
++
++ INLINE B Has_Master_Entity (E Id)
++ { return Flag21 (Id); }
++
++ INLINE B Has_Missing_Return (E Id)
++ { return Flag142 (Id); }
++
++ INLINE B Has_Nested_Block_With_Handler (E Id)
++ { return Flag101 (Id); }
++
++ INLINE B Has_Non_Standard_Rep (E Id)
++ { return Flag75 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Object_Size_Clause (E Id)
++ { return Flag172 (Id); }
++
++ INLINE B Has_Per_Object_Constraint (E Id)
++ { return Flag154 (Id); }
++
++ INLINE B Has_Pragma_Controlled (E Id)
++ { return Flag27 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Pragma_Elaborate_Body (E Id)
++ { return Flag150 (Id); }
++
++ INLINE B Has_Pragma_Inline (E Id)
++ { return Flag157 (Id); }
++
++ INLINE B Has_Pragma_Pack (E Id)
++ { return Flag121 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Pragma_Pure_Function (E Id)
++ { return Flag179 (Id); }
++
++ INLINE B Has_Pragma_Unreferenced (E Id)
++ { return Flag180 (Id); }
++
++ INLINE B Has_Primitive_Operations (E Id)
++ { return Flag120 (Base_Type (Id)); }
++
++ INLINE B Has_Private_Declaration (E Id)
++ { return Flag155 (Id); }
++
++ INLINE B Has_Qualified_Name (E Id)
++ { return Flag161 (Id); }
++
++ INLINE B Has_Record_Rep_Clause (E Id)
++ { return Flag65 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Recursive_Call (E Id)
++ { return Flag143 (Id); }
++
++ INLINE B Has_Size_Clause (E Id)
++ { return Flag29 (Id); }
++
++ INLINE B Has_Small_Clause (E Id)
++ { return Flag67 (Id); }
++
++ INLINE B Has_Specified_Layout (E Id)
++ { return Flag100 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Storage_Size_Clause (E Id)
++ { return Flag23 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Subprogram_Descriptor (E Id)
++ { return Flag93 (Id); }
++
++ INLINE B Has_Task (E Id)
++ { return Flag30 (Base_Type (Id)); }
++
++ INLINE B Has_Unchecked_Union (E Id)
++ { return Flag123 (Base_Type (Id)); }
++
++ INLINE B Has_Unknown_Discriminants (E Id)
++ { return Flag72 (Id); }
++
++ INLINE B Has_Volatile_Components (E Id)
++ { return Flag87 (Implementation_Base_Type (Id)); }
++
++ INLINE B Has_Xref_Entry (E Id)
++ { return Flag182 (Implementation_Base_Type (Id)); }
++
++ INLINE E Hiding_Loop_Variable (E Id)
++ { return Node8 (Id); }
++
++ INLINE E Homonym (E Id)
++ { return Node4 (Id); }
++
++ INLINE B In_Package_Body (E Id)
++ { return Flag48 (Id); }
++
++ INLINE B In_Private_Part (E Id)
++ { return Flag45 (Id); }
++
++ INLINE B In_Use (E Id)
++ { return Flag8 (Id); }
++
++ INLINE L Inner_Instances (E Id)
++ { return Elist23 (Id); }
++
++ INLINE N Interface_Name (E Id)
++ { return Node21 (Id); }
++
++ INLINE B Is_Abstract (E Id)
++ { return Flag19 (Id); }
++
++ INLINE B Is_Access_Constant (E Id)
++ { return Flag69 (Id); }
++
++ INLINE B Is_Aliased (E Id)
++ { return Flag15 (Id); }
++
++ INLINE B Is_AST_Entry (E Id)
++ { return Flag132 (Id); }
++
++ INLINE B Is_Asynchronous (E Id)
++ { return Flag81 (Id); }
++
++ INLINE B Is_Atomic (E Id)
++ { return Flag85 (Id); }
++
++ INLINE B Is_Bit_Packed_Array (E Id)
++ { return Flag122 (Implementation_Base_Type (Id)); }
++
++ INLINE B Is_Called (E Id)
++ { return Flag102 (Id); }
++
++ INLINE B Is_Character_Type (E Id)
++ { return Flag63 (Id); }
++
++ INLINE B Is_Child_Unit (E Id)
++ { return Flag73 (Id); }
++
++ INLINE B Is_Class_Wide_Equivalent_Type (E Id)
++ { return Flag35 (Id); }
++
++ INLINE B Is_Compilation_Unit (E Id)
++ { return Flag149 (Id); }
++
++ INLINE B Is_Completely_Hidden (E Id)
++ { return Flag103 (Id); }
++
++ INLINE B Is_Constr_Subt_For_U_Nominal (E Id)
++ { return Flag80 (Id); }
++
++ INLINE B Is_Constr_Subt_For_UN_Aliased (E Id)
++ { return Flag141 (Id); }
++
++ INLINE B Is_Constrained (E Id)
++ { return Flag12 (Id); }
++
++ INLINE B Is_Constructor (E Id)
++ { return Flag76 (Id); }
++
++ INLINE B Is_Controlled (E Id)
++ { return Flag42 (Base_Type (Id)); }
++
++ INLINE B Is_Controlling_Formal (E Id)
++ { return Flag97 (Id); }
++
++ INLINE B Is_CPP_Class (E Id)
++ { return Flag74 (Id); }
++
++ INLINE B Is_Discrim_SO_Function (E Id)
++ { return Flag176 (Id); }
++
++ INLINE B Is_Dispatching_Operation (E Id)
++ { return Flag6 (Id); }
++
++ INLINE B Is_Eliminated (E Id)
++ { return Flag124 (Id); }
++
++ INLINE B Is_Entry_Formal (E Id)
++ { return Flag52 (Id); }
++
++ INLINE B Is_Exported (E Id)
++ { return Flag99 (Id); }
++
++ INLINE B Is_First_Subtype (E Id)
++ { return Flag70 (Id); }
++
++ INLINE B Is_For_Access_Subtype (E Id)
++ { return Flag118 (Id); }
++
++ INLINE B Is_Formal_Subprogram (E Id)
++ { return Flag111 (Id); }
++
++ INLINE B Is_Frozen (E Id)
++ { return Flag4 (Id); }
++
++ INLINE B Is_Generic_Actual_Type (E Id)
++ { return Flag94 (Id); }
++
++ INLINE B Is_Generic_Instance (E Id)
++ { return Flag130 (Id); }
++
++ INLINE B Is_Generic_Type (E Id)
++ { return Flag13 (Id); }
++
++ INLINE B Is_Hidden (E Id)
++ { return Flag57 (Id); }
++
++ INLINE B Is_Hidden_Open_Scope (E Id)
++ { return Flag171 (Id); }
++
++ INLINE B Is_Immediately_Visible (E Id)
++ { return Flag7 (Id); }
++
++ INLINE B Is_Imported (E Id)
++ { return Flag24 (Id); }
++
++ INLINE B Is_Inlined (E Id)
++ { return Flag11 (Id); }
++
++ INLINE B Is_Instantiated (E Id)
++ { return Flag126 (Id); }
++
++ INLINE B Is_Internal (E Id)
++ { return Flag17 (Id); }
++
++ INLINE B Is_Interrupt_Handler (E Id)
++ { return Flag89 (Id); }
++
++ INLINE B Is_Intrinsic_Subprogram (E Id)
++ { return Flag64 (Id); }
++
++ INLINE B Is_Itype (E Id)
++ { return Flag91 (Id); }
++
++ INLINE B Is_Known_Non_Null (E Id)
++ { return Flag37 (Id); }
++
++ INLINE B Is_Known_Valid (E Id)
++ { return Flag170 (Id); }
++
++ INLINE B Is_Limited_Composite (E Id)
++ { return Flag106 (Id); }
++
++ INLINE B Is_Limited_Record (E Id)
++ { return Flag25 (Id); }
++
++ INLINE B Is_Machine_Code_Subprogram (E Id)
++ { return Flag137 (Id); }
++
++ INLINE B Is_Non_Static_Subtype (E Id)
++ { return Flag109 (Id); }
++
++ INLINE B Is_Null_Init_Proc (E Id)
++ { return Flag178 (Id); }
++
++ INLINE B Is_Optional_Parameter (E Id)
++ { return Flag134 (Id); }
++
++ INLINE B Is_Overriding_Operation (E Id)
++ { return Flag39 (Id); }
++
++ INLINE B Is_Package_Body_Entity (E Id)
++ { return Flag160 (Id); }
++
++ INLINE B Is_Packed (E Id)
++ { return Flag51 (Implementation_Base_Type (Id)); }
++
++ INLINE B Is_Packed_Array_Type (E Id)
++ { return Flag138 (Id); }
++
++ INLINE B Is_Potentially_Use_Visible (E Id)
++ { return Flag9 (Id); }
++
++ INLINE B Is_Preelaborated (E Id)
++ { return Flag59 (Id); }
++
++ INLINE B Is_Private_Composite (E Id)
++ { return Flag107 (Id); }
++
++ INLINE B Is_Private_Descendant (E Id)
++ { return Flag53 (Id); }
++
++ INLINE B Is_Psected (E Id)
++ { return Flag153 (Id); }
++
++ INLINE B Is_Public (E Id)
++ { return Flag10 (Id); }
++
++ INLINE B Is_Pure (E Id)
++ { return Flag44 (Id); }
++
++ INLINE B Is_Remote_Call_Interface (E Id)
++ { return Flag62 (Id); }
++
++ INLINE B Is_Remote_Types (E Id)
++ { return Flag61 (Id); }
++
++ INLINE B Is_Renaming_Of_Object (E Id)
++ { return Flag112 (Id); }
++
++ INLINE B Is_Shared_Passive (E Id)
++ { return Flag60 (Id); }
++
++ INLINE B Is_Statically_Allocated (E Id)
++ { return Flag28 (Id); }
++
++ INLINE B Is_Tag (E Id)
++ { return Flag78 (Id); }
++
++ INLINE B Is_Tagged_Type (E Id)
++ { return Flag55 (Id); }
++
++ INLINE B Is_Thread_Body (E Id)
++ { return Flag77 (Id); }
++
++ INLINE B Is_True_Constant (E Id)
++ { return Flag163 (Id); }
++
++ INLINE B Is_Unchecked_Union (E Id)
++ { return Flag117 (Id); }
++
++ INLINE B Is_Unsigned_Type (E Id)
++ { return Flag144 (Id); }
++
++ INLINE B Is_Valued_Procedure (E Id)
++ { return Flag127 (Id); }
++
++ INLINE B Is_Visible_Child_Unit (E Id)
++ { return Flag116 (Id); }
++
++ INLINE B Is_VMS_Exception (E Id)
++ { return Flag133 (Id); }
++
++ INLINE B Kill_Elaboration_Checks (E Id)
++ { return Flag32 (Id); }
++
++ INLINE B Kill_Range_Checks (E Id)
++ { return Flag33 (Id); }
++
++ INLINE B Kill_Tag_Checks (E Id)
++ { return Flag34 (Id); }
++
++ INLINE E Last_Entity (E Id)
++ { return Node20 (Id); }
++
++ INLINE L Limited_Views (E Id)
++ { return Elist23 (Id); }
++
++ INLINE E Lit_Indexes (E Id)
++ { return Node15 (Id); }
++
++ INLINE E Lit_Strings (E Id)
++ { return Node16 (Id); }
++
++ INLINE B Machine_Radix_10 (E Id)
++ { return Flag84 (Id); }
++
++ INLINE E Master_Id (E Id)
++ { return Node17 (Id); }
++
++ INLINE B Materialize_Entity (E Id)
++ { return Flag168 (Id); }
++
++ INLINE M Mechanism (E Id)
++ { return UI_To_Int (Uint8 (Id)); }
++
++ INLINE Uint Modulus (E Id)
++ { return Uint17 (Base_Type (Id)); }
++
++ INLINE B Needs_Debug_Info (E Id)
++ { return Flag147 (Id); }
++
++ INLINE B Needs_No_Actuals (E Id)
++ { return Flag22 (Id); }
++
++ INLINE B Never_Set_In_Source (E Id)
++ { return Flag115 (Id); }
++
++ INLINE E Next_Inlined_Subprogram (E Id)
++ { return Node12 (Id); }
++
++ INLINE B No_Pool_Assigned (E Id)
++ { return Flag131 (Root_Type (Id)); }
++
++ INLINE B No_Return (E Id)
++ { return Flag113 (Id); }
++
++ INLINE B Non_Binary_Modulus (E Id)
++ { return Flag58 (Base_Type (Id)); }
++
++ INLINE E Non_Limited_View (E Id)
++ { return Node17 (Id); }
++
++ INLINE B Nonzero_Is_True (E Id)
++ { return Flag162 (Base_Type (Id)); }
++
++ INLINE U Normalized_First_Bit (E Id)
++ { return Uint8 (Id); }
++
++ INLINE U Normalized_Position (E Id)
++ { return Uint14 (Id); }
++
++ INLINE U Normalized_Position_Max (E Id)
++ { return Uint10 (Id); }
++
++ INLINE E Object_Ref (E Id)
++ { return Node17 (Id); }
++
++ INLINE E Original_Array_Type (E Id)
++ { return Node21 (Id); }
++
++ INLINE E Original_Record_Component (E Id)
++ { return Node22 (Id); }
++
++ INLINE E Packed_Array_Type (E Id)
++ { return Node23 (Id); }
++
++ INLINE E Parent_Subtype (E Id)
++ { return Node19 (Id); }
++
++ INLINE L Primitive_Operations (E Id)
++ { return Elist15 (Id); }
++
++ INLINE E Prival (E Id)
++ { return Node17 (Id); }
++
++ INLINE L Privals_Chain (E Id)
++ { return Elist23 (Id); }
++
++ INLINE L Private_Dependents (E Id)
++ { return Elist18 (Id); }
++
++ INLINE N Private_View (E Id)
++ { return Node22 (Id); }
++
++ INLINE E Protected_Body_Subprogram (E Id)
++ { return Node11 (Id); }
++
++ INLINE E Protected_Formal (E Id)
++ { return Node22 (Id); }
++
++ INLINE N Protected_Operation (E Id)
++ { return Node23 (Id); }
++
++ INLINE B Reachable (E Id)
++ { return Flag49 (Id); }
++
++ INLINE B Referenced (E Id)
++ { return Flag156 (Id); }
++
++ INLINE B Referenced_As_LHS (E Id)
++ { return Flag36 (Id); }
++
++ INLINE N Referenced_Object (E Id)
++ { return Node10 (Id); }
++
++ INLINE N Register_Exception_Call (E Id)
++ { return Node20 (Id); }
++
++ INLINE E Related_Array_Object (E Id)
++ { return Node19 (Id); }
++
++ INLINE E Related_Instance (E Id)
++ { return Node15 (Id); }
++
++ INLINE N Renamed_Entity (E Id)
++ { return Node18 (Id); }
++
++ INLINE N Renamed_Object (E Id)
++ { return Node18 (Id); }
++
++ INLINE U Renaming_Map (E Id)
++ { return Uint9 (Id); }
++
++ INLINE B Return_Present (E Id)
++ { return Flag54 (Id); }
++
++ INLINE B Returns_By_Ref (E Id)
++ { return Flag90 (Id); }
++
++ INLINE B Reverse_Bit_Order (E Id)
++ { return Flag164 (Base_Type (Id)); }
++
++ INLINE U RM_Size (E Id)
++ { return Uint13 (Id); }
++
++ INLINE N Scalar_Range (E Id)
++ { return Node20 (Id); }
++
++ INLINE U Scale_Value (E Id)
++ { return Uint15 (Id); }
++
++ INLINE U Scope_Depth_Value (E Id)
++ { return Uint22 (Id); }
++
++ INLINE B Sec_Stack_Needed_For_Return (E Id)
++ { return Flag167 (Id); }
++
++ INLINE S Shadow_Entities (E Id)
++ { return List14 (Id); }
++
++ INLINE E Shared_Var_Assign_Proc (E Id)
++ { return Node22 (Id); }
++
++ INLINE E Shared_Var_Read_Proc (E Id)
++ { return Node15 (Id); }
++
++ INLINE N Size_Check_Code (E Id)
++ { return Node19 (Id); }
++
++ INLINE B Size_Depends_On_Discriminant (E Id)
++ { return Flag177 (Id); }
++
++ INLINE B Size_Known_At_Compile_Time (E Id)
++ { return Flag92 (Id); }
++
++ INLINE R Small_Value (E Id)
++ { return Ureal21 (Id); }
++
++ INLINE E Spec_Entity (E Id)
++ { return Node19 (Id); }
++
++ INLINE E Storage_Size_Variable (E Id)
++ { return Node15 (Implementation_Base_Type (Id)); }
++
++ INLINE L Stored_Constraint (E Id)
++ { return Elist23 (Id); }
++
++ INLINE B Strict_Alignment (E Id)
++ { return Flag145 (Implementation_Base_Type (Id)); }
++
++ INLINE U String_Literal_Length (E Id)
++ { return Uint16 (Id); }
++
++ INLINE N String_Literal_Low_Bound (E Id)
++ { return Node15 (Id); }
++
++ INLINE B Suppress_Elaboration_Warnings (E Id)
++ { return Flag148 (Id); }
++
++ INLINE B Suppress_Init_Proc (E Id)
++ { return Flag105 (Base_Type (Id)); }
++
++ INLINE B Suppress_Style_Checks (E Id)
++ { return Flag165 (Id); }
++
++ INLINE B Treat_As_Volatile (E Id)
++ { return Flag41 (Id); }
++
++ INLINE E Underlying_Full_View (E Id)
++ { return Node19 (Id); }
++
++ INLINE N Unset_Reference (E Id)
++ { return Node16 (Id); }
++
++ INLINE B Uses_Sec_Stack (E Id)
++ { return Flag95 (Id); }
++
++ INLINE B Vax_Float (E Id)
++ { return Flag151 (Base_Type (Id)); }
++
++ INLINE B Warnings_Off (E Id)
++ { return Flag96 (Id); }
++
++ INLINE B Is_Access_Type (E Id)
++ { return IN (Ekind (Id), Access_Kind); }
++
++ INLINE B Is_Array_Type (E Id)
++ { return IN (Ekind (Id), Array_Kind); }
++
++ INLINE B Is_Class_Wide_Type (E Id)
++ { return IN (Ekind (Id), Class_Wide_Kind); }
++
++ INLINE B Is_Composite_Type (E Id)
++ { return IN (Ekind (Id), Composite_Kind); }
++
++ INLINE B Is_Concurrent_Body (E Id)
++ { return IN (Ekind (Id), Concurrent_Body_Kind); }
++
++ INLINE B Is_Concurrent_Record_Type (E Id)
++ { return Flag20 (Id); }
++
++ INLINE B Is_Concurrent_Type (E Id)
++ { return IN (Ekind (Id), Concurrent_Kind); }
++
++ INLINE B Is_Decimal_Fixed_Point_Type (E Id)
++ { return IN (Ekind (Id), Decimal_Fixed_Point_Kind); }
++
++ INLINE B Is_Digits_Type (E Id)
++ { return IN (Ekind (Id), Digits_Kind); }
++
++ INLINE B Is_Discrete_Or_Fixed_Point_Type (E Id)
++ { return IN (Ekind (Id), Discrete_Or_Fixed_Point_Kind); }
++
++ INLINE B Is_Discrete_Type (E Id)
++ { return IN (Ekind (Id), Discrete_Kind); }
++
++ INLINE B Is_Elementary_Type (E Id)
++ { return IN (Ekind (Id), Elementary_Kind); }
++
++ INLINE B Is_Entry (E Id)
++ { return IN (Ekind (Id), Entry_Kind); }
++
++ INLINE B Is_Enumeration_Type (E Id)
++ { return IN (Ekind (Id), Enumeration_Kind); }
++
++ INLINE B Is_Fixed_Point_Type (E Id)
++ { return IN (Ekind (Id), Fixed_Point_Kind); }
++
++ INLINE B Is_Floating_Point_Type (E Id)
++ { return IN (Ekind (Id), Float_Kind); }
++
++ INLINE B Is_Formal (E Id)
++ { return IN (Ekind (Id), Formal_Kind); }
++
++ INLINE B Is_Generic_Subprogram (E Id)
++ { return IN (Ekind (Id), Generic_Subprogram_Kind); }
++
++ INLINE B Is_Generic_Unit (E Id)
++ { return IN (Ekind (Id), Generic_Unit_Kind); }
++
++ INLINE B Is_Incomplete_Or_Private_Type (E Id)
++ { return IN (Ekind (Id), Incomplete_Or_Private_Kind); }
++
++ INLINE B Is_Integer_Type (E Id)
++ { return IN (Ekind (Id), Integer_Kind); }
++
++ INLINE B Is_Modular_Integer_Type (E Id)
++ { return IN (Ekind (Id), Modular_Integer_Kind); }
++
++ INLINE B Is_Named_Number (E Id)
++ { return IN (Ekind (Id), Named_Kind); }
++
++ INLINE B Is_Numeric_Type (E Id)
++ { return IN (Ekind (Id), Numeric_Kind); }
++
++ INLINE B Is_Object (E Id)
++ { return IN (Ekind (Id), Object_Kind); }
++
++ INLINE B Is_Ordinary_Fixed_Point_Type (E Id)
++ { return IN (Ekind (Id), Ordinary_Fixed_Point_Kind); }
++
++ INLINE B Is_Overloadable (E Id)
++ { return IN (Ekind (Id), Overloadable_Kind); }
++
++ INLINE B Is_Private_Type (E Id)
++ { return IN (Ekind (Id), Private_Kind); }
++
++ INLINE B Is_Protected_Type (E Id)
++ { return IN (Ekind (Id), Protected_Kind); }
++
++ INLINE B Is_Real_Type (E Id)
++ { return IN (Ekind (Id), Real_Kind); }
++
++ INLINE B Is_Record_Type (E Id)
++ { return IN (Ekind (Id), Record_Kind); }
++
++ INLINE B Is_Scalar_Type (E Id)
++ { return IN (Ekind (Id), Scalar_Kind); }
++
++ INLINE B Is_Signed_Integer_Type (E Id)
++ { return IN (Ekind (Id), Signed_Integer_Kind); }
++
++ INLINE B Is_Subprogram (E Id)
++ { return IN (Ekind (Id), Subprogram_Kind); }
++
++ INLINE B Is_Task_Type (E Id)
++ { return IN (Ekind (Id), Task_Kind); }
++
++ INLINE B Is_Type (E Id)
++ { return IN (Ekind (Id), Type_Kind); }
++
++ INLINE N Entry_Index_Type (E Id)
++ { return Etype (Discrete_Subtype_Definition (Parent (Id))); }
++
++ INLINE Node_Id Next_Index (Node_Id Id)
++ { return Next (Id); }
++
++ INLINE E Next_Literal (E Id)
++ { return Next (Id); }
++
++ INLINE Formal_Kind Parameter_Mode (E Id)
++ { return Ekind (Id); }
++
++/* End of einfo.h (C version of Einfo package specification) */
+--- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/nmake.adb.orig 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/nmake.adb 2004-06-02 00:52:35.000000000 +0200
+@@ -0,0 +1,2867 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT COMPILER COMPONENTS --
++-- --
++-- N M A K E --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
++-- --
++-- GNAT is free software; you can redistribute it and/or modify it under --
++-- terms of the GNU General Public License as published by the Free Soft- --
++-- ware Foundation; either version 2, or (at your option) any later ver- --
++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
++-- for more details. You should have received a copy of the GNU General --
++-- Public License distributed with GNAT; see file COPYING. If not, write --
++-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
++-- MA 02111-1307, USA. --
++-- --
++-- GNAT was originally developed by the GNAT team at New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc. --
++-- --
++------------------------------------------------------------------------------
++
++pragma Style_Checks (All_Checks);
++-- Turn off subprogram order checking, since the routines here are
++-- generated automatically in order.
++
++
++with Atree; use Atree;
++with Sinfo; use Sinfo;
++with Snames; use Snames;
++with Stand; use Stand;
++
++package body Nmake is
++
++ function Make_Unused_At_Start (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Unused_At_Start, Sloc);
++ begin
++ return N;
++ end Make_Unused_At_Start;
++
++ function Make_Unused_At_End (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Unused_At_End, Sloc);
++ begin
++ return N;
++ end Make_Unused_At_End;
++
++ function Make_Identifier (Sloc : Source_Ptr;
++ Chars : Name_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Identifier, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ return N;
++ end Make_Identifier;
++
++ function Make_Integer_Literal (Sloc : Source_Ptr;
++ Intval : Uint)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Integer_Literal, Sloc);
++ begin
++ Set_Intval (N, Intval);
++ return N;
++ end Make_Integer_Literal;
++
++ function Make_Real_Literal (Sloc : Source_Ptr;
++ Realval : Ureal)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Real_Literal, Sloc);
++ begin
++ Set_Realval (N, Realval);
++ return N;
++ end Make_Real_Literal;
++
++ function Make_Character_Literal (Sloc : Source_Ptr;
++ Chars : Name_Id;
++ Char_Literal_Value : Char_Code)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Character_Literal, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ Set_Char_Literal_Value (N, Char_Literal_Value);
++ return N;
++ end Make_Character_Literal;
++
++ function Make_String_Literal (Sloc : Source_Ptr;
++ Strval : String_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_String_Literal, Sloc);
++ begin
++ Set_Strval (N, Strval);
++ return N;
++ end Make_String_Literal;
++
++ function Make_Pragma (Sloc : Source_Ptr;
++ Chars : Name_Id;
++ Pragma_Argument_Associations : List_Id := No_List;
++ Debug_Statement : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Pragma, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ Set_Pragma_Argument_Associations
++ (N, Pragma_Argument_Associations);
++ Set_Debug_Statement (N, Debug_Statement);
++ return N;
++ end Make_Pragma;
++
++ function Make_Pragma_Argument_Association (Sloc : Source_Ptr;
++ Chars : Name_Id := No_Name;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Pragma_Argument_Association, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Pragma_Argument_Association;
++
++ function Make_Defining_Identifier (Sloc : Source_Ptr;
++ Chars : Name_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Entity (N_Defining_Identifier, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ return N;
++ end Make_Defining_Identifier;
++
++ function Make_Full_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Type_Definition : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Full_Type_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discriminant_Specifications (N, Discriminant_Specifications);
++ Set_Type_Definition (N, Type_Definition);
++ return N;
++ end Make_Full_Type_Declaration;
++
++ function Make_Subtype_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Subtype_Indication : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Subtype_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Subtype_Indication (N, Subtype_Indication);
++ return N;
++ end Make_Subtype_Declaration;
++
++ function Make_Subtype_Indication (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Constraint : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Subtype_Indication, Sloc);
++ begin
++ Set_Subtype_Mark (N, Subtype_Mark);
++ Set_Constraint (N, Constraint);
++ return N;
++ end Make_Subtype_Indication;
++
++ function Make_Object_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Aliased_Present : Boolean := False;
++ Constant_Present : Boolean := False;
++ Object_Definition : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Object_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Aliased_Present (N, Aliased_Present);
++ Set_Constant_Present (N, Constant_Present);
++ Set_Object_Definition (N, Object_Definition);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Object_Declaration;
++
++ function Make_Number_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Number_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Number_Declaration;
++
++ function Make_Derived_Type_Definition (Sloc : Source_Ptr;
++ Abstract_Present : Boolean := False;
++ Subtype_Indication : Node_Id;
++ Record_Extension_Part : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Derived_Type_Definition, Sloc);
++ begin
++ Set_Abstract_Present (N, Abstract_Present);
++ Set_Subtype_Indication (N, Subtype_Indication);
++ Set_Record_Extension_Part (N, Record_Extension_Part);
++ return N;
++ end Make_Derived_Type_Definition;
++
++ function Make_Range_Constraint (Sloc : Source_Ptr;
++ Range_Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Range_Constraint, Sloc);
++ begin
++ Set_Range_Expression (N, Range_Expression);
++ return N;
++ end Make_Range_Constraint;
++
++ function Make_Range (Sloc : Source_Ptr;
++ Low_Bound : Node_Id;
++ High_Bound : Node_Id;
++ Includes_Infinities : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Range, Sloc);
++ begin
++ Set_Low_Bound (N, Low_Bound);
++ Set_High_Bound (N, High_Bound);
++ Set_Includes_Infinities (N, Includes_Infinities);
++ return N;
++ end Make_Range;
++
++ function Make_Enumeration_Type_Definition (Sloc : Source_Ptr;
++ Literals : List_Id;
++ End_Label : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Enumeration_Type_Definition, Sloc);
++ begin
++ Set_Literals (N, Literals);
++ Set_End_Label (N, End_Label);
++ return N;
++ end Make_Enumeration_Type_Definition;
++
++ function Make_Defining_Character_Literal (Sloc : Source_Ptr;
++ Chars : Name_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Entity (N_Defining_Character_Literal, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ return N;
++ end Make_Defining_Character_Literal;
++
++ function Make_Signed_Integer_Type_Definition (Sloc : Source_Ptr;
++ Low_Bound : Node_Id;
++ High_Bound : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Signed_Integer_Type_Definition, Sloc);
++ begin
++ Set_Low_Bound (N, Low_Bound);
++ Set_High_Bound (N, High_Bound);
++ return N;
++ end Make_Signed_Integer_Type_Definition;
++
++ function Make_Modular_Type_Definition (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Modular_Type_Definition, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Modular_Type_Definition;
++
++ function Make_Floating_Point_Definition (Sloc : Source_Ptr;
++ Digits_Expression : Node_Id;
++ Real_Range_Specification : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Floating_Point_Definition, Sloc);
++ begin
++ Set_Digits_Expression (N, Digits_Expression);
++ Set_Real_Range_Specification (N, Real_Range_Specification);
++ return N;
++ end Make_Floating_Point_Definition;
++
++ function Make_Real_Range_Specification (Sloc : Source_Ptr;
++ Low_Bound : Node_Id;
++ High_Bound : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Real_Range_Specification, Sloc);
++ begin
++ Set_Low_Bound (N, Low_Bound);
++ Set_High_Bound (N, High_Bound);
++ return N;
++ end Make_Real_Range_Specification;
++
++ function Make_Ordinary_Fixed_Point_Definition (Sloc : Source_Ptr;
++ Delta_Expression : Node_Id;
++ Real_Range_Specification : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Ordinary_Fixed_Point_Definition, Sloc);
++ begin
++ Set_Delta_Expression (N, Delta_Expression);
++ Set_Real_Range_Specification (N, Real_Range_Specification);
++ return N;
++ end Make_Ordinary_Fixed_Point_Definition;
++
++ function Make_Decimal_Fixed_Point_Definition (Sloc : Source_Ptr;
++ Delta_Expression : Node_Id;
++ Digits_Expression : Node_Id;
++ Real_Range_Specification : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Decimal_Fixed_Point_Definition, Sloc);
++ begin
++ Set_Delta_Expression (N, Delta_Expression);
++ Set_Digits_Expression (N, Digits_Expression);
++ Set_Real_Range_Specification (N, Real_Range_Specification);
++ return N;
++ end Make_Decimal_Fixed_Point_Definition;
++
++ function Make_Digits_Constraint (Sloc : Source_Ptr;
++ Digits_Expression : Node_Id;
++ Range_Constraint : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Digits_Constraint, Sloc);
++ begin
++ Set_Digits_Expression (N, Digits_Expression);
++ Set_Range_Constraint (N, Range_Constraint);
++ return N;
++ end Make_Digits_Constraint;
++
++ function Make_Unconstrained_Array_Definition (Sloc : Source_Ptr;
++ Subtype_Marks : List_Id;
++ Component_Definition : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Unconstrained_Array_Definition, Sloc);
++ begin
++ Set_Subtype_Marks (N, Subtype_Marks);
++ Set_Component_Definition (N, Component_Definition);
++ return N;
++ end Make_Unconstrained_Array_Definition;
++
++ function Make_Constrained_Array_Definition (Sloc : Source_Ptr;
++ Discrete_Subtype_Definitions : List_Id;
++ Component_Definition : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Constrained_Array_Definition, Sloc);
++ begin
++ Set_Discrete_Subtype_Definitions
++ (N, Discrete_Subtype_Definitions);
++ Set_Component_Definition (N, Component_Definition);
++ return N;
++ end Make_Constrained_Array_Definition;
++
++ function Make_Component_Definition (Sloc : Source_Ptr;
++ Aliased_Present : Boolean := False;
++ Subtype_Indication : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Component_Definition, Sloc);
++ begin
++ Set_Aliased_Present (N, Aliased_Present);
++ Set_Subtype_Indication (N, Subtype_Indication);
++ return N;
++ end Make_Component_Definition;
++
++ function Make_Discriminant_Specification (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Type : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Discriminant_Specification, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discriminant_Type (N, Discriminant_Type);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Discriminant_Specification;
++
++ function Make_Index_Or_Discriminant_Constraint (Sloc : Source_Ptr;
++ Constraints : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Index_Or_Discriminant_Constraint, Sloc);
++ begin
++ Set_Constraints (N, Constraints);
++ return N;
++ end Make_Index_Or_Discriminant_Constraint;
++
++ function Make_Discriminant_Association (Sloc : Source_Ptr;
++ Selector_Names : List_Id;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Discriminant_Association, Sloc);
++ begin
++ Set_Selector_Names (N, Selector_Names);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Discriminant_Association;
++
++ function Make_Record_Definition (Sloc : Source_Ptr;
++ End_Label : Node_Id := Empty;
++ Abstract_Present : Boolean := False;
++ Tagged_Present : Boolean := False;
++ Limited_Present : Boolean := False;
++ Component_List : Node_Id;
++ Null_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Record_Definition, Sloc);
++ begin
++ Set_End_Label (N, End_Label);
++ Set_Abstract_Present (N, Abstract_Present);
++ Set_Tagged_Present (N, Tagged_Present);
++ Set_Limited_Present (N, Limited_Present);
++ Set_Component_List (N, Component_List);
++ Set_Null_Present (N, Null_Present);
++ return N;
++ end Make_Record_Definition;
++
++ function Make_Component_List (Sloc : Source_Ptr;
++ Component_Items : List_Id;
++ Variant_Part : Node_Id := Empty;
++ Null_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Component_List, Sloc);
++ begin
++ Set_Component_Items (N, Component_Items);
++ Set_Variant_Part (N, Variant_Part);
++ Set_Null_Present (N, Null_Present);
++ return N;
++ end Make_Component_List;
++
++ function Make_Component_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Component_Definition : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Component_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Component_Definition (N, Component_Definition);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Component_Declaration;
++
++ function Make_Variant_Part (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Variants : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Variant_Part, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Variants (N, Variants);
++ return N;
++ end Make_Variant_Part;
++
++ function Make_Variant (Sloc : Source_Ptr;
++ Discrete_Choices : List_Id;
++ Component_List : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Variant, Sloc);
++ begin
++ Set_Discrete_Choices (N, Discrete_Choices);
++ Set_Component_List (N, Component_List);
++ return N;
++ end Make_Variant;
++
++ function Make_Others_Choice (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Others_Choice, Sloc);
++ begin
++ return N;
++ end Make_Others_Choice;
++
++ function Make_Access_To_Object_Definition (Sloc : Source_Ptr;
++ All_Present : Boolean := False;
++ Subtype_Indication : Node_Id;
++ Constant_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Access_To_Object_Definition, Sloc);
++ begin
++ Set_All_Present (N, All_Present);
++ Set_Subtype_Indication (N, Subtype_Indication);
++ Set_Constant_Present (N, Constant_Present);
++ return N;
++ end Make_Access_To_Object_Definition;
++
++ function Make_Access_Function_Definition (Sloc : Source_Ptr;
++ Protected_Present : Boolean := False;
++ Parameter_Specifications : List_Id := No_List;
++ Subtype_Mark : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Access_Function_Definition, Sloc);
++ begin
++ Set_Protected_Present (N, Protected_Present);
++ Set_Parameter_Specifications (N, Parameter_Specifications);
++ Set_Subtype_Mark (N, Subtype_Mark);
++ return N;
++ end Make_Access_Function_Definition;
++
++ function Make_Access_Procedure_Definition (Sloc : Source_Ptr;
++ Protected_Present : Boolean := False;
++ Parameter_Specifications : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Access_Procedure_Definition, Sloc);
++ begin
++ Set_Protected_Present (N, Protected_Present);
++ Set_Parameter_Specifications (N, Parameter_Specifications);
++ return N;
++ end Make_Access_Procedure_Definition;
++
++ function Make_Access_Definition (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Access_Definition, Sloc);
++ begin
++ Set_Subtype_Mark (N, Subtype_Mark);
++ return N;
++ end Make_Access_Definition;
++
++ function Make_Incomplete_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Unknown_Discriminants_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Incomplete_Type_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discriminant_Specifications (N, Discriminant_Specifications);
++ Set_Unknown_Discriminants_Present
++ (N, Unknown_Discriminants_Present);
++ return N;
++ end Make_Incomplete_Type_Declaration;
++
++ function Make_Explicit_Dereference (Sloc : Source_Ptr;
++ Prefix : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Explicit_Dereference, Sloc);
++ begin
++ Set_Prefix (N, Prefix);
++ return N;
++ end Make_Explicit_Dereference;
++
++ function Make_Indexed_Component (Sloc : Source_Ptr;
++ Prefix : Node_Id;
++ Expressions : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Indexed_Component, Sloc);
++ begin
++ Set_Prefix (N, Prefix);
++ Set_Expressions (N, Expressions);
++ return N;
++ end Make_Indexed_Component;
++
++ function Make_Slice (Sloc : Source_Ptr;
++ Prefix : Node_Id;
++ Discrete_Range : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Slice, Sloc);
++ begin
++ Set_Prefix (N, Prefix);
++ Set_Discrete_Range (N, Discrete_Range);
++ return N;
++ end Make_Slice;
++
++ function Make_Selected_Component (Sloc : Source_Ptr;
++ Prefix : Node_Id;
++ Selector_Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Selected_Component, Sloc);
++ begin
++ Set_Prefix (N, Prefix);
++ Set_Selector_Name (N, Selector_Name);
++ return N;
++ end Make_Selected_Component;
++
++ function Make_Attribute_Reference (Sloc : Source_Ptr;
++ Prefix : Node_Id;
++ Attribute_Name : Name_Id;
++ Expressions : List_Id := No_List;
++ Must_Be_Byte_Aligned : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Attribute_Reference, Sloc);
++ begin
++ Set_Prefix (N, Prefix);
++ Set_Attribute_Name (N, Attribute_Name);
++ Set_Expressions (N, Expressions);
++ Set_Must_Be_Byte_Aligned (N, Must_Be_Byte_Aligned);
++ return N;
++ end Make_Attribute_Reference;
++
++ function Make_Aggregate (Sloc : Source_Ptr;
++ Expressions : List_Id := No_List;
++ Component_Associations : List_Id := No_List;
++ Null_Record_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Aggregate, Sloc);
++ begin
++ Set_Expressions (N, Expressions);
++ Set_Component_Associations (N, Component_Associations);
++ Set_Null_Record_Present (N, Null_Record_Present);
++ return N;
++ end Make_Aggregate;
++
++ function Make_Component_Association (Sloc : Source_Ptr;
++ Choices : List_Id;
++ Expression : Node_Id;
++ Box_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Component_Association, Sloc);
++ begin
++ Set_Choices (N, Choices);
++ Set_Expression (N, Expression);
++ Set_Box_Present (N, Box_Present);
++ return N;
++ end Make_Component_Association;
++
++ function Make_Extension_Aggregate (Sloc : Source_Ptr;
++ Ancestor_Part : Node_Id;
++ Expressions : List_Id := No_List;
++ Component_Associations : List_Id := No_List;
++ Null_Record_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Extension_Aggregate, Sloc);
++ begin
++ Set_Ancestor_Part (N, Ancestor_Part);
++ Set_Expressions (N, Expressions);
++ Set_Component_Associations (N, Component_Associations);
++ Set_Null_Record_Present (N, Null_Record_Present);
++ return N;
++ end Make_Extension_Aggregate;
++
++ function Make_Null (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Null, Sloc);
++ begin
++ return N;
++ end Make_Null;
++
++ function Make_And_Then (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_And_Then, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ return N;
++ end Make_And_Then;
++
++ function Make_Or_Else (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Or_Else, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ return N;
++ end Make_Or_Else;
++
++ function Make_In (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_In, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ return N;
++ end Make_In;
++
++ function Make_Not_In (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Not_In, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ return N;
++ end Make_Not_In;
++
++ function Make_Op_And (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_And, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_And);
++ Set_Entity (N, Standard_Op_And);
++ return N;
++ end Make_Op_And;
++
++ function Make_Op_Or (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Or, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Or);
++ Set_Entity (N, Standard_Op_Or);
++ return N;
++ end Make_Op_Or;
++
++ function Make_Op_Xor (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Xor, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Xor);
++ Set_Entity (N, Standard_Op_Xor);
++ return N;
++ end Make_Op_Xor;
++
++ function Make_Op_Eq (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Eq, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Eq);
++ Set_Entity (N, Standard_Op_Eq);
++ return N;
++ end Make_Op_Eq;
++
++ function Make_Op_Ne (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Ne, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Ne);
++ Set_Entity (N, Standard_Op_Ne);
++ return N;
++ end Make_Op_Ne;
++
++ function Make_Op_Lt (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Lt, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Lt);
++ Set_Entity (N, Standard_Op_Lt);
++ return N;
++ end Make_Op_Lt;
++
++ function Make_Op_Le (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Le, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Le);
++ Set_Entity (N, Standard_Op_Le);
++ return N;
++ end Make_Op_Le;
++
++ function Make_Op_Gt (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Gt, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Gt);
++ Set_Entity (N, Standard_Op_Gt);
++ return N;
++ end Make_Op_Gt;
++
++ function Make_Op_Ge (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Ge, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Ge);
++ Set_Entity (N, Standard_Op_Ge);
++ return N;
++ end Make_Op_Ge;
++
++ function Make_Op_Add (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Add, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Add);
++ Set_Entity (N, Standard_Op_Add);
++ return N;
++ end Make_Op_Add;
++
++ function Make_Op_Subtract (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Subtract, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Subtract);
++ Set_Entity (N, Standard_Op_Subtract);
++ return N;
++ end Make_Op_Subtract;
++
++ function Make_Op_Concat (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Concat, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Concat);
++ Set_Entity (N, Standard_Op_Concat);
++ return N;
++ end Make_Op_Concat;
++
++ function Make_Op_Multiply (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Multiply, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Multiply);
++ Set_Entity (N, Standard_Op_Multiply);
++ return N;
++ end Make_Op_Multiply;
++
++ function Make_Op_Divide (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Divide, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Divide);
++ Set_Entity (N, Standard_Op_Divide);
++ return N;
++ end Make_Op_Divide;
++
++ function Make_Op_Mod (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Mod, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Mod);
++ Set_Entity (N, Standard_Op_Mod);
++ return N;
++ end Make_Op_Mod;
++
++ function Make_Op_Rem (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Rem, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Rem);
++ Set_Entity (N, Standard_Op_Rem);
++ return N;
++ end Make_Op_Rem;
++
++ function Make_Op_Expon (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Expon, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Expon);
++ Set_Entity (N, Standard_Op_Expon);
++ return N;
++ end Make_Op_Expon;
++
++ function Make_Op_Plus (Sloc : Source_Ptr;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Plus, Sloc);
++ begin
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Add);
++ Set_Entity (N, Standard_Op_Plus);
++ return N;
++ end Make_Op_Plus;
++
++ function Make_Op_Minus (Sloc : Source_Ptr;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Minus, Sloc);
++ begin
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Subtract);
++ Set_Entity (N, Standard_Op_Minus);
++ return N;
++ end Make_Op_Minus;
++
++ function Make_Op_Abs (Sloc : Source_Ptr;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Abs, Sloc);
++ begin
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Abs);
++ Set_Entity (N, Standard_Op_Abs);
++ return N;
++ end Make_Op_Abs;
++
++ function Make_Op_Not (Sloc : Source_Ptr;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Not, Sloc);
++ begin
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Op_Not);
++ Set_Entity (N, Standard_Op_Not);
++ return N;
++ end Make_Op_Not;
++
++ function Make_Type_Conversion (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Type_Conversion, Sloc);
++ begin
++ Set_Subtype_Mark (N, Subtype_Mark);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Type_Conversion;
++
++ function Make_Qualified_Expression (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Qualified_Expression, Sloc);
++ begin
++ Set_Subtype_Mark (N, Subtype_Mark);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Qualified_Expression;
++
++ function Make_Allocator (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Allocator, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Allocator;
++
++ function Make_Null_Statement (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Null_Statement, Sloc);
++ begin
++ return N;
++ end Make_Null_Statement;
++
++ function Make_Label (Sloc : Source_Ptr;
++ Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Label, Sloc);
++ begin
++ Set_Identifier (N, Identifier);
++ return N;
++ end Make_Label;
++
++ function Make_Assignment_Statement (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Assignment_Statement, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Assignment_Statement;
++
++ function Make_If_Statement (Sloc : Source_Ptr;
++ Condition : Node_Id;
++ Then_Statements : List_Id;
++ Elsif_Parts : List_Id := No_List;
++ Else_Statements : List_Id := No_List;
++ End_Span : Uint := No_Uint)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_If_Statement, Sloc);
++ begin
++ Set_Condition (N, Condition);
++ Set_Then_Statements (N, Then_Statements);
++ Set_Elsif_Parts (N, Elsif_Parts);
++ Set_Else_Statements (N, Else_Statements);
++ Set_End_Span (N, End_Span);
++ return N;
++ end Make_If_Statement;
++
++ function Make_Elsif_Part (Sloc : Source_Ptr;
++ Condition : Node_Id;
++ Then_Statements : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Elsif_Part, Sloc);
++ begin
++ Set_Condition (N, Condition);
++ Set_Then_Statements (N, Then_Statements);
++ return N;
++ end Make_Elsif_Part;
++
++ function Make_Case_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id;
++ Alternatives : List_Id;
++ End_Span : Uint := No_Uint)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Case_Statement, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ Set_Alternatives (N, Alternatives);
++ Set_End_Span (N, End_Span);
++ return N;
++ end Make_Case_Statement;
++
++ function Make_Case_Statement_Alternative (Sloc : Source_Ptr;
++ Discrete_Choices : List_Id;
++ Statements : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Case_Statement_Alternative, Sloc);
++ begin
++ Set_Discrete_Choices (N, Discrete_Choices);
++ Set_Statements (N, Statements);
++ return N;
++ end Make_Case_Statement_Alternative;
++
++ function Make_Loop_Statement (Sloc : Source_Ptr;
++ Identifier : Node_Id := Empty;
++ Iteration_Scheme : Node_Id := Empty;
++ Statements : List_Id;
++ End_Label : Node_Id;
++ Has_Created_Identifier : Boolean := False;
++ Is_Null_Loop : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Loop_Statement, Sloc);
++ begin
++ Set_Identifier (N, Identifier);
++ Set_Iteration_Scheme (N, Iteration_Scheme);
++ Set_Statements (N, Statements);
++ Set_End_Label (N, End_Label);
++ Set_Has_Created_Identifier (N, Has_Created_Identifier);
++ Set_Is_Null_Loop (N, Is_Null_Loop);
++ return N;
++ end Make_Loop_Statement;
++
++ function Make_Iteration_Scheme (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Loop_Parameter_Specification : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Iteration_Scheme, Sloc);
++ begin
++ Set_Condition (N, Condition);
++ Set_Loop_Parameter_Specification
++ (N, Loop_Parameter_Specification);
++ return N;
++ end Make_Iteration_Scheme;
++
++ function Make_Loop_Parameter_Specification (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Reverse_Present : Boolean := False;
++ Discrete_Subtype_Definition : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Loop_Parameter_Specification, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Reverse_Present (N, Reverse_Present);
++ Set_Discrete_Subtype_Definition (N, Discrete_Subtype_Definition);
++ return N;
++ end Make_Loop_Parameter_Specification;
++
++ function Make_Block_Statement (Sloc : Source_Ptr;
++ Identifier : Node_Id := Empty;
++ Declarations : List_Id := No_List;
++ Handled_Statement_Sequence : Node_Id;
++ Has_Created_Identifier : Boolean := False;
++ Is_Task_Allocation_Block : Boolean := False;
++ Is_Asynchronous_Call_Block : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Block_Statement, Sloc);
++ begin
++ Set_Identifier (N, Identifier);
++ Set_Declarations (N, Declarations);
++ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
++ Set_Has_Created_Identifier (N, Has_Created_Identifier);
++ Set_Is_Task_Allocation_Block (N, Is_Task_Allocation_Block);
++ Set_Is_Asynchronous_Call_Block (N, Is_Asynchronous_Call_Block);
++ return N;
++ end Make_Block_Statement;
++
++ function Make_Exit_Statement (Sloc : Source_Ptr;
++ Name : Node_Id := Empty;
++ Condition : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Exit_Statement, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Condition (N, Condition);
++ return N;
++ end Make_Exit_Statement;
++
++ function Make_Goto_Statement (Sloc : Source_Ptr;
++ Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Goto_Statement, Sloc);
++ begin
++ Set_Name (N, Name);
++ return N;
++ end Make_Goto_Statement;
++
++ function Make_Subprogram_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Subprogram_Declaration, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ return N;
++ end Make_Subprogram_Declaration;
++
++ function Make_Abstract_Subprogram_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Abstract_Subprogram_Declaration, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ return N;
++ end Make_Abstract_Subprogram_Declaration;
++
++ function Make_Function_Specification (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Parameter_Specifications : List_Id := No_List;
++ Subtype_Mark : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Function_Specification, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Parameter_Specifications (N, Parameter_Specifications);
++ Set_Subtype_Mark (N, Subtype_Mark);
++ return N;
++ end Make_Function_Specification;
++
++ function Make_Procedure_Specification (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Parameter_Specifications : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Procedure_Specification, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Parameter_Specifications (N, Parameter_Specifications);
++ return N;
++ end Make_Procedure_Specification;
++
++ function Make_Designator (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Designator, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Identifier (N, Identifier);
++ return N;
++ end Make_Designator;
++
++ function Make_Defining_Program_Unit_Name (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Defining_Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Defining_Program_Unit_Name, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Defining_Identifier (N, Defining_Identifier);
++ return N;
++ end Make_Defining_Program_Unit_Name;
++
++ function Make_Operator_Symbol (Sloc : Source_Ptr;
++ Chars : Name_Id;
++ Strval : String_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Operator_Symbol, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ Set_Strval (N, Strval);
++ return N;
++ end Make_Operator_Symbol;
++
++ function Make_Defining_Operator_Symbol (Sloc : Source_Ptr;
++ Chars : Name_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Entity (N_Defining_Operator_Symbol, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ return N;
++ end Make_Defining_Operator_Symbol;
++
++ function Make_Parameter_Specification (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ In_Present : Boolean := False;
++ Out_Present : Boolean := False;
++ Parameter_Type : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Parameter_Specification, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_In_Present (N, In_Present);
++ Set_Out_Present (N, Out_Present);
++ Set_Parameter_Type (N, Parameter_Type);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Parameter_Specification;
++
++ function Make_Subprogram_Body (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Declarations : List_Id;
++ Handled_Statement_Sequence : Node_Id;
++ Bad_Is_Detected : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Subprogram_Body, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ Set_Declarations (N, Declarations);
++ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
++ Set_Bad_Is_Detected (N, Bad_Is_Detected);
++ return N;
++ end Make_Subprogram_Body;
++
++ function Make_Procedure_Call_Statement (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Parameter_Associations : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Procedure_Call_Statement, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Parameter_Associations (N, Parameter_Associations);
++ return N;
++ end Make_Procedure_Call_Statement;
++
++ function Make_Function_Call (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Parameter_Associations : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Function_Call, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Parameter_Associations (N, Parameter_Associations);
++ return N;
++ end Make_Function_Call;
++
++ function Make_Parameter_Association (Sloc : Source_Ptr;
++ Selector_Name : Node_Id;
++ Explicit_Actual_Parameter : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Parameter_Association, Sloc);
++ begin
++ Set_Selector_Name (N, Selector_Name);
++ Set_Explicit_Actual_Parameter (N, Explicit_Actual_Parameter);
++ return N;
++ end Make_Parameter_Association;
++
++ function Make_Return_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Return_Statement, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Return_Statement;
++
++ function Make_Package_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Package_Declaration, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ return N;
++ end Make_Package_Declaration;
++
++ function Make_Package_Specification (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Visible_Declarations : List_Id;
++ Private_Declarations : List_Id := No_List;
++ End_Label : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Package_Specification, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Visible_Declarations (N, Visible_Declarations);
++ Set_Private_Declarations (N, Private_Declarations);
++ Set_End_Label (N, End_Label);
++ return N;
++ end Make_Package_Specification;
++
++ function Make_Package_Body (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Declarations : List_Id;
++ Handled_Statement_Sequence : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Package_Body, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Declarations (N, Declarations);
++ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
++ return N;
++ end Make_Package_Body;
++
++ function Make_Private_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Unknown_Discriminants_Present : Boolean := False;
++ Abstract_Present : Boolean := False;
++ Tagged_Present : Boolean := False;
++ Limited_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Private_Type_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discriminant_Specifications (N, Discriminant_Specifications);
++ Set_Unknown_Discriminants_Present
++ (N, Unknown_Discriminants_Present);
++ Set_Abstract_Present (N, Abstract_Present);
++ Set_Tagged_Present (N, Tagged_Present);
++ Set_Limited_Present (N, Limited_Present);
++ return N;
++ end Make_Private_Type_Declaration;
++
++ function Make_Private_Extension_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Unknown_Discriminants_Present : Boolean := False;
++ Abstract_Present : Boolean := False;
++ Subtype_Indication : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Private_Extension_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discriminant_Specifications (N, Discriminant_Specifications);
++ Set_Unknown_Discriminants_Present
++ (N, Unknown_Discriminants_Present);
++ Set_Abstract_Present (N, Abstract_Present);
++ Set_Subtype_Indication (N, Subtype_Indication);
++ return N;
++ end Make_Private_Extension_Declaration;
++
++ function Make_Use_Package_Clause (Sloc : Source_Ptr;
++ Names : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Use_Package_Clause, Sloc);
++ begin
++ Set_Names (N, Names);
++ return N;
++ end Make_Use_Package_Clause;
++
++ function Make_Use_Type_Clause (Sloc : Source_Ptr;
++ Subtype_Marks : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Use_Type_Clause, Sloc);
++ begin
++ Set_Subtype_Marks (N, Subtype_Marks);
++ return N;
++ end Make_Use_Type_Clause;
++
++ function Make_Object_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Subtype_Mark : Node_Id;
++ Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Object_Renaming_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Subtype_Mark (N, Subtype_Mark);
++ Set_Name (N, Name);
++ return N;
++ end Make_Object_Renaming_Declaration;
++
++ function Make_Exception_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Exception_Renaming_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Name (N, Name);
++ return N;
++ end Make_Exception_Renaming_Declaration;
++
++ function Make_Package_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Package_Renaming_Declaration, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Name (N, Name);
++ return N;
++ end Make_Package_Renaming_Declaration;
++
++ function Make_Subprogram_Renaming_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Subprogram_Renaming_Declaration, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ Set_Name (N, Name);
++ return N;
++ end Make_Subprogram_Renaming_Declaration;
++
++ function Make_Generic_Package_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Generic_Package_Renaming_Declaration, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Name (N, Name);
++ return N;
++ end Make_Generic_Package_Renaming_Declaration;
++
++ function Make_Generic_Procedure_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Generic_Procedure_Renaming_Declaration, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Name (N, Name);
++ return N;
++ end Make_Generic_Procedure_Renaming_Declaration;
++
++ function Make_Generic_Function_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Generic_Function_Renaming_Declaration, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Name (N, Name);
++ return N;
++ end Make_Generic_Function_Renaming_Declaration;
++
++ function Make_Task_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Task_Definition : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Task_Type_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discriminant_Specifications (N, Discriminant_Specifications);
++ Set_Task_Definition (N, Task_Definition);
++ return N;
++ end Make_Task_Type_Declaration;
++
++ function Make_Single_Task_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Task_Definition : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Single_Task_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Task_Definition (N, Task_Definition);
++ return N;
++ end Make_Single_Task_Declaration;
++
++ function Make_Task_Definition (Sloc : Source_Ptr;
++ Visible_Declarations : List_Id;
++ Private_Declarations : List_Id := No_List;
++ End_Label : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Task_Definition, Sloc);
++ begin
++ Set_Visible_Declarations (N, Visible_Declarations);
++ Set_Private_Declarations (N, Private_Declarations);
++ Set_End_Label (N, End_Label);
++ return N;
++ end Make_Task_Definition;
++
++ function Make_Task_Body (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Declarations : List_Id;
++ Handled_Statement_Sequence : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Task_Body, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Declarations (N, Declarations);
++ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
++ return N;
++ end Make_Task_Body;
++
++ function Make_Protected_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Protected_Definition : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Protected_Type_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discriminant_Specifications (N, Discriminant_Specifications);
++ Set_Protected_Definition (N, Protected_Definition);
++ return N;
++ end Make_Protected_Type_Declaration;
++
++ function Make_Single_Protected_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Protected_Definition : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Single_Protected_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Protected_Definition (N, Protected_Definition);
++ return N;
++ end Make_Single_Protected_Declaration;
++
++ function Make_Protected_Definition (Sloc : Source_Ptr;
++ Visible_Declarations : List_Id;
++ Private_Declarations : List_Id := No_List;
++ End_Label : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Protected_Definition, Sloc);
++ begin
++ Set_Visible_Declarations (N, Visible_Declarations);
++ Set_Private_Declarations (N, Private_Declarations);
++ Set_End_Label (N, End_Label);
++ return N;
++ end Make_Protected_Definition;
++
++ function Make_Protected_Body (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Declarations : List_Id;
++ End_Label : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Protected_Body, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Declarations (N, Declarations);
++ Set_End_Label (N, End_Label);
++ return N;
++ end Make_Protected_Body;
++
++ function Make_Entry_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discrete_Subtype_Definition : Node_Id := Empty;
++ Parameter_Specifications : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Entry_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discrete_Subtype_Definition (N, Discrete_Subtype_Definition);
++ Set_Parameter_Specifications (N, Parameter_Specifications);
++ return N;
++ end Make_Entry_Declaration;
++
++ function Make_Accept_Statement (Sloc : Source_Ptr;
++ Entry_Direct_Name : Node_Id;
++ Entry_Index : Node_Id := Empty;
++ Parameter_Specifications : List_Id := No_List;
++ Handled_Statement_Sequence : Node_Id;
++ Declarations : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Accept_Statement, Sloc);
++ begin
++ Set_Entry_Direct_Name (N, Entry_Direct_Name);
++ Set_Entry_Index (N, Entry_Index);
++ Set_Parameter_Specifications (N, Parameter_Specifications);
++ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
++ Set_Declarations (N, Declarations);
++ return N;
++ end Make_Accept_Statement;
++
++ function Make_Entry_Body (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Entry_Body_Formal_Part : Node_Id;
++ Declarations : List_Id;
++ Handled_Statement_Sequence : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Entry_Body, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Entry_Body_Formal_Part (N, Entry_Body_Formal_Part);
++ Set_Declarations (N, Declarations);
++ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
++ return N;
++ end Make_Entry_Body;
++
++ function Make_Entry_Body_Formal_Part (Sloc : Source_Ptr;
++ Entry_Index_Specification : Node_Id := Empty;
++ Parameter_Specifications : List_Id := No_List;
++ Condition : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Entry_Body_Formal_Part, Sloc);
++ begin
++ Set_Entry_Index_Specification (N, Entry_Index_Specification);
++ Set_Parameter_Specifications (N, Parameter_Specifications);
++ Set_Condition (N, Condition);
++ return N;
++ end Make_Entry_Body_Formal_Part;
++
++ function Make_Entry_Index_Specification (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discrete_Subtype_Definition : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Entry_Index_Specification, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Discrete_Subtype_Definition (N, Discrete_Subtype_Definition);
++ return N;
++ end Make_Entry_Index_Specification;
++
++ function Make_Entry_Call_Statement (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Parameter_Associations : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Entry_Call_Statement, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Parameter_Associations (N, Parameter_Associations);
++ return N;
++ end Make_Entry_Call_Statement;
++
++ function Make_Requeue_Statement (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Abort_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Requeue_Statement, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Abort_Present (N, Abort_Present);
++ return N;
++ end Make_Requeue_Statement;
++
++ function Make_Delay_Until_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Delay_Until_Statement, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Delay_Until_Statement;
++
++ function Make_Delay_Relative_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Delay_Relative_Statement, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Delay_Relative_Statement;
++
++ function Make_Selective_Accept (Sloc : Source_Ptr;
++ Select_Alternatives : List_Id;
++ Else_Statements : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Selective_Accept, Sloc);
++ begin
++ Set_Select_Alternatives (N, Select_Alternatives);
++ Set_Else_Statements (N, Else_Statements);
++ return N;
++ end Make_Selective_Accept;
++
++ function Make_Accept_Alternative (Sloc : Source_Ptr;
++ Accept_Statement : Node_Id;
++ Condition : Node_Id := Empty;
++ Statements : List_Id := Empty_List;
++ Pragmas_Before : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Accept_Alternative, Sloc);
++ begin
++ Set_Accept_Statement (N, Accept_Statement);
++ Set_Condition (N, Condition);
++ Set_Statements (N, Statements);
++ Set_Pragmas_Before (N, Pragmas_Before);
++ return N;
++ end Make_Accept_Alternative;
++
++ function Make_Delay_Alternative (Sloc : Source_Ptr;
++ Delay_Statement : Node_Id;
++ Condition : Node_Id := Empty;
++ Statements : List_Id := Empty_List;
++ Pragmas_Before : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Delay_Alternative, Sloc);
++ begin
++ Set_Delay_Statement (N, Delay_Statement);
++ Set_Condition (N, Condition);
++ Set_Statements (N, Statements);
++ Set_Pragmas_Before (N, Pragmas_Before);
++ return N;
++ end Make_Delay_Alternative;
++
++ function Make_Terminate_Alternative (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Pragmas_Before : List_Id := No_List;
++ Pragmas_After : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Terminate_Alternative, Sloc);
++ begin
++ Set_Condition (N, Condition);
++ Set_Pragmas_Before (N, Pragmas_Before);
++ Set_Pragmas_After (N, Pragmas_After);
++ return N;
++ end Make_Terminate_Alternative;
++
++ function Make_Timed_Entry_Call (Sloc : Source_Ptr;
++ Entry_Call_Alternative : Node_Id;
++ Delay_Alternative : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Timed_Entry_Call, Sloc);
++ begin
++ Set_Entry_Call_Alternative (N, Entry_Call_Alternative);
++ Set_Delay_Alternative (N, Delay_Alternative);
++ return N;
++ end Make_Timed_Entry_Call;
++
++ function Make_Entry_Call_Alternative (Sloc : Source_Ptr;
++ Entry_Call_Statement : Node_Id;
++ Statements : List_Id := Empty_List;
++ Pragmas_Before : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Entry_Call_Alternative, Sloc);
++ begin
++ Set_Entry_Call_Statement (N, Entry_Call_Statement);
++ Set_Statements (N, Statements);
++ Set_Pragmas_Before (N, Pragmas_Before);
++ return N;
++ end Make_Entry_Call_Alternative;
++
++ function Make_Conditional_Entry_Call (Sloc : Source_Ptr;
++ Entry_Call_Alternative : Node_Id;
++ Else_Statements : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Conditional_Entry_Call, Sloc);
++ begin
++ Set_Entry_Call_Alternative (N, Entry_Call_Alternative);
++ Set_Else_Statements (N, Else_Statements);
++ return N;
++ end Make_Conditional_Entry_Call;
++
++ function Make_Asynchronous_Select (Sloc : Source_Ptr;
++ Triggering_Alternative : Node_Id;
++ Abortable_Part : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Asynchronous_Select, Sloc);
++ begin
++ Set_Triggering_Alternative (N, Triggering_Alternative);
++ Set_Abortable_Part (N, Abortable_Part);
++ return N;
++ end Make_Asynchronous_Select;
++
++ function Make_Triggering_Alternative (Sloc : Source_Ptr;
++ Triggering_Statement : Node_Id;
++ Statements : List_Id := Empty_List;
++ Pragmas_Before : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Triggering_Alternative, Sloc);
++ begin
++ Set_Triggering_Statement (N, Triggering_Statement);
++ Set_Statements (N, Statements);
++ Set_Pragmas_Before (N, Pragmas_Before);
++ return N;
++ end Make_Triggering_Alternative;
++
++ function Make_Abortable_Part (Sloc : Source_Ptr;
++ Statements : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Abortable_Part, Sloc);
++ begin
++ Set_Statements (N, Statements);
++ return N;
++ end Make_Abortable_Part;
++
++ function Make_Abort_Statement (Sloc : Source_Ptr;
++ Names : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Abort_Statement, Sloc);
++ begin
++ Set_Names (N, Names);
++ return N;
++ end Make_Abort_Statement;
++
++ function Make_Compilation_Unit (Sloc : Source_Ptr;
++ Context_Items : List_Id;
++ Private_Present : Boolean := False;
++ Unit : Node_Id;
++ Aux_Decls_Node : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Compilation_Unit, Sloc);
++ begin
++ Set_Context_Items (N, Context_Items);
++ Set_Private_Present (N, Private_Present);
++ Set_Unit (N, Unit);
++ Set_Aux_Decls_Node (N, Aux_Decls_Node);
++ return N;
++ end Make_Compilation_Unit;
++
++ function Make_Compilation_Unit_Aux (Sloc : Source_Ptr;
++ Declarations : List_Id := No_List;
++ Actions : List_Id := No_List;
++ Pragmas_After : List_Id := No_List;
++ Config_Pragmas : List_Id := Empty_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Compilation_Unit_Aux, Sloc);
++ begin
++ Set_Declarations (N, Declarations);
++ Set_Actions (N, Actions);
++ Set_Pragmas_After (N, Pragmas_After);
++ Set_Config_Pragmas (N, Config_Pragmas);
++ return N;
++ end Make_Compilation_Unit_Aux;
++
++ function Make_With_Clause (Sloc : Source_Ptr;
++ Name : Node_Id;
++ First_Name : Boolean := True;
++ Last_Name : Boolean := True;
++ Limited_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_With_Clause, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_First_Name (N, First_Name);
++ Set_Last_Name (N, Last_Name);
++ Set_Limited_Present (N, Limited_Present);
++ return N;
++ end Make_With_Clause;
++
++ function Make_With_Type_Clause (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Tagged_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_With_Type_Clause, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Tagged_Present (N, Tagged_Present);
++ return N;
++ end Make_With_Type_Clause;
++
++ function Make_Subprogram_Body_Stub (Sloc : Source_Ptr;
++ Specification : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Subprogram_Body_Stub, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ return N;
++ end Make_Subprogram_Body_Stub;
++
++ function Make_Package_Body_Stub (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Package_Body_Stub, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ return N;
++ end Make_Package_Body_Stub;
++
++ function Make_Task_Body_Stub (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Task_Body_Stub, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ return N;
++ end Make_Task_Body_Stub;
++
++ function Make_Protected_Body_Stub (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Protected_Body_Stub, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ return N;
++ end Make_Protected_Body_Stub;
++
++ function Make_Subunit (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Proper_Body : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Subunit, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Proper_Body (N, Proper_Body);
++ return N;
++ end Make_Subunit;
++
++ function Make_Exception_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Exception_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ return N;
++ end Make_Exception_Declaration;
++
++ function Make_Handled_Sequence_Of_Statements (Sloc : Source_Ptr;
++ Statements : List_Id;
++ End_Label : Node_Id := Empty;
++ Exception_Handlers : List_Id := No_List;
++ At_End_Proc : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Handled_Sequence_Of_Statements, Sloc);
++ begin
++ Set_Statements (N, Statements);
++ Set_End_Label (N, End_Label);
++ Set_Exception_Handlers (N, Exception_Handlers);
++ Set_At_End_Proc (N, At_End_Proc);
++ return N;
++ end Make_Handled_Sequence_Of_Statements;
++
++ function Make_Exception_Handler (Sloc : Source_Ptr;
++ Choice_Parameter : Node_Id := Empty;
++ Exception_Choices : List_Id;
++ Statements : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Exception_Handler, Sloc);
++ begin
++ Set_Choice_Parameter (N, Choice_Parameter);
++ Set_Exception_Choices (N, Exception_Choices);
++ Set_Statements (N, Statements);
++ return N;
++ end Make_Exception_Handler;
++
++ function Make_Raise_Statement (Sloc : Source_Ptr;
++ Name : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Raise_Statement, Sloc);
++ begin
++ Set_Name (N, Name);
++ return N;
++ end Make_Raise_Statement;
++
++ function Make_Generic_Subprogram_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Generic_Formal_Declarations : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Generic_Subprogram_Declaration, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ Set_Generic_Formal_Declarations (N, Generic_Formal_Declarations);
++ return N;
++ end Make_Generic_Subprogram_Declaration;
++
++ function Make_Generic_Package_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Generic_Formal_Declarations : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Generic_Package_Declaration, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ Set_Generic_Formal_Declarations (N, Generic_Formal_Declarations);
++ return N;
++ end Make_Generic_Package_Declaration;
++
++ function Make_Package_Instantiation (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id;
++ Generic_Associations : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Package_Instantiation, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Name (N, Name);
++ Set_Generic_Associations (N, Generic_Associations);
++ return N;
++ end Make_Package_Instantiation;
++
++ function Make_Procedure_Instantiation (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id;
++ Generic_Associations : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Procedure_Instantiation, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Name (N, Name);
++ Set_Generic_Associations (N, Generic_Associations);
++ return N;
++ end Make_Procedure_Instantiation;
++
++ function Make_Function_Instantiation (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id;
++ Generic_Associations : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Function_Instantiation, Sloc);
++ begin
++ Set_Defining_Unit_Name (N, Defining_Unit_Name);
++ Set_Name (N, Name);
++ Set_Generic_Associations (N, Generic_Associations);
++ return N;
++ end Make_Function_Instantiation;
++
++ function Make_Generic_Association (Sloc : Source_Ptr;
++ Selector_Name : Node_Id := Empty;
++ Explicit_Generic_Actual_Parameter : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Generic_Association, Sloc);
++ begin
++ Set_Selector_Name (N, Selector_Name);
++ Set_Explicit_Generic_Actual_Parameter
++ (N, Explicit_Generic_Actual_Parameter);
++ return N;
++ end Make_Generic_Association;
++
++ function Make_Formal_Object_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ In_Present : Boolean := False;
++ Out_Present : Boolean := False;
++ Subtype_Mark : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Object_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_In_Present (N, In_Present);
++ Set_Out_Present (N, Out_Present);
++ Set_Subtype_Mark (N, Subtype_Mark);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Formal_Object_Declaration;
++
++ function Make_Formal_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Formal_Type_Definition : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Unknown_Discriminants_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Type_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Formal_Type_Definition (N, Formal_Type_Definition);
++ Set_Discriminant_Specifications (N, Discriminant_Specifications);
++ Set_Unknown_Discriminants_Present
++ (N, Unknown_Discriminants_Present);
++ return N;
++ end Make_Formal_Type_Declaration;
++
++ function Make_Formal_Private_Type_Definition (Sloc : Source_Ptr;
++ Abstract_Present : Boolean := False;
++ Tagged_Present : Boolean := False;
++ Limited_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Private_Type_Definition, Sloc);
++ begin
++ Set_Abstract_Present (N, Abstract_Present);
++ Set_Tagged_Present (N, Tagged_Present);
++ Set_Limited_Present (N, Limited_Present);
++ return N;
++ end Make_Formal_Private_Type_Definition;
++
++ function Make_Formal_Derived_Type_Definition (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Private_Present : Boolean := False;
++ Abstract_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Derived_Type_Definition, Sloc);
++ begin
++ Set_Subtype_Mark (N, Subtype_Mark);
++ Set_Private_Present (N, Private_Present);
++ Set_Abstract_Present (N, Abstract_Present);
++ return N;
++ end Make_Formal_Derived_Type_Definition;
++
++ function Make_Formal_Discrete_Type_Definition (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Discrete_Type_Definition, Sloc);
++ begin
++ return N;
++ end Make_Formal_Discrete_Type_Definition;
++
++ function Make_Formal_Signed_Integer_Type_Definition (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Signed_Integer_Type_Definition, Sloc);
++ begin
++ return N;
++ end Make_Formal_Signed_Integer_Type_Definition;
++
++ function Make_Formal_Modular_Type_Definition (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Modular_Type_Definition, Sloc);
++ begin
++ return N;
++ end Make_Formal_Modular_Type_Definition;
++
++ function Make_Formal_Floating_Point_Definition (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Floating_Point_Definition, Sloc);
++ begin
++ return N;
++ end Make_Formal_Floating_Point_Definition;
++
++ function Make_Formal_Ordinary_Fixed_Point_Definition (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Ordinary_Fixed_Point_Definition, Sloc);
++ begin
++ return N;
++ end Make_Formal_Ordinary_Fixed_Point_Definition;
++
++ function Make_Formal_Decimal_Fixed_Point_Definition (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Decimal_Fixed_Point_Definition, Sloc);
++ begin
++ return N;
++ end Make_Formal_Decimal_Fixed_Point_Definition;
++
++ function Make_Formal_Subprogram_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Default_Name : Node_Id := Empty;
++ Box_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Subprogram_Declaration, Sloc);
++ begin
++ Set_Specification (N, Specification);
++ Set_Default_Name (N, Default_Name);
++ Set_Box_Present (N, Box_Present);
++ return N;
++ end Make_Formal_Subprogram_Declaration;
++
++ function Make_Formal_Package_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Name : Node_Id;
++ Generic_Associations : List_Id := No_List;
++ Box_Present : Boolean := False)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Formal_Package_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ Set_Name (N, Name);
++ Set_Generic_Associations (N, Generic_Associations);
++ Set_Box_Present (N, Box_Present);
++ return N;
++ end Make_Formal_Package_Declaration;
++
++ function Make_Attribute_Definition_Clause (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Chars : Name_Id;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Attribute_Definition_Clause, Sloc);
++ begin
++ Set_Name (N, Name);
++ Set_Chars (N, Chars);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Attribute_Definition_Clause;
++
++ function Make_Enumeration_Representation_Clause (Sloc : Source_Ptr;
++ Identifier : Node_Id;
++ Array_Aggregate : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Enumeration_Representation_Clause, Sloc);
++ begin
++ Set_Identifier (N, Identifier);
++ Set_Array_Aggregate (N, Array_Aggregate);
++ return N;
++ end Make_Enumeration_Representation_Clause;
++
++ function Make_Record_Representation_Clause (Sloc : Source_Ptr;
++ Identifier : Node_Id;
++ Mod_Clause : Node_Id := Empty;
++ Component_Clauses : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Record_Representation_Clause, Sloc);
++ begin
++ Set_Identifier (N, Identifier);
++ Set_Mod_Clause (N, Mod_Clause);
++ Set_Component_Clauses (N, Component_Clauses);
++ return N;
++ end Make_Record_Representation_Clause;
++
++ function Make_Component_Clause (Sloc : Source_Ptr;
++ Component_Name : Node_Id;
++ Position : Node_Id;
++ First_Bit : Node_Id;
++ Last_Bit : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Component_Clause, Sloc);
++ begin
++ Set_Component_Name (N, Component_Name);
++ Set_Position (N, Position);
++ Set_First_Bit (N, First_Bit);
++ Set_Last_Bit (N, Last_Bit);
++ return N;
++ end Make_Component_Clause;
++
++ function Make_Code_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Code_Statement, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Code_Statement;
++
++ function Make_Op_Rotate_Left (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Rotate_Left, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Rotate_Left);
++ Set_Entity (N, Standard_Op_Rotate_Left);
++ return N;
++ end Make_Op_Rotate_Left;
++
++ function Make_Op_Rotate_Right (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Rotate_Right, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Rotate_Right);
++ Set_Entity (N, Standard_Op_Rotate_Right);
++ return N;
++ end Make_Op_Rotate_Right;
++
++ function Make_Op_Shift_Left (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Shift_Left, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Shift_Left);
++ Set_Entity (N, Standard_Op_Shift_Left);
++ return N;
++ end Make_Op_Shift_Left;
++
++ function Make_Op_Shift_Right_Arithmetic (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Shift_Right_Arithmetic, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Shift_Right_Arithmetic);
++ Set_Entity (N, Standard_Op_Shift_Right_Arithmetic);
++ return N;
++ end Make_Op_Shift_Right_Arithmetic;
++
++ function Make_Op_Shift_Right (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Op_Shift_Right, Sloc);
++ begin
++ Set_Left_Opnd (N, Left_Opnd);
++ Set_Right_Opnd (N, Right_Opnd);
++ Set_Chars (N, Name_Shift_Right);
++ Set_Entity (N, Standard_Op_Shift_Right);
++ return N;
++ end Make_Op_Shift_Right;
++
++ function Make_Delta_Constraint (Sloc : Source_Ptr;
++ Delta_Expression : Node_Id;
++ Range_Constraint : Node_Id := Empty)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Delta_Constraint, Sloc);
++ begin
++ Set_Delta_Expression (N, Delta_Expression);
++ Set_Range_Constraint (N, Range_Constraint);
++ return N;
++ end Make_Delta_Constraint;
++
++ function Make_At_Clause (Sloc : Source_Ptr;
++ Identifier : Node_Id;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_At_Clause, Sloc);
++ begin
++ Set_Identifier (N, Identifier);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_At_Clause;
++
++ function Make_Mod_Clause (Sloc : Source_Ptr;
++ Expression : Node_Id;
++ Pragmas_Before : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Mod_Clause, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ Set_Pragmas_Before (N, Pragmas_Before);
++ return N;
++ end Make_Mod_Clause;
++
++ function Make_Conditional_Expression (Sloc : Source_Ptr;
++ Expressions : List_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Conditional_Expression, Sloc);
++ begin
++ Set_Expressions (N, Expressions);
++ return N;
++ end Make_Conditional_Expression;
++
++ function Make_Expanded_Name (Sloc : Source_Ptr;
++ Chars : Name_Id;
++ Prefix : Node_Id;
++ Selector_Name : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Expanded_Name, Sloc);
++ begin
++ Set_Chars (N, Chars);
++ Set_Prefix (N, Prefix);
++ Set_Selector_Name (N, Selector_Name);
++ return N;
++ end Make_Expanded_Name;
++
++ function Make_Free_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Free_Statement, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Free_Statement;
++
++ function Make_Freeze_Entity (Sloc : Source_Ptr;
++ Actions : List_Id := No_List)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Freeze_Entity, Sloc);
++ begin
++ Set_Actions (N, Actions);
++ return N;
++ end Make_Freeze_Entity;
++
++ function Make_Implicit_Label_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Implicit_Label_Declaration, Sloc);
++ begin
++ Set_Defining_Identifier (N, Defining_Identifier);
++ return N;
++ end Make_Implicit_Label_Declaration;
++
++ function Make_Itype_Reference (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Itype_Reference, Sloc);
++ begin
++ return N;
++ end Make_Itype_Reference;
++
++ function Make_Raise_Constraint_Error (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Reason : Uint)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Raise_Constraint_Error, Sloc);
++ begin
++ Set_Condition (N, Condition);
++ Set_Reason (N, Reason);
++ return N;
++ end Make_Raise_Constraint_Error;
++
++ function Make_Raise_Program_Error (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Reason : Uint)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Raise_Program_Error, Sloc);
++ begin
++ Set_Condition (N, Condition);
++ Set_Reason (N, Reason);
++ return N;
++ end Make_Raise_Program_Error;
++
++ function Make_Raise_Storage_Error (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Reason : Uint)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Raise_Storage_Error, Sloc);
++ begin
++ Set_Condition (N, Condition);
++ Set_Reason (N, Reason);
++ return N;
++ end Make_Raise_Storage_Error;
++
++ function Make_Reference (Sloc : Source_Ptr;
++ Prefix : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Reference, Sloc);
++ begin
++ Set_Prefix (N, Prefix);
++ return N;
++ end Make_Reference;
++
++ function Make_Subprogram_Info (Sloc : Source_Ptr;
++ Identifier : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Subprogram_Info, Sloc);
++ begin
++ Set_Identifier (N, Identifier);
++ return N;
++ end Make_Subprogram_Info;
++
++ function Make_Unchecked_Expression (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Unchecked_Expression, Sloc);
++ begin
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Unchecked_Expression;
++
++ function Make_Unchecked_Type_Conversion (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Expression : Node_Id)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Unchecked_Type_Conversion, Sloc);
++ begin
++ Set_Subtype_Mark (N, Subtype_Mark);
++ Set_Expression (N, Expression);
++ return N;
++ end Make_Unchecked_Type_Conversion;
++
++ function Make_Validate_Unchecked_Conversion (Sloc : Source_Ptr)
++ return Node_Id
++ is
++ N : constant Node_Id :=
++ New_Node (N_Validate_Unchecked_Conversion, Sloc);
++ begin
++ return N;
++ end Make_Validate_Unchecked_Conversion;
++
++end Nmake;
+--- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/nmake.ads.orig 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/nmake.ads 2004-06-02 00:52:35.000000000 +0200
+@@ -0,0 +1,1351 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT COMPILER COMPONENTS --
++-- --
++-- N M A K E --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
++-- --
++-- GNAT is free software; you can redistribute it and/or modify it under --
++-- terms of the GNU General Public License as published by the Free Soft- --
++-- ware Foundation; either version 2, or (at your option) any later ver- --
++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
++-- for more details. You should have received a copy of the GNU General --
++-- Public License distributed with GNAT; see file COPYING. If not, write --
++-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
++-- MA 02111-1307, USA. --
++-- --
++-- GNAT was originally developed by the GNAT team at New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc. --
++-- --
++------------------------------------------------------------------------------
++
++pragma Style_Checks (All_Checks);
++-- Turn off subprogram order checking, since the routines here are
++-- generated automatically in order.
++
++
++with Nlists; use Nlists;
++with Types; use Types;
++with Uintp; use Uintp;
++with Urealp; use Urealp;
++
++package Nmake is
++
++-- This package contains a set of routines used to construct tree nodes
++-- using a functional style. There is one routine for each node type defined
++-- in Sinfo with the general interface:
++
++-- function Make_xxx (Sloc : Source_Ptr,
++-- Field_Name_1 : Field_Name_1_Type [:= default]
++-- Field_Name_2 : Field_Name_2_Type [:= default]
++-- ...)
++-- return Node_Id
++
++-- Only syntactic fields are included (i.e. fields marked as "-Sem" or "-Lib"
++-- in the Sinfo spec are excluded). In addition, the following four syntactic
++-- fields are excluded:
++
++-- Prev_Ids
++-- More_Ids
++-- Comes_From_Source
++-- Paren_Count
++
++-- since they are very rarely set in expanded code. If they need to be set,
++-- to other than the default values (False, False, False, zero), then the
++-- appropriate Set_xxx procedures must be used on the returned value.
++
++-- Default values are provided only for flag fields (where the default is
++-- False), and for optional fields. An optional field is one where the
++-- comment line describing the field contains the string "(set to xxx if".
++-- For such fields, a default value of xxx is provided."
++
++-- Warning: since calls to Make_xxx routines are normal function calls, the
++-- arguments can be evaluated in any order. This means that at most one such
++-- argument can have side effects (e.g. be a call to a parse routine).
++
++ function Make_Unused_At_Start (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Unused_At_Start);
++
++ function Make_Unused_At_End (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Unused_At_End);
++
++ function Make_Identifier (Sloc : Source_Ptr;
++ Chars : Name_Id)
++ return Node_Id;
++ pragma Inline (Make_Identifier);
++
++ function Make_Integer_Literal (Sloc : Source_Ptr;
++ Intval : Uint)
++ return Node_Id;
++ pragma Inline (Make_Integer_Literal);
++
++ function Make_Real_Literal (Sloc : Source_Ptr;
++ Realval : Ureal)
++ return Node_Id;
++ pragma Inline (Make_Real_Literal);
++
++ function Make_Character_Literal (Sloc : Source_Ptr;
++ Chars : Name_Id;
++ Char_Literal_Value : Char_Code)
++ return Node_Id;
++ pragma Inline (Make_Character_Literal);
++
++ function Make_String_Literal (Sloc : Source_Ptr;
++ Strval : String_Id)
++ return Node_Id;
++ pragma Inline (Make_String_Literal);
++
++ function Make_Pragma (Sloc : Source_Ptr;
++ Chars : Name_Id;
++ Pragma_Argument_Associations : List_Id := No_List;
++ Debug_Statement : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Pragma);
++
++ function Make_Pragma_Argument_Association (Sloc : Source_Ptr;
++ Chars : Name_Id := No_Name;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Pragma_Argument_Association);
++
++ function Make_Defining_Identifier (Sloc : Source_Ptr;
++ Chars : Name_Id)
++ return Node_Id;
++ pragma Inline (Make_Defining_Identifier);
++
++ function Make_Full_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Type_Definition : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Full_Type_Declaration);
++
++ function Make_Subtype_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Subtype_Indication : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Subtype_Declaration);
++
++ function Make_Subtype_Indication (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Constraint : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Subtype_Indication);
++
++ function Make_Object_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Aliased_Present : Boolean := False;
++ Constant_Present : Boolean := False;
++ Object_Definition : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Object_Declaration);
++
++ function Make_Number_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Number_Declaration);
++
++ function Make_Derived_Type_Definition (Sloc : Source_Ptr;
++ Abstract_Present : Boolean := False;
++ Subtype_Indication : Node_Id;
++ Record_Extension_Part : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Derived_Type_Definition);
++
++ function Make_Range_Constraint (Sloc : Source_Ptr;
++ Range_Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Range_Constraint);
++
++ function Make_Range (Sloc : Source_Ptr;
++ Low_Bound : Node_Id;
++ High_Bound : Node_Id;
++ Includes_Infinities : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Range);
++
++ function Make_Enumeration_Type_Definition (Sloc : Source_Ptr;
++ Literals : List_Id;
++ End_Label : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Enumeration_Type_Definition);
++
++ function Make_Defining_Character_Literal (Sloc : Source_Ptr;
++ Chars : Name_Id)
++ return Node_Id;
++ pragma Inline (Make_Defining_Character_Literal);
++
++ function Make_Signed_Integer_Type_Definition (Sloc : Source_Ptr;
++ Low_Bound : Node_Id;
++ High_Bound : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Signed_Integer_Type_Definition);
++
++ function Make_Modular_Type_Definition (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Modular_Type_Definition);
++
++ function Make_Floating_Point_Definition (Sloc : Source_Ptr;
++ Digits_Expression : Node_Id;
++ Real_Range_Specification : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Floating_Point_Definition);
++
++ function Make_Real_Range_Specification (Sloc : Source_Ptr;
++ Low_Bound : Node_Id;
++ High_Bound : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Real_Range_Specification);
++
++ function Make_Ordinary_Fixed_Point_Definition (Sloc : Source_Ptr;
++ Delta_Expression : Node_Id;
++ Real_Range_Specification : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Ordinary_Fixed_Point_Definition);
++
++ function Make_Decimal_Fixed_Point_Definition (Sloc : Source_Ptr;
++ Delta_Expression : Node_Id;
++ Digits_Expression : Node_Id;
++ Real_Range_Specification : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Decimal_Fixed_Point_Definition);
++
++ function Make_Digits_Constraint (Sloc : Source_Ptr;
++ Digits_Expression : Node_Id;
++ Range_Constraint : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Digits_Constraint);
++
++ function Make_Unconstrained_Array_Definition (Sloc : Source_Ptr;
++ Subtype_Marks : List_Id;
++ Component_Definition : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Unconstrained_Array_Definition);
++
++ function Make_Constrained_Array_Definition (Sloc : Source_Ptr;
++ Discrete_Subtype_Definitions : List_Id;
++ Component_Definition : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Constrained_Array_Definition);
++
++ function Make_Component_Definition (Sloc : Source_Ptr;
++ Aliased_Present : Boolean := False;
++ Subtype_Indication : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Component_Definition);
++
++ function Make_Discriminant_Specification (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Type : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Discriminant_Specification);
++
++ function Make_Index_Or_Discriminant_Constraint (Sloc : Source_Ptr;
++ Constraints : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Index_Or_Discriminant_Constraint);
++
++ function Make_Discriminant_Association (Sloc : Source_Ptr;
++ Selector_Names : List_Id;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Discriminant_Association);
++
++ function Make_Record_Definition (Sloc : Source_Ptr;
++ End_Label : Node_Id := Empty;
++ Abstract_Present : Boolean := False;
++ Tagged_Present : Boolean := False;
++ Limited_Present : Boolean := False;
++ Component_List : Node_Id;
++ Null_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Record_Definition);
++
++ function Make_Component_List (Sloc : Source_Ptr;
++ Component_Items : List_Id;
++ Variant_Part : Node_Id := Empty;
++ Null_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Component_List);
++
++ function Make_Component_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Component_Definition : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Component_Declaration);
++
++ function Make_Variant_Part (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Variants : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Variant_Part);
++
++ function Make_Variant (Sloc : Source_Ptr;
++ Discrete_Choices : List_Id;
++ Component_List : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Variant);
++
++ function Make_Others_Choice (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Others_Choice);
++
++ function Make_Access_To_Object_Definition (Sloc : Source_Ptr;
++ All_Present : Boolean := False;
++ Subtype_Indication : Node_Id;
++ Constant_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Access_To_Object_Definition);
++
++ function Make_Access_Function_Definition (Sloc : Source_Ptr;
++ Protected_Present : Boolean := False;
++ Parameter_Specifications : List_Id := No_List;
++ Subtype_Mark : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Access_Function_Definition);
++
++ function Make_Access_Procedure_Definition (Sloc : Source_Ptr;
++ Protected_Present : Boolean := False;
++ Parameter_Specifications : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Access_Procedure_Definition);
++
++ function Make_Access_Definition (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Access_Definition);
++
++ function Make_Incomplete_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Unknown_Discriminants_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Incomplete_Type_Declaration);
++
++ function Make_Explicit_Dereference (Sloc : Source_Ptr;
++ Prefix : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Explicit_Dereference);
++
++ function Make_Indexed_Component (Sloc : Source_Ptr;
++ Prefix : Node_Id;
++ Expressions : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Indexed_Component);
++
++ function Make_Slice (Sloc : Source_Ptr;
++ Prefix : Node_Id;
++ Discrete_Range : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Slice);
++
++ function Make_Selected_Component (Sloc : Source_Ptr;
++ Prefix : Node_Id;
++ Selector_Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Selected_Component);
++
++ function Make_Attribute_Reference (Sloc : Source_Ptr;
++ Prefix : Node_Id;
++ Attribute_Name : Name_Id;
++ Expressions : List_Id := No_List;
++ Must_Be_Byte_Aligned : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Attribute_Reference);
++
++ function Make_Aggregate (Sloc : Source_Ptr;
++ Expressions : List_Id := No_List;
++ Component_Associations : List_Id := No_List;
++ Null_Record_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Aggregate);
++
++ function Make_Component_Association (Sloc : Source_Ptr;
++ Choices : List_Id;
++ Expression : Node_Id;
++ Box_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Component_Association);
++
++ function Make_Extension_Aggregate (Sloc : Source_Ptr;
++ Ancestor_Part : Node_Id;
++ Expressions : List_Id := No_List;
++ Component_Associations : List_Id := No_List;
++ Null_Record_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Extension_Aggregate);
++
++ function Make_Null (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Null);
++
++ function Make_And_Then (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_And_Then);
++
++ function Make_Or_Else (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Or_Else);
++
++ function Make_In (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_In);
++
++ function Make_Not_In (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Not_In);
++
++ function Make_Op_And (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_And);
++
++ function Make_Op_Or (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Or);
++
++ function Make_Op_Xor (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Xor);
++
++ function Make_Op_Eq (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Eq);
++
++ function Make_Op_Ne (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Ne);
++
++ function Make_Op_Lt (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Lt);
++
++ function Make_Op_Le (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Le);
++
++ function Make_Op_Gt (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Gt);
++
++ function Make_Op_Ge (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Ge);
++
++ function Make_Op_Add (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Add);
++
++ function Make_Op_Subtract (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Subtract);
++
++ function Make_Op_Concat (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Concat);
++
++ function Make_Op_Multiply (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Multiply);
++
++ function Make_Op_Divide (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Divide);
++
++ function Make_Op_Mod (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Mod);
++
++ function Make_Op_Rem (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Rem);
++
++ function Make_Op_Expon (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Expon);
++
++ function Make_Op_Plus (Sloc : Source_Ptr;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Plus);
++
++ function Make_Op_Minus (Sloc : Source_Ptr;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Minus);
++
++ function Make_Op_Abs (Sloc : Source_Ptr;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Abs);
++
++ function Make_Op_Not (Sloc : Source_Ptr;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Not);
++
++ function Make_Type_Conversion (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Type_Conversion);
++
++ function Make_Qualified_Expression (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Qualified_Expression);
++
++ function Make_Allocator (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Allocator);
++
++ function Make_Null_Statement (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Null_Statement);
++
++ function Make_Label (Sloc : Source_Ptr;
++ Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Label);
++
++ function Make_Assignment_Statement (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Assignment_Statement);
++
++ function Make_If_Statement (Sloc : Source_Ptr;
++ Condition : Node_Id;
++ Then_Statements : List_Id;
++ Elsif_Parts : List_Id := No_List;
++ Else_Statements : List_Id := No_List;
++ End_Span : Uint := No_Uint)
++ return Node_Id;
++ pragma Inline (Make_If_Statement);
++
++ function Make_Elsif_Part (Sloc : Source_Ptr;
++ Condition : Node_Id;
++ Then_Statements : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Elsif_Part);
++
++ function Make_Case_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id;
++ Alternatives : List_Id;
++ End_Span : Uint := No_Uint)
++ return Node_Id;
++ pragma Inline (Make_Case_Statement);
++
++ function Make_Case_Statement_Alternative (Sloc : Source_Ptr;
++ Discrete_Choices : List_Id;
++ Statements : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Case_Statement_Alternative);
++
++ function Make_Loop_Statement (Sloc : Source_Ptr;
++ Identifier : Node_Id := Empty;
++ Iteration_Scheme : Node_Id := Empty;
++ Statements : List_Id;
++ End_Label : Node_Id;
++ Has_Created_Identifier : Boolean := False;
++ Is_Null_Loop : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Loop_Statement);
++
++ function Make_Iteration_Scheme (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Loop_Parameter_Specification : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Iteration_Scheme);
++
++ function Make_Loop_Parameter_Specification (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Reverse_Present : Boolean := False;
++ Discrete_Subtype_Definition : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Loop_Parameter_Specification);
++
++ function Make_Block_Statement (Sloc : Source_Ptr;
++ Identifier : Node_Id := Empty;
++ Declarations : List_Id := No_List;
++ Handled_Statement_Sequence : Node_Id;
++ Has_Created_Identifier : Boolean := False;
++ Is_Task_Allocation_Block : Boolean := False;
++ Is_Asynchronous_Call_Block : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Block_Statement);
++
++ function Make_Exit_Statement (Sloc : Source_Ptr;
++ Name : Node_Id := Empty;
++ Condition : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Exit_Statement);
++
++ function Make_Goto_Statement (Sloc : Source_Ptr;
++ Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Goto_Statement);
++
++ function Make_Subprogram_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Subprogram_Declaration);
++
++ function Make_Abstract_Subprogram_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Abstract_Subprogram_Declaration);
++
++ function Make_Function_Specification (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Parameter_Specifications : List_Id := No_List;
++ Subtype_Mark : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Function_Specification);
++
++ function Make_Procedure_Specification (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Parameter_Specifications : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Procedure_Specification);
++
++ function Make_Designator (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Designator);
++
++ function Make_Defining_Program_Unit_Name (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Defining_Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Defining_Program_Unit_Name);
++
++ function Make_Operator_Symbol (Sloc : Source_Ptr;
++ Chars : Name_Id;
++ Strval : String_Id)
++ return Node_Id;
++ pragma Inline (Make_Operator_Symbol);
++
++ function Make_Defining_Operator_Symbol (Sloc : Source_Ptr;
++ Chars : Name_Id)
++ return Node_Id;
++ pragma Inline (Make_Defining_Operator_Symbol);
++
++ function Make_Parameter_Specification (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ In_Present : Boolean := False;
++ Out_Present : Boolean := False;
++ Parameter_Type : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Parameter_Specification);
++
++ function Make_Subprogram_Body (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Declarations : List_Id;
++ Handled_Statement_Sequence : Node_Id;
++ Bad_Is_Detected : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Subprogram_Body);
++
++ function Make_Procedure_Call_Statement (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Parameter_Associations : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Procedure_Call_Statement);
++
++ function Make_Function_Call (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Parameter_Associations : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Function_Call);
++
++ function Make_Parameter_Association (Sloc : Source_Ptr;
++ Selector_Name : Node_Id;
++ Explicit_Actual_Parameter : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Parameter_Association);
++
++ function Make_Return_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Return_Statement);
++
++ function Make_Package_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Package_Declaration);
++
++ function Make_Package_Specification (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Visible_Declarations : List_Id;
++ Private_Declarations : List_Id := No_List;
++ End_Label : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Package_Specification);
++
++ function Make_Package_Body (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Declarations : List_Id;
++ Handled_Statement_Sequence : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Package_Body);
++
++ function Make_Private_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Unknown_Discriminants_Present : Boolean := False;
++ Abstract_Present : Boolean := False;
++ Tagged_Present : Boolean := False;
++ Limited_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Private_Type_Declaration);
++
++ function Make_Private_Extension_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Unknown_Discriminants_Present : Boolean := False;
++ Abstract_Present : Boolean := False;
++ Subtype_Indication : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Private_Extension_Declaration);
++
++ function Make_Use_Package_Clause (Sloc : Source_Ptr;
++ Names : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Use_Package_Clause);
++
++ function Make_Use_Type_Clause (Sloc : Source_Ptr;
++ Subtype_Marks : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Use_Type_Clause);
++
++ function Make_Object_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Subtype_Mark : Node_Id;
++ Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Object_Renaming_Declaration);
++
++ function Make_Exception_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Exception_Renaming_Declaration);
++
++ function Make_Package_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Package_Renaming_Declaration);
++
++ function Make_Subprogram_Renaming_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Subprogram_Renaming_Declaration);
++
++ function Make_Generic_Package_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Generic_Package_Renaming_Declaration);
++
++ function Make_Generic_Procedure_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Generic_Procedure_Renaming_Declaration);
++
++ function Make_Generic_Function_Renaming_Declaration (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Generic_Function_Renaming_Declaration);
++
++ function Make_Task_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Task_Definition : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Task_Type_Declaration);
++
++ function Make_Single_Task_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Task_Definition : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Single_Task_Declaration);
++
++ function Make_Task_Definition (Sloc : Source_Ptr;
++ Visible_Declarations : List_Id;
++ Private_Declarations : List_Id := No_List;
++ End_Label : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Task_Definition);
++
++ function Make_Task_Body (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Declarations : List_Id;
++ Handled_Statement_Sequence : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Task_Body);
++
++ function Make_Protected_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Protected_Definition : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Protected_Type_Declaration);
++
++ function Make_Single_Protected_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Protected_Definition : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Single_Protected_Declaration);
++
++ function Make_Protected_Definition (Sloc : Source_Ptr;
++ Visible_Declarations : List_Id;
++ Private_Declarations : List_Id := No_List;
++ End_Label : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Protected_Definition);
++
++ function Make_Protected_Body (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Declarations : List_Id;
++ End_Label : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Protected_Body);
++
++ function Make_Entry_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discrete_Subtype_Definition : Node_Id := Empty;
++ Parameter_Specifications : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Entry_Declaration);
++
++ function Make_Accept_Statement (Sloc : Source_Ptr;
++ Entry_Direct_Name : Node_Id;
++ Entry_Index : Node_Id := Empty;
++ Parameter_Specifications : List_Id := No_List;
++ Handled_Statement_Sequence : Node_Id;
++ Declarations : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Accept_Statement);
++
++ function Make_Entry_Body (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Entry_Body_Formal_Part : Node_Id;
++ Declarations : List_Id;
++ Handled_Statement_Sequence : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Entry_Body);
++
++ function Make_Entry_Body_Formal_Part (Sloc : Source_Ptr;
++ Entry_Index_Specification : Node_Id := Empty;
++ Parameter_Specifications : List_Id := No_List;
++ Condition : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Entry_Body_Formal_Part);
++
++ function Make_Entry_Index_Specification (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Discrete_Subtype_Definition : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Entry_Index_Specification);
++
++ function Make_Entry_Call_Statement (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Parameter_Associations : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Entry_Call_Statement);
++
++ function Make_Requeue_Statement (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Abort_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Requeue_Statement);
++
++ function Make_Delay_Until_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Delay_Until_Statement);
++
++ function Make_Delay_Relative_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Delay_Relative_Statement);
++
++ function Make_Selective_Accept (Sloc : Source_Ptr;
++ Select_Alternatives : List_Id;
++ Else_Statements : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Selective_Accept);
++
++ function Make_Accept_Alternative (Sloc : Source_Ptr;
++ Accept_Statement : Node_Id;
++ Condition : Node_Id := Empty;
++ Statements : List_Id := Empty_List;
++ Pragmas_Before : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Accept_Alternative);
++
++ function Make_Delay_Alternative (Sloc : Source_Ptr;
++ Delay_Statement : Node_Id;
++ Condition : Node_Id := Empty;
++ Statements : List_Id := Empty_List;
++ Pragmas_Before : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Delay_Alternative);
++
++ function Make_Terminate_Alternative (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Pragmas_Before : List_Id := No_List;
++ Pragmas_After : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Terminate_Alternative);
++
++ function Make_Timed_Entry_Call (Sloc : Source_Ptr;
++ Entry_Call_Alternative : Node_Id;
++ Delay_Alternative : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Timed_Entry_Call);
++
++ function Make_Entry_Call_Alternative (Sloc : Source_Ptr;
++ Entry_Call_Statement : Node_Id;
++ Statements : List_Id := Empty_List;
++ Pragmas_Before : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Entry_Call_Alternative);
++
++ function Make_Conditional_Entry_Call (Sloc : Source_Ptr;
++ Entry_Call_Alternative : Node_Id;
++ Else_Statements : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Conditional_Entry_Call);
++
++ function Make_Asynchronous_Select (Sloc : Source_Ptr;
++ Triggering_Alternative : Node_Id;
++ Abortable_Part : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Asynchronous_Select);
++
++ function Make_Triggering_Alternative (Sloc : Source_Ptr;
++ Triggering_Statement : Node_Id;
++ Statements : List_Id := Empty_List;
++ Pragmas_Before : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Triggering_Alternative);
++
++ function Make_Abortable_Part (Sloc : Source_Ptr;
++ Statements : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Abortable_Part);
++
++ function Make_Abort_Statement (Sloc : Source_Ptr;
++ Names : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Abort_Statement);
++
++ function Make_Compilation_Unit (Sloc : Source_Ptr;
++ Context_Items : List_Id;
++ Private_Present : Boolean := False;
++ Unit : Node_Id;
++ Aux_Decls_Node : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Compilation_Unit);
++
++ function Make_Compilation_Unit_Aux (Sloc : Source_Ptr;
++ Declarations : List_Id := No_List;
++ Actions : List_Id := No_List;
++ Pragmas_After : List_Id := No_List;
++ Config_Pragmas : List_Id := Empty_List)
++ return Node_Id;
++ pragma Inline (Make_Compilation_Unit_Aux);
++
++ function Make_With_Clause (Sloc : Source_Ptr;
++ Name : Node_Id;
++ First_Name : Boolean := True;
++ Last_Name : Boolean := True;
++ Limited_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_With_Clause);
++
++ function Make_With_Type_Clause (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Tagged_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_With_Type_Clause);
++
++ function Make_Subprogram_Body_Stub (Sloc : Source_Ptr;
++ Specification : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Subprogram_Body_Stub);
++
++ function Make_Package_Body_Stub (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Package_Body_Stub);
++
++ function Make_Task_Body_Stub (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Task_Body_Stub);
++
++ function Make_Protected_Body_Stub (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Protected_Body_Stub);
++
++ function Make_Subunit (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Proper_Body : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Subunit);
++
++ function Make_Exception_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Exception_Declaration);
++
++ function Make_Handled_Sequence_Of_Statements (Sloc : Source_Ptr;
++ Statements : List_Id;
++ End_Label : Node_Id := Empty;
++ Exception_Handlers : List_Id := No_List;
++ At_End_Proc : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Handled_Sequence_Of_Statements);
++
++ function Make_Exception_Handler (Sloc : Source_Ptr;
++ Choice_Parameter : Node_Id := Empty;
++ Exception_Choices : List_Id;
++ Statements : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Exception_Handler);
++
++ function Make_Raise_Statement (Sloc : Source_Ptr;
++ Name : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Raise_Statement);
++
++ function Make_Generic_Subprogram_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Generic_Formal_Declarations : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Generic_Subprogram_Declaration);
++
++ function Make_Generic_Package_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Generic_Formal_Declarations : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Generic_Package_Declaration);
++
++ function Make_Package_Instantiation (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id;
++ Generic_Associations : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Package_Instantiation);
++
++ function Make_Procedure_Instantiation (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id;
++ Generic_Associations : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Procedure_Instantiation);
++
++ function Make_Function_Instantiation (Sloc : Source_Ptr;
++ Defining_Unit_Name : Node_Id;
++ Name : Node_Id;
++ Generic_Associations : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Function_Instantiation);
++
++ function Make_Generic_Association (Sloc : Source_Ptr;
++ Selector_Name : Node_Id := Empty;
++ Explicit_Generic_Actual_Parameter : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Generic_Association);
++
++ function Make_Formal_Object_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ In_Present : Boolean := False;
++ Out_Present : Boolean := False;
++ Subtype_Mark : Node_Id;
++ Expression : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Formal_Object_Declaration);
++
++ function Make_Formal_Type_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Formal_Type_Definition : Node_Id;
++ Discriminant_Specifications : List_Id := No_List;
++ Unknown_Discriminants_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Formal_Type_Declaration);
++
++ function Make_Formal_Private_Type_Definition (Sloc : Source_Ptr;
++ Abstract_Present : Boolean := False;
++ Tagged_Present : Boolean := False;
++ Limited_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Formal_Private_Type_Definition);
++
++ function Make_Formal_Derived_Type_Definition (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Private_Present : Boolean := False;
++ Abstract_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Formal_Derived_Type_Definition);
++
++ function Make_Formal_Discrete_Type_Definition (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Formal_Discrete_Type_Definition);
++
++ function Make_Formal_Signed_Integer_Type_Definition (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Formal_Signed_Integer_Type_Definition);
++
++ function Make_Formal_Modular_Type_Definition (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Formal_Modular_Type_Definition);
++
++ function Make_Formal_Floating_Point_Definition (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Formal_Floating_Point_Definition);
++
++ function Make_Formal_Ordinary_Fixed_Point_Definition (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Formal_Ordinary_Fixed_Point_Definition);
++
++ function Make_Formal_Decimal_Fixed_Point_Definition (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Formal_Decimal_Fixed_Point_Definition);
++
++ function Make_Formal_Subprogram_Declaration (Sloc : Source_Ptr;
++ Specification : Node_Id;
++ Default_Name : Node_Id := Empty;
++ Box_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Formal_Subprogram_Declaration);
++
++ function Make_Formal_Package_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id;
++ Name : Node_Id;
++ Generic_Associations : List_Id := No_List;
++ Box_Present : Boolean := False)
++ return Node_Id;
++ pragma Inline (Make_Formal_Package_Declaration);
++
++ function Make_Attribute_Definition_Clause (Sloc : Source_Ptr;
++ Name : Node_Id;
++ Chars : Name_Id;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Attribute_Definition_Clause);
++
++ function Make_Enumeration_Representation_Clause (Sloc : Source_Ptr;
++ Identifier : Node_Id;
++ Array_Aggregate : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Enumeration_Representation_Clause);
++
++ function Make_Record_Representation_Clause (Sloc : Source_Ptr;
++ Identifier : Node_Id;
++ Mod_Clause : Node_Id := Empty;
++ Component_Clauses : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Record_Representation_Clause);
++
++ function Make_Component_Clause (Sloc : Source_Ptr;
++ Component_Name : Node_Id;
++ Position : Node_Id;
++ First_Bit : Node_Id;
++ Last_Bit : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Component_Clause);
++
++ function Make_Code_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Code_Statement);
++
++ function Make_Op_Rotate_Left (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Rotate_Left);
++
++ function Make_Op_Rotate_Right (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Rotate_Right);
++
++ function Make_Op_Shift_Left (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Shift_Left);
++
++ function Make_Op_Shift_Right_Arithmetic (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Shift_Right_Arithmetic);
++
++ function Make_Op_Shift_Right (Sloc : Source_Ptr;
++ Left_Opnd : Node_Id;
++ Right_Opnd : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Op_Shift_Right);
++
++ function Make_Delta_Constraint (Sloc : Source_Ptr;
++ Delta_Expression : Node_Id;
++ Range_Constraint : Node_Id := Empty)
++ return Node_Id;
++ pragma Inline (Make_Delta_Constraint);
++
++ function Make_At_Clause (Sloc : Source_Ptr;
++ Identifier : Node_Id;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_At_Clause);
++
++ function Make_Mod_Clause (Sloc : Source_Ptr;
++ Expression : Node_Id;
++ Pragmas_Before : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Mod_Clause);
++
++ function Make_Conditional_Expression (Sloc : Source_Ptr;
++ Expressions : List_Id)
++ return Node_Id;
++ pragma Inline (Make_Conditional_Expression);
++
++ function Make_Expanded_Name (Sloc : Source_Ptr;
++ Chars : Name_Id;
++ Prefix : Node_Id;
++ Selector_Name : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Expanded_Name);
++
++ function Make_Free_Statement (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Free_Statement);
++
++ function Make_Freeze_Entity (Sloc : Source_Ptr;
++ Actions : List_Id := No_List)
++ return Node_Id;
++ pragma Inline (Make_Freeze_Entity);
++
++ function Make_Implicit_Label_Declaration (Sloc : Source_Ptr;
++ Defining_Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Implicit_Label_Declaration);
++
++ function Make_Itype_Reference (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Itype_Reference);
++
++ function Make_Raise_Constraint_Error (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Reason : Uint)
++ return Node_Id;
++ pragma Inline (Make_Raise_Constraint_Error);
++
++ function Make_Raise_Program_Error (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Reason : Uint)
++ return Node_Id;
++ pragma Inline (Make_Raise_Program_Error);
++
++ function Make_Raise_Storage_Error (Sloc : Source_Ptr;
++ Condition : Node_Id := Empty;
++ Reason : Uint)
++ return Node_Id;
++ pragma Inline (Make_Raise_Storage_Error);
++
++ function Make_Reference (Sloc : Source_Ptr;
++ Prefix : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Reference);
++
++ function Make_Subprogram_Info (Sloc : Source_Ptr;
++ Identifier : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Subprogram_Info);
++
++ function Make_Unchecked_Expression (Sloc : Source_Ptr;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Unchecked_Expression);
++
++ function Make_Unchecked_Type_Conversion (Sloc : Source_Ptr;
++ Subtype_Mark : Node_Id;
++ Expression : Node_Id)
++ return Node_Id;
++ pragma Inline (Make_Unchecked_Type_Conversion);
++
++ function Make_Validate_Unchecked_Conversion (Sloc : Source_Ptr)
++ return Node_Id;
++ pragma Inline (Make_Validate_Unchecked_Conversion);
++
++end Nmake;
+--- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/treeprs.ads.orig 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/treeprs.ads 2004-06-02 00:54:11.000000000 +0200
+@@ -0,0 +1,801 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT COMPILER COMPONENTS --
++-- --
++-- T R E E P R S --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
++-- --
++-- GNAT is free software; you can redistribute it and/or modify it under --
++-- terms of the GNU General Public License as published by the Free Soft- --
++-- ware Foundation; either version 2, or (at your option) any later ver- --
++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
++-- for more details. You should have received a copy of the GNU General --
++-- Public License distributed with GNAT; see file COPYING. If not, write --
++-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
++-- MA 02111-1307, USA. --
++-- --
++-- GNAT was originally developed by the GNAT team at New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc. --
++-- --
++------------------------------------------------------------------------------
++
++
++-- This package contains the declaration of the string used by the Tree_Print
++-- package. It must be updated whenever the arrangements of the field names
++-- in package Sinfo is changed. The utility program XTREEPRS is used to
++-- do this update correctly using the template treeprs.adt as input.
++
++with Sinfo; use Sinfo;
++
++package Treeprs is
++
++ --------------------------------
++ -- String Data for Node Print --
++ --------------------------------
++
++ -- String data for print out. The Pchars array is a long string with the
++ -- the entry for each node type consisting of a single blank, followed by
++ -- a series of entries, one for each Op or Flag field used for the node.
++ -- Each entry has a single character which identifies the field, followed
++ -- by the synonym name. The starting location for a given node type is
++ -- found from the corresponding entry in the Pchars_Pos_Array.
++
++ -- The following characters identify the field. These are characters
++ -- which could never occur in a field name, so they also mark the
++ -- end of the previous name.
++
++ subtype Fchar is Character range '#' .. '9';
++
++ F_Field1 : constant Fchar := '#'; -- Character'Val (16#23#)
++ F_Field2 : constant Fchar := '$'; -- Character'Val (16#24#)
++ F_Field3 : constant Fchar := '%'; -- Character'Val (16#25#)
++ F_Field4 : constant Fchar := '&'; -- Character'Val (16#26#)
++ F_Field5 : constant Fchar := '''; -- Character'Val (16#27#)
++ F_Flag1 : constant Fchar := '('; -- Character'Val (16#28#)
++ F_Flag2 : constant Fchar := ')'; -- Character'Val (16#29#)
++ F_Flag3 : constant Fchar := '*'; -- Character'Val (16#2A#)
++ F_Flag4 : constant Fchar := '+'; -- Character'Val (16#2B#)
++ F_Flag5 : constant Fchar := ','; -- Character'Val (16#2C#)
++ F_Flag6 : constant Fchar := '-'; -- Character'Val (16#2D#)
++ F_Flag7 : constant Fchar := '.'; -- Character'Val (16#2E#)
++ F_Flag8 : constant Fchar := '/'; -- Character'Val (16#2F#)
++ F_Flag9 : constant Fchar := '0'; -- Character'Val (16#30#)
++ F_Flag10 : constant Fchar := '1'; -- Character'Val (16#31#)
++ F_Flag11 : constant Fchar := '2'; -- Character'Val (16#32#)
++ F_Flag12 : constant Fchar := '3'; -- Character'Val (16#33#)
++ F_Flag13 : constant Fchar := '4'; -- Character'Val (16#34#)
++ F_Flag14 : constant Fchar := '5'; -- Character'Val (16#35#)
++ F_Flag15 : constant Fchar := '6'; -- Character'Val (16#36#)
++ F_Flag16 : constant Fchar := '7'; -- Character'Val (16#37#)
++ F_Flag17 : constant Fchar := '8'; -- Character'Val (16#38#)
++ F_Flag18 : constant Fchar := '9'; -- Character'Val (16#39#)
++
++ -- Note this table does not include entity field and flags whose access
++ -- functions are in Einfo (these are handled by the Print_Entity_Info
++ -- procedure in Treepr, which uses the routines in Einfo to get the
++ -- proper symbolic information). In addition, the following fields are
++ -- handled by Treepr, and do not appear in the Pchars array:
++
++ -- Analyzed
++ -- Cannot_Be_Constant
++ -- Chars
++ -- Comes_From_Source
++ -- Error_Posted
++ -- Etype
++ -- Is_Controlling_Actual
++ -- Is_Overloaded
++ -- Is_Static_Expression
++ -- Left_Opnd
++ -- Must_Check_Expr
++ -- Must_Not_Freeze
++ -- No_Overflow_Expr
++ -- Paren_Count
++ -- Raises_Constraint_Error
++ -- Right_Opnd
++
++ Pchars : constant String :=
++ -- Unused_At_Start
++ "" &
++ -- At_Clause
++ "#Identifier%Expression" &
++ -- Component_Clause
++ "#Component_Name$Position%First_Bit&Last_Bit" &
++ -- Enumeration_Representation_Clause
++ "#Identifier%Array_Aggregate&Next_Rep_Item" &
++ -- Mod_Clause
++ "%Expression&Pragmas_Before" &
++ -- Record_Representation_Clause
++ "#Identifier$Mod_Clause%Component_Clauses&Next_Rep_Item" &
++ -- Attribute_Definition_Clause
++ "$Name%Expression&Next_Rep_Item+From_At_Mod2Check_Address_Alignment" &
++ -- Empty
++ "" &
++ -- Pragma
++ "$Pragma_Argument_Associations%Debug_Statement&Next_Rep_Item" &
++ -- Pragma_Argument_Association
++ "%Expression" &
++ -- Error
++ "" &
++ -- Defining_Character_Literal
++ "$Next_Entity%Scope" &
++ -- Defining_Identifier
++ "$Next_Entity%Scope" &
++ -- Defining_Operator_Symbol
++ "$Next_Entity%Scope" &
++ -- Expanded_Name
++ "%Prefix$Selector_Name&Entity&Associated_Node4Redundant_Use2Has_Privat" &
++ "e_View" &
++ -- Identifier
++ "&Entity&Associated_Node$Original_Discriminant4Redundant_Use2Has_Priva" &
++ "te_View" &
++ -- Operator_Symbol
++ "%Strval&Entity&Associated_Node2Has_Private_View" &
++ -- Character_Literal
++ "$Char_Literal_Value&Entity&Associated_Node2Has_Private_View" &
++ -- Op_Add
++ "" &
++ -- Op_Concat
++ "4Is_Component_Left_Opnd5Is_Component_Right_Opnd" &
++ -- Op_Expon
++ "4Is_Power_Of_2_For_Shift" &
++ -- Op_Subtract
++ "" &
++ -- Op_Divide
++ "5Treat_Fixed_As_Integer4Do_Division_Check9Rounded_Result" &
++ -- Op_Mod
++ "5Treat_Fixed_As_Integer4Do_Division_Check" &
++ -- Op_Multiply
++ "5Treat_Fixed_As_Integer9Rounded_Result" &
++ -- Op_Rem
++ "5Treat_Fixed_As_Integer4Do_Division_Check" &
++ -- Op_And
++ "+Do_Length_Check" &
++ -- Op_Eq
++ "" &
++ -- Op_Ge
++ "" &
++ -- Op_Gt
++ "" &
++ -- Op_Le
++ "" &
++ -- Op_Lt
++ "" &
++ -- Op_Ne
++ "" &
++ -- Op_Or
++ "+Do_Length_Check" &
++ -- Op_Xor
++ "+Do_Length_Check" &
++ -- Op_Rotate_Left
++ "+Shift_Count_OK" &
++ -- Op_Rotate_Right
++ "+Shift_Count_OK" &
++ -- Op_Shift_Left
++ "+Shift_Count_OK" &
++ -- Op_Shift_Right
++ "+Shift_Count_OK" &
++ -- Op_Shift_Right_Arithmetic
++ "+Shift_Count_OK" &
++ -- Op_Abs
++ "" &
++ -- Op_Minus
++ "" &
++ -- Op_Not
++ "" &
++ -- Op_Plus
++ "" &
++ -- Attribute_Reference
++ "%Prefix$Attribute_Name#Expressions&Entity&Associated_Node8Do_Overflow" &
++ "_Check4Redundant_Use+OK_For_Stream5Must_Be_Byte_Aligned" &
++ -- And_Then
++ "#Actions" &
++ -- Conditional_Expression
++ "#Expressions$Then_Actions%Else_Actions" &
++ -- Explicit_Dereference
++ "%Prefix" &
++ -- Function_Call
++ "$Name%Parameter_Associations&First_Named_Actual#Controlling_Argument4" &
++ "Do_Tag_Check5No_Elaboration_Check8Parameter_List_Truncated9ABE_Is_" &
++ "Certain" &
++ -- In
++ "" &
++ -- Indexed_Component
++ "%Prefix#Expressions" &
++ -- Integer_Literal
++ "$Original_Entity%Intval4Print_In_Hex" &
++ -- Not_In
++ "" &
++ -- Null
++ "" &
++ -- Or_Else
++ "#Actions" &
++ -- Procedure_Call_Statement
++ "$Name%Parameter_Associations&First_Named_Actual#Controlling_Argument4" &
++ "Do_Tag_Check5No_Elaboration_Check8Parameter_List_Truncated9ABE_Is_" &
++ "Certain" &
++ -- Qualified_Expression
++ "&Subtype_Mark%Expression" &
++ -- Raise_Constraint_Error
++ "#Condition%Reason" &
++ -- Raise_Program_Error
++ "#Condition%Reason" &
++ -- Raise_Storage_Error
++ "#Condition%Reason" &
++ -- Aggregate
++ "#Expressions$Component_Associations8Null_Record_Present%Aggregate_Bou" &
++ "nds&Associated_Node+Static_Processing_OK9Compile_Time_Known_Aggreg" &
++ "ate2Expansion_Delayed" &
++ -- Allocator
++ "%Expression#Storage_Pool&Procedure_To_Call4No_Initialization8Do_Stora" &
++ "ge_Check" &
++ -- Extension_Aggregate
++ "%Ancestor_Part&Associated_Node#Expressions$Component_Associations8Nul" &
++ "l_Record_Present2Expansion_Delayed" &
++ -- Range
++ "#Low_Bound$High_Bound2Includes_Infinities" &
++ -- Real_Literal
++ "$Original_Entity%Realval&Corresponding_Integer_Value2Is_Machine_Numbe" &
++ "r" &
++ -- Reference
++ "%Prefix" &
++ -- Selected_Component
++ "%Prefix$Selector_Name&Associated_Node4Do_Discriminant_Check2Is_In_Dis" &
++ "criminant_Check" &
++ -- Slice
++ "%Prefix&Discrete_Range" &
++ -- String_Literal
++ "%Strval2Has_Wide_Character" &
++ -- Subprogram_Info
++ "#Identifier" &
++ -- Type_Conversion
++ "&Subtype_Mark%Expression4Do_Tag_Check+Do_Length_Check8Do_Overflow_Che" &
++ "ck2Float_Truncate9Rounded_Result5Conversion_OK" &
++ -- Unchecked_Expression
++ "%Expression" &
++ -- Unchecked_Type_Conversion
++ "&Subtype_Mark%Expression2Kill_Range_Check8No_Truncation" &
++ -- Subtype_Indication
++ "&Subtype_Mark%Constraint/Must_Not_Freeze" &
++ -- Component_Declaration
++ "#Defining_Identifier&Component_Definition%Expression,More_Ids-Prev_Id" &
++ "s" &
++ -- Entry_Declaration
++ "#Defining_Identifier&Discrete_Subtype_Definition%Parameter_Specificat" &
++ "ions'Corresponding_Body" &
++ -- Formal_Object_Declaration
++ "#Defining_Identifier6In_Present8Out_Present&Subtype_Mark%Expression,M" &
++ "ore_Ids-Prev_Ids" &
++ -- Formal_Type_Declaration
++ "#Defining_Identifier%Formal_Type_Definition&Discriminant_Specificatio" &
++ "ns4Unknown_Discriminants_Present" &
++ -- Full_Type_Declaration
++ "#Defining_Identifier&Discriminant_Specifications%Type_Definition2Disc" &
++ "r_Check_Funcs_Built" &
++ -- Incomplete_Type_Declaration
++ "#Defining_Identifier&Discriminant_Specifications4Unknown_Discriminant" &
++ "s_Present" &
++ -- Loop_Parameter_Specification
++ "#Defining_Identifier6Reverse_Present&Discrete_Subtype_Definition" &
++ -- Object_Declaration
++ "#Defining_Identifier+Aliased_Present8Constant_Present&Object_Definiti" &
++ "on%Expression$Handler_List_Entry'Corresponding_Generic_Association" &
++ ",More_Ids-Prev_Ids4No_Initialization6Assignment_OK2Exception_Junk5" &
++ "Delay_Finalize_Attach7Is_Subprogram_Descriptor" &
++ -- Protected_Type_Declaration
++ "#Defining_Identifier&Discriminant_Specifications%Protected_Definition" &
++ "'Corresponding_Body" &
++ -- Private_Extension_Declaration
++ "#Defining_Identifier&Discriminant_Specifications4Unknown_Discriminant" &
++ "s_Present+Abstract_Present'Subtype_Indication" &
++ -- Private_Type_Declaration
++ "#Defining_Identifier&Discriminant_Specifications4Unknown_Discriminant" &
++ "s_Present+Abstract_Present6Tagged_Present8Limited_Present" &
++ -- Subtype_Declaration
++ "#Defining_Identifier'Subtype_Indication&Generic_Parent_Type2Exception" &
++ "_Junk" &
++ -- Function_Specification
++ "#Defining_Unit_Name$Elaboration_Boolean%Parameter_Specifications&Subt" &
++ "ype_Mark'Generic_Parent" &
++ -- Procedure_Specification
++ "#Defining_Unit_Name$Elaboration_Boolean%Parameter_Specifications'Gene" &
++ "ric_Parent" &
++ -- Entry_Index_Specification
++ "#Defining_Identifier&Discrete_Subtype_Definition" &
++ -- Freeze_Entity
++ "&Entity$Access_Types_To_Process%TSS_Elist#Actions'First_Subtype_Link" &
++ -- Access_Function_Definition
++ "6Protected_Present%Parameter_Specifications&Subtype_Mark" &
++ -- Access_Procedure_Definition
++ "6Protected_Present%Parameter_Specifications" &
++ -- Task_Type_Declaration
++ "#Defining_Identifier$Task_Body_Procedure&Discriminant_Specifications%" &
++ "Task_Definition'Corresponding_Body" &
++ -- Package_Body_Stub
++ "#Defining_Identifier&Library_Unit'Corresponding_Body" &
++ -- Protected_Body_Stub
++ "#Defining_Identifier&Library_Unit'Corresponding_Body" &
++ -- Subprogram_Body_Stub
++ "#Specification&Library_Unit'Corresponding_Body" &
++ -- Task_Body_Stub
++ "#Defining_Identifier&Library_Unit'Corresponding_Body" &
++ -- Function_Instantiation
++ "#Defining_Unit_Name$Name%Generic_Associations&Parent_Spec'Instance_Sp" &
++ "ec9ABE_Is_Certain" &
++ -- Package_Instantiation
++ "#Defining_Unit_Name$Name%Generic_Associations&Parent_Spec'Instance_Sp" &
++ "ec9ABE_Is_Certain" &
++ -- Procedure_Instantiation
++ "#Defining_Unit_Name$Name&Parent_Spec%Generic_Associations'Instance_Sp" &
++ "ec9ABE_Is_Certain" &
++ -- Package_Body
++ "#Defining_Unit_Name$Declarations&Handled_Statement_Sequence'Correspon" &
++ "ding_Spec4Was_Originally_Stub" &
++ -- Subprogram_Body
++ "#Specification$Declarations&Handled_Statement_Sequence%Activation_Cha" &
++ "in_Entity'Corresponding_Spec+Acts_As_Spec6Bad_Is_Detected8Do_Stora" &
++ "ge_Check-Has_Priority_Pragma.Is_Protected_Subprogram_Body,Is_Task_" &
++ "Master4Was_Originally_Stub" &
++ -- Protected_Body
++ "#Defining_Identifier$Declarations&End_Label'Corresponding_Spec4Was_Or" &
++ "iginally_Stub" &
++ -- Task_Body
++ "#Defining_Identifier$Declarations&Handled_Statement_Sequence,Is_Task_" &
++ "Master%Activation_Chain_Entity'Corresponding_Spec4Was_Originally_S" &
++ "tub" &
++ -- Implicit_Label_Declaration
++ "#Defining_Identifier$Label_Construct" &
++ -- Package_Declaration
++ "#Specification'Corresponding_Body&Parent_Spec%Activation_Chain_Entity" &
++ -- Single_Task_Declaration
++ "#Defining_Identifier%Task_Definition" &
++ -- Subprogram_Declaration
++ "#Specification%Body_To_Inline'Corresponding_Body&Parent_Spec" &
++ -- Use_Package_Clause
++ "$Names%Next_Use_Clause&Hidden_By_Use_Clause" &
++ -- Generic_Package_Declaration
++ "#Specification'Corresponding_Body$Generic_Formal_Declarations&Parent_" &
++ "Spec%Activation_Chain_Entity" &
++ -- Generic_Subprogram_Declaration
++ "#Specification'Corresponding_Body$Generic_Formal_Declarations&Parent_" &
++ "Spec" &
++ -- Constrained_Array_Definition
++ "$Discrete_Subtype_Definitions&Component_Definition" &
++ -- Unconstrained_Array_Definition
++ "$Subtype_Marks&Component_Definition" &
++ -- Exception_Renaming_Declaration
++ "#Defining_Identifier$Name" &
++ -- Object_Renaming_Declaration
++ "#Defining_Identifier&Subtype_Mark$Name'Corresponding_Generic_Associat" &
++ "ion" &
++ -- Package_Renaming_Declaration
++ "#Defining_Unit_Name$Name&Parent_Spec" &
++ -- Subprogram_Renaming_Declaration
++ "#Specification$Name&Parent_Spec'Corresponding_Spec" &
++ -- Generic_Function_Renaming_Declaration
++ "#Defining_Unit_Name$Name&Parent_Spec" &
++ -- Generic_Package_Renaming_Declaration
++ "#Defining_Unit_Name$Name&Parent_Spec" &
++ -- Generic_Procedure_Renaming_Declaration
++ "#Defining_Unit_Name$Name&Parent_Spec" &
++ -- Abort_Statement
++ "$Names" &
++ -- Accept_Statement
++ "#Entry_Direct_Name'Entry_Index%Parameter_Specifications&Handled_State" &
++ "ment_Sequence$Declarations" &
++ -- Assignment_Statement
++ "$Name%Expression4Do_Tag_Check+Do_Length_Check,Forwards_OK-Backwards_O" &
++ "K.No_Ctrl_Actions" &
++ -- Asynchronous_Select
++ "#Triggering_Alternative$Abortable_Part" &
++ -- Block_Statement
++ "#Identifier$Declarations&Handled_Statement_Sequence,Is_Task_Master%Ac" &
++ "tivation_Chain_Entity6Has_Created_Identifier-Is_Task_Allocation_Bl" &
++ "ock.Is_Asynchronous_Call_Block" &
++ -- Case_Statement
++ "%Expression&Alternatives'End_Span" &
++ -- Code_Statement
++ "%Expression" &
++ -- Conditional_Entry_Call
++ "#Entry_Call_Alternative&Else_Statements" &
++ -- Delay_Relative_Statement
++ "%Expression" &
++ -- Delay_Until_Statement
++ "%Expression" &
++ -- Entry_Call_Statement
++ "$Name%Parameter_Associations&First_Named_Actual" &
++ -- Free_Statement
++ "%Expression#Storage_Pool&Procedure_To_Call" &
++ -- Goto_Statement
++ "$Name2Exception_Junk" &
++ -- Loop_Statement
++ "#Identifier$Iteration_Scheme%Statements&End_Label6Has_Created_Identif" &
++ "ier7Is_Null_Loop" &
++ -- Null_Statement
++ "" &
++ -- Raise_Statement
++ "$Name" &
++ -- Requeue_Statement
++ "$Name6Abort_Present" &
++ -- Return_Statement
++ "%Expression#Storage_Pool&Procedure_To_Call4Do_Tag_Check$Return_Type,B" &
++ "y_Ref" &
++ -- Selective_Accept
++ "#Select_Alternatives&Else_Statements" &
++ -- Timed_Entry_Call
++ "#Entry_Call_Alternative&Delay_Alternative" &
++ -- Exit_Statement
++ "$Name#Condition" &
++ -- If_Statement
++ "#Condition$Then_Statements%Elsif_Parts&Else_Statements'End_Span" &
++ -- Accept_Alternative
++ "$Accept_Statement#Condition%Statements&Pragmas_Before'Accept_Handler_" &
++ "Records" &
++ -- Delay_Alternative
++ "$Delay_Statement#Condition%Statements&Pragmas_Before" &
++ -- Elsif_Part
++ "#Condition$Then_Statements%Condition_Actions" &
++ -- Entry_Body_Formal_Part
++ "&Entry_Index_Specification%Parameter_Specifications#Condition" &
++ -- Iteration_Scheme
++ "#Condition%Condition_Actions&Loop_Parameter_Specification" &
++ -- Terminate_Alternative
++ "#Condition&Pragmas_Before'Pragmas_After" &
++ -- Abortable_Part
++ "%Statements" &
++ -- Abstract_Subprogram_Declaration
++ "#Specification" &
++ -- Access_Definition
++ "&Subtype_Mark" &
++ -- Access_To_Object_Definition
++ "6All_Present'Subtype_Indication8Constant_Present" &
++ -- Case_Statement_Alternative
++ "&Discrete_Choices%Statements" &
++ -- Compilation_Unit
++ "&Library_Unit#Context_Items6Private_Present$Unit'Aux_Decls_Node8Has_N" &
++ "o_Elaboration_Code4Body_Required+Acts_As_Spec%First_Inlined_Subpro" &
++ "gram" &
++ -- Compilation_Unit_Aux
++ "$Declarations#Actions'Pragmas_After&Config_Pragmas" &
++ -- Component_Association
++ "#Choices$Loop_Actions%Expression6Box_Present" &
++ -- Component_Definition
++ "+Aliased_Present'Subtype_Indication" &
++ -- Component_List
++ "%Component_Items&Variant_Part4Null_Present" &
++ -- Derived_Type_Definition
++ "+Abstract_Present'Subtype_Indication%Record_Extension_Part" &
++ -- Decimal_Fixed_Point_Definition
++ "%Delta_Expression$Digits_Expression&Real_Range_Specification" &
++ -- Defining_Program_Unit_Name
++ "$Name#Defining_Identifier" &
++ -- Delta_Constraint
++ "%Delta_Expression&Range_Constraint" &
++ -- Designator
++ "$Name#Identifier" &
++ -- Digits_Constraint
++ "$Digits_Expression&Range_Constraint" &
++ -- Discriminant_Association
++ "#Selector_Names%Expression" &
++ -- Discriminant_Specification
++ "#Defining_Identifier'Discriminant_Type%Expression,More_Ids-Prev_Ids" &
++ -- Enumeration_Type_Definition
++ "#Literals&End_Label" &
++ -- Entry_Body
++ "#Defining_Identifier'Entry_Body_Formal_Part$Declarations&Handled_Stat" &
++ "ement_Sequence%Activation_Chain_Entity" &
++ -- Entry_Call_Alternative
++ "#Entry_Call_Statement%Statements&Pragmas_Before" &
++ -- Exception_Declaration
++ "#Defining_Identifier%Expression,More_Ids-Prev_Ids" &
++ -- Exception_Handler
++ "$Choice_Parameter&Exception_Choices%Statements,Zero_Cost_Handling" &
++ -- Floating_Point_Definition
++ "$Digits_Expression&Real_Range_Specification" &
++ -- Formal_Decimal_Fixed_Point_Definition
++ "" &
++ -- Formal_Derived_Type_Definition
++ "&Subtype_Mark6Private_Present+Abstract_Present" &
++ -- Formal_Discrete_Type_Definition
++ "" &
++ -- Formal_Floating_Point_Definition
++ "" &
++ -- Formal_Modular_Type_Definition
++ "" &
++ -- Formal_Ordinary_Fixed_Point_Definition
++ "" &
++ -- Formal_Package_Declaration
++ "#Defining_Identifier$Name%Generic_Associations6Box_Present'Instance_S" &
++ "pec9ABE_Is_Certain" &
++ -- Formal_Private_Type_Definition
++ "+Abstract_Present6Tagged_Present8Limited_Present" &
++ -- Formal_Signed_Integer_Type_Definition
++ "" &
++ -- Formal_Subprogram_Declaration
++ "#Specification$Default_Name6Box_Present" &
++ -- Generic_Association
++ "$Selector_Name#Explicit_Generic_Actual_Parameter" &
++ -- Handled_Sequence_Of_Statements
++ "%Statements&End_Label'Exception_Handlers#At_End_Proc$First_Real_State" &
++ "ment,Zero_Cost_Handling" &
++ -- Index_Or_Discriminant_Constraint
++ "#Constraints" &
++ -- Itype_Reference
++ "#Itype" &
++ -- Label
++ "#Identifier2Exception_Junk" &
++ -- Modular_Type_Definition
++ "%Expression" &
++ -- Number_Declaration
++ "#Defining_Identifier%Expression,More_Ids-Prev_Ids" &
++ -- Ordinary_Fixed_Point_Definition
++ "%Delta_Expression&Real_Range_Specification" &
++ -- Others_Choice
++ "#Others_Discrete_Choices2All_Others" &
++ -- Package_Specification
++ "#Defining_Unit_Name$Visible_Declarations%Private_Declarations&End_Lab" &
++ "el'Generic_Parent9Limited_View_Installed" &
++ -- Parameter_Association
++ "$Selector_Name%Explicit_Actual_Parameter&Next_Named_Actual" &
++ -- Parameter_Specification
++ "#Defining_Identifier6In_Present8Out_Present$Parameter_Type%Expression" &
++ "4Do_Accessibility_Check,More_Ids-Prev_Ids'Default_Expression" &
++ -- Protected_Definition
++ "$Visible_Declarations%Private_Declarations&End_Label-Has_Priority_Pra" &
++ "gma" &
++ -- Range_Constraint
++ "&Range_Expression" &
++ -- Real_Range_Specification
++ "#Low_Bound$High_Bound" &
++ -- Record_Definition
++ "&End_Label+Abstract_Present6Tagged_Present8Limited_Present#Component_" &
++ "List4Null_Present" &
++ -- Signed_Integer_Type_Definition
++ "#Low_Bound$High_Bound" &
++ -- Single_Protected_Declaration
++ "#Defining_Identifier%Protected_Definition" &
++ -- Subunit
++ "$Name#Proper_Body%Corresponding_Stub" &
++ -- Task_Definition
++ "$Visible_Declarations%Private_Declarations&End_Label-Has_Priority_Pra" &
++ "gma,Has_Storage_Size_Pragma.Has_Task_Info_Pragma/Has_Task_Name_Pra" &
++ "gma" &
++ -- Triggering_Alternative
++ "#Triggering_Statement%Statements&Pragmas_Before" &
++ -- Use_Type_Clause
++ "$Subtype_Marks%Next_Use_Clause&Hidden_By_Use_Clause" &
++ -- Validate_Unchecked_Conversion
++ "#Source_Type$Target_Type" &
++ -- Variant
++ "&Discrete_Choices#Component_List$Enclosing_Variant%Present_Expr'Dchec" &
++ "k_Function" &
++ -- Variant_Part
++ "$Name#Variants" &
++ -- With_Clause
++ "$Name&Library_Unit'Corresponding_Spec,First_Name-Last_Name4Context_In" &
++ "stalled+Elaborate_Present6Elaborate_All_Present7Implicit_With8Limi" &
++ "ted_Present9Limited_View_Installed.Unreferenced_In_Spec/No_Entitie" &
++ "s_Ref_In_Spec" &
++ -- With_Type_Clause
++ "$Name6Tagged_Present" &
++ -- Unused_At_End
++ "";
++
++ type Pchar_Pos_Array is array (Node_Kind) of Positive;
++ Pchar_Pos : constant Pchar_Pos_Array := Pchar_Pos_Array'(
++ N_Unused_At_Start => 1,
++ N_At_Clause => 1,
++ N_Component_Clause => 23,
++ N_Enumeration_Representation_Clause => 66,
++ N_Mod_Clause => 107,
++ N_Record_Representation_Clause => 133,
++ N_Attribute_Definition_Clause => 187,
++ N_Empty => 253,
++ N_Pragma => 253,
++ N_Pragma_Argument_Association => 312,
++ N_Error => 323,
++ N_Defining_Character_Literal => 323,
++ N_Defining_Identifier => 341,
++ N_Defining_Operator_Symbol => 359,
++ N_Expanded_Name => 377,
++ N_Identifier => 452,
++ N_Operator_Symbol => 528,
++ N_Character_Literal => 575,
++ N_Op_Add => 634,
++ N_Op_Concat => 634,
++ N_Op_Expon => 681,
++ N_Op_Subtract => 705,
++ N_Op_Divide => 705,
++ N_Op_Mod => 761,
++ N_Op_Multiply => 802,
++ N_Op_Rem => 840,
++ N_Op_And => 881,
++ N_Op_Eq => 897,
++ N_Op_Ge => 897,
++ N_Op_Gt => 897,
++ N_Op_Le => 897,
++ N_Op_Lt => 897,
++ N_Op_Ne => 897,
++ N_Op_Or => 897,
++ N_Op_Xor => 913,
++ N_Op_Rotate_Left => 929,
++ N_Op_Rotate_Right => 944,
++ N_Op_Shift_Left => 959,
++ N_Op_Shift_Right => 974,
++ N_Op_Shift_Right_Arithmetic => 989,
++ N_Op_Abs => 1004,
++ N_Op_Minus => 1004,
++ N_Op_Not => 1004,
++ N_Op_Plus => 1004,
++ N_Attribute_Reference => 1004,
++ N_And_Then => 1128,
++ N_Conditional_Expression => 1136,
++ N_Explicit_Dereference => 1174,
++ N_Function_Call => 1181,
++ N_In => 1323,
++ N_Indexed_Component => 1323,
++ N_Integer_Literal => 1342,
++ N_Not_In => 1378,
++ N_Null => 1378,
++ N_Or_Else => 1378,
++ N_Procedure_Call_Statement => 1386,
++ N_Qualified_Expression => 1528,
++ N_Raise_Constraint_Error => 1552,
++ N_Raise_Program_Error => 1569,
++ N_Raise_Storage_Error => 1586,
++ N_Aggregate => 1603,
++ N_Allocator => 1759,
++ N_Extension_Aggregate => 1836,
++ N_Range => 1939,
++ N_Real_Literal => 1980,
++ N_Reference => 2050,
++ N_Selected_Component => 2057,
++ N_Slice => 2141,
++ N_String_Literal => 2163,
++ N_Subprogram_Info => 2189,
++ N_Type_Conversion => 2200,
++ N_Unchecked_Expression => 2315,
++ N_Unchecked_Type_Conversion => 2326,
++ N_Subtype_Indication => 2381,
++ N_Component_Declaration => 2421,
++ N_Entry_Declaration => 2491,
++ N_Formal_Object_Declaration => 2583,
++ N_Formal_Type_Declaration => 2668,
++ N_Full_Type_Declaration => 2769,
++ N_Incomplete_Type_Declaration => 2857,
++ N_Loop_Parameter_Specification => 2935,
++ N_Object_Declaration => 2999,
++ N_Protected_Type_Declaration => 3246,
++ N_Private_Extension_Declaration => 3334,
++ N_Private_Type_Declaration => 3448,
++ N_Subtype_Declaration => 3574,
++ N_Function_Specification => 3648,
++ N_Procedure_Specification => 3740,
++ N_Entry_Index_Specification => 3819,
++ N_Freeze_Entity => 3867,
++ N_Access_Function_Definition => 3935,
++ N_Access_Procedure_Definition => 3991,
++ N_Task_Type_Declaration => 4034,
++ N_Package_Body_Stub => 4137,
++ N_Protected_Body_Stub => 4189,
++ N_Subprogram_Body_Stub => 4241,
++ N_Task_Body_Stub => 4287,
++ N_Function_Instantiation => 4339,
++ N_Package_Instantiation => 4425,
++ N_Procedure_Instantiation => 4511,
++ N_Package_Body => 4597,
++ N_Subprogram_Body => 4695,
++ N_Protected_Body => 4922,
++ N_Task_Body => 5004,
++ N_Implicit_Label_Declaration => 5142,
++ N_Package_Declaration => 5178,
++ N_Single_Task_Declaration => 5247,
++ N_Subprogram_Declaration => 5283,
++ N_Use_Package_Clause => 5343,
++ N_Generic_Package_Declaration => 5386,
++ N_Generic_Subprogram_Declaration => 5483,
++ N_Constrained_Array_Definition => 5556,
++ N_Unconstrained_Array_Definition => 5606,
++ N_Exception_Renaming_Declaration => 5641,
++ N_Object_Renaming_Declaration => 5666,
++ N_Package_Renaming_Declaration => 5738,
++ N_Subprogram_Renaming_Declaration => 5774,
++ N_Generic_Function_Renaming_Declaration => 5824,
++ N_Generic_Package_Renaming_Declaration => 5860,
++ N_Generic_Procedure_Renaming_Declaration => 5896,
++ N_Abort_Statement => 5932,
++ N_Accept_Statement => 5938,
++ N_Assignment_Statement => 6033,
++ N_Asynchronous_Select => 6119,
++ N_Block_Statement => 6157,
++ N_Case_Statement => 6322,
++ N_Code_Statement => 6355,
++ N_Conditional_Entry_Call => 6366,
++ N_Delay_Relative_Statement => 6405,
++ N_Delay_Until_Statement => 6416,
++ N_Entry_Call_Statement => 6427,
++ N_Free_Statement => 6474,
++ N_Goto_Statement => 6516,
++ N_Loop_Statement => 6536,
++ N_Null_Statement => 6621,
++ N_Raise_Statement => 6621,
++ N_Requeue_Statement => 6626,
++ N_Return_Statement => 6645,
++ N_Selective_Accept => 6719,
++ N_Timed_Entry_Call => 6755,
++ N_Exit_Statement => 6796,
++ N_If_Statement => 6811,
++ N_Accept_Alternative => 6874,
++ N_Delay_Alternative => 6950,
++ N_Elsif_Part => 7002,
++ N_Entry_Body_Formal_Part => 7046,
++ N_Iteration_Scheme => 7107,
++ N_Terminate_Alternative => 7164,
++ N_Abortable_Part => 7203,
++ N_Abstract_Subprogram_Declaration => 7214,
++ N_Access_Definition => 7228,
++ N_Access_To_Object_Definition => 7241,
++ N_Case_Statement_Alternative => 7289,
++ N_Compilation_Unit => 7317,
++ N_Compilation_Unit_Aux => 7456,
++ N_Component_Association => 7506,
++ N_Component_Definition => 7550,
++ N_Component_List => 7585,
++ N_Derived_Type_Definition => 7627,
++ N_Decimal_Fixed_Point_Definition => 7685,
++ N_Defining_Program_Unit_Name => 7745,
++ N_Delta_Constraint => 7770,
++ N_Designator => 7804,
++ N_Digits_Constraint => 7820,
++ N_Discriminant_Association => 7855,
++ N_Discriminant_Specification => 7881,
++ N_Enumeration_Type_Definition => 7948,
++ N_Entry_Body => 7967,
++ N_Entry_Call_Alternative => 8074,
++ N_Exception_Declaration => 8121,
++ N_Exception_Handler => 8170,
++ N_Floating_Point_Definition => 8235,
++ N_Formal_Decimal_Fixed_Point_Definition => 8278,
++ N_Formal_Derived_Type_Definition => 8278,
++ N_Formal_Discrete_Type_Definition => 8324,
++ N_Formal_Floating_Point_Definition => 8324,
++ N_Formal_Modular_Type_Definition => 8324,
++ N_Formal_Ordinary_Fixed_Point_Definition => 8324,
++ N_Formal_Package_Declaration => 8324,
++ N_Formal_Private_Type_Definition => 8411,
++ N_Formal_Signed_Integer_Type_Definition => 8459,
++ N_Formal_Subprogram_Declaration => 8459,
++ N_Generic_Association => 8498,
++ N_Handled_Sequence_Of_Statements => 8546,
++ N_Index_Or_Discriminant_Constraint => 8638,
++ N_Itype_Reference => 8650,
++ N_Label => 8656,
++ N_Modular_Type_Definition => 8682,
++ N_Number_Declaration => 8693,
++ N_Ordinary_Fixed_Point_Definition => 8742,
++ N_Others_Choice => 8784,
++ N_Package_Specification => 8819,
++ N_Parameter_Association => 8928,
++ N_Parameter_Specification => 8986,
++ N_Protected_Definition => 9115,
++ N_Range_Constraint => 9187,
++ N_Real_Range_Specification => 9204,
++ N_Record_Definition => 9225,
++ N_Signed_Integer_Type_Definition => 9311,
++ N_Single_Protected_Declaration => 9332,
++ N_Subunit => 9373,
++ N_Task_Definition => 9409,
++ N_Triggering_Alternative => 9547,
++ N_Use_Type_Clause => 9594,
++ N_Validate_Unchecked_Conversion => 9645,
++ N_Variant => 9669,
++ N_Variant_Part => 9748,
++ N_With_Clause => 9762,
++ N_With_Type_Clause => 9976,
++ N_Unused_At_End => 9996);
++
++end Treeprs;
--- /dev/null
+diff -uNr gcc-3.4.3.orig/gcc/calls.c gcc-3.4.3/gcc/calls.c
+--- gcc-3.4.3.orig/gcc/calls.c 2004-06-24 09:26:50.000000000 +0200
++++ gcc-3.4.3/gcc/calls.c 2004-11-24 18:35:31.000000000 +0100
+@@ -2321,8 +2321,12 @@
+ {
+ /* For variable-sized objects, we must be called with a target
+ specified. If we were to allocate space on the stack here,
+- we would have no way of knowing when to free it. */
+- rtx d = assign_temp (TREE_TYPE (exp), 1, 1, 1);
++ we would have no way of knowing when to free it.
++
++ This is the structure of a function return object and it isn't
++ a character array for the stack protection, so it is
++ marked using the assignment of the KEEP argument to 5. */
++ rtx d = assign_temp (TREE_TYPE (exp), 5, 1, 1);
+
+ mark_temp_addr_taken (d);
+ structure_value_addr = XEXP (d, 0);
+diff -uNr gcc-3.4.3.orig/gcc/c-cppbuiltin.c gcc-3.4.3/gcc/c-cppbuiltin.c
+--- gcc-3.4.3.orig/gcc/c-cppbuiltin.c 2004-03-04 11:24:54.000000000 +0100
++++ gcc-3.4.3/gcc/c-cppbuiltin.c 2004-11-24 18:35:31.000000000 +0100
+@@ -408,6 +408,12 @@
+ if (c_dialect_objc () && flag_next_runtime)
+ cpp_define (pfile, "__NEXT_RUNTIME__");
+
++ /* Make the choice of the stack protector runtime visible to source code. */
++ if (flag_propolice_protection)
++ cpp_define (pfile, "__SSP__=1");
++ if (flag_stack_protection)
++ cpp_define (pfile, "__SSP_ALL__=2");
++
+ /* A straightforward target hook doesn't work, because of problems
+ linking that hook's body when part of non-C front ends. */
+ # define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
+diff -uNr gcc-3.4.3.orig/gcc/combine.c gcc-3.4.3/gcc/combine.c
+--- gcc-3.4.3.orig/gcc/combine.c 2004-10-13 01:35:29.000000000 +0200
++++ gcc-3.4.3/gcc/combine.c 2004-11-24 18:35:31.000000000 +0100
+@@ -1401,6 +1401,10 @@
+ && ! fixed_regs[REGNO (dest)]
+ && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (REGNO (dest))))))
+ return 1;
++ /* Never combine loads and stores protecting argument that use set insn
++ with used flag on. */
++ if (SET_VOLATILE_P (set))
++ return 1;
+
+ return 0;
+ }
+@@ -3781,7 +3785,20 @@
+ rtx inner_op0 = XEXP (XEXP (x, 0), 1);
+ rtx inner_op1 = XEXP (x, 1);
+ rtx inner;
+-
++
++#ifndef FRAME_GROWS_DOWNWARD
++ /* For the case where the frame grows upward,
++ the stack protector keeps the offset of the frame pointer
++ positive integer. */
++ if (flag_propolice_protection
++ && code == PLUS
++ && other == frame_pointer_rtx
++ && GET_CODE (inner_op0) == CONST_INT
++ && GET_CODE (inner_op1) == CONST_INT
++ && INTVAL (inner_op0) > 0
++ && INTVAL (inner_op0) + INTVAL (inner_op1) <= 0)
++ return x;
++#endif
+ /* Make sure we pass the constant operand if any as the second
+ one if this is a commutative operation. */
+ if (CONSTANT_P (inner_op0) && GET_RTX_CLASS (code) == 'c')
+@@ -4146,6 +4163,13 @@
+ they are now checked elsewhere. */
+ if (GET_CODE (XEXP (x, 0)) == PLUS
+ && CONSTANT_ADDRESS_P (XEXP (XEXP (x, 0), 1)))
++#ifndef FRAME_GROWS_DOWNWARD
++ /* The stack protector keeps the addressing style of a local variable
++ to be able to change its stack position. */
++ if (! (flag_propolice_protection
++ && XEXP (XEXP (x, 0), 0) == frame_pointer_rtx
++ && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT))
++#endif
+ return gen_binary (PLUS, mode,
+ gen_binary (PLUS, mode, XEXP (XEXP (x, 0), 0),
+ XEXP (x, 1)),
+@@ -4273,8 +4297,14 @@
+ }
+
+ /* Canonicalize (minus A (plus B C)) to (minus (minus A B) C) for
+- integers. */
+- if (GET_CODE (XEXP (x, 1)) == PLUS && INTEGRAL_MODE_P (mode))
++ integers.
++
++ The stack protector keeps the addressing style of
++ a local variable. */
++ if (GET_CODE (XEXP (x, 1)) == PLUS && INTEGRAL_MODE_P (mode)
++ && (! (flag_propolice_protection
++ && XEXP (XEXP (x, 1), 0) == frame_pointer_rtx
++ && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT)))
+ return gen_binary (MINUS, mode,
+ gen_binary (MINUS, mode, XEXP (x, 0),
+ XEXP (XEXP (x, 1), 0)),
+diff -uNr gcc-3.4.3.orig/gcc/common.opt gcc-3.4.3/gcc/common.opt
+--- gcc-3.4.3.orig/gcc/common.opt 2004-11-24 18:04:19.000000000 +0100
++++ gcc-3.4.3/gcc/common.opt 2004-11-24 18:35:31.000000000 +0100
+@@ -152,6 +152,10 @@
+ Common
+ Warn when a variable is unused
+
++Wstack-protector
++Common
++Warn when not issuing stack smashing protection for some reason
++
+ aux-info
+ Common Separate
+ -aux-info <file> Emit declaration information into <file>
+@@ -743,6 +747,14 @@
+ Common
+ Put zero initialized data in the bss section
+
++fstack-protector
++Common
++Enables stack protection
++
++fstack-protector-all
++Common
++Enables stack protection of every function
++
+ g
+ Common JoinedOrMissing
+ Generate debug information in default format
+diff -uNr gcc-3.4.3.orig/gcc/config/arm/arm.md gcc-3.4.3/gcc/config/arm/arm.md
+--- gcc-3.4.3.orig/gcc/config/arm/arm.md 2004-08-25 17:46:19.000000000 +0200
++++ gcc-3.4.3/gcc/config/arm/arm.md 2004-11-24 18:35:31.000000000 +0100
+@@ -3840,7 +3840,13 @@
+ (match_operand:DI 1 "general_operand" ""))]
+ "TARGET_EITHER"
+ "
+- if (TARGET_THUMB)
++ if (TARGET_ARM)
++ {
++ /* Everything except mem = const or mem = mem can be done easily */
++ if (GET_CODE (operands[0]) == MEM)
++ operands[1] = force_reg (DImode, operands[1]);
++ }
++ else /* TARGET_THUMB.... */
+ {
+ if (!no_new_pseudos)
+ {
+diff -uNr gcc-3.4.3.orig/gcc/config/t-linux gcc-3.4.3/gcc/config/t-linux
+--- gcc-3.4.3.orig/gcc/config/t-linux 2003-09-23 20:55:57.000000000 +0200
++++ gcc-3.4.3/gcc/config/t-linux 2004-11-24 18:35:31.000000000 +0100
+@@ -1,7 +1,7 @@
+ # Compile crtbeginS.o and crtendS.o with pic.
+ CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
+ # Compile libgcc2.a with pic.
+-TARGET_LIBGCC2_CFLAGS = -fPIC
++TARGET_LIBGCC2_CFLAGS = -fPIC -DHAVE_SYSLOG
+
+ # Override t-slibgcc-elf-ver to export some libgcc symbols with
+ # the symbol versions that glibc used.
+diff -uNr gcc-3.4.3.orig/gcc/configure gcc-3.4.3/gcc/configure
+--- gcc-3.4.3.orig/gcc/configure 2004-11-05 05:14:05.000000000 +0100
++++ gcc-3.4.3/gcc/configure 2004-11-24 18:44:13.000000000 +0100
+@@ -4809,6 +4809,9 @@
+ fi;
+
+
++ENABLESSP=""
++
++
+ # -------------------------
+ # Checks for other programs
+ # -------------------------
+@@ -13036,6 +13039,7 @@
+ s,@TARGET_SYSTEM_ROOT_DEFINE@,$TARGET_SYSTEM_ROOT_DEFINE,;t t
+ s,@CROSS_SYSTEM_HEADER_DIR@,$CROSS_SYSTEM_HEADER_DIR,;t t
+ s,@onestep@,$onestep,;t t
++s,@ENABLESSP@,$ENABLESSP,;t t
+ s,@SET_MAKE@,$SET_MAKE,;t t
+ s,@AWK@,$AWK,;t t
+ s,@LN@,$LN,;t t
+diff -uNr gcc-3.4.3.orig/gcc/configure.ac gcc-3.4.3/gcc/configure.ac
+--- gcc-3.4.3.orig/gcc/configure.ac 2004-11-24 18:04:19.000000000 +0100
++++ gcc-3.4.3/gcc/configure.ac 2004-11-24 18:46:57.000000000 +0100
+@@ -613,6 +613,9 @@
+ [onestep=""])
+ AC_SUBST(onestep)
+
++ENABLESSP=""
++AC_SUBST(ENABLESSP)
++
+ # -------------------------
+ # Checks for other programs
+ # -------------------------
+diff -uNr gcc-3.4.3.orig/gcc/cse.c gcc-3.4.3/gcc/cse.c
+--- gcc-3.4.3.orig/gcc/cse.c 2004-10-26 20:05:42.000000000 +0200
++++ gcc-3.4.3/gcc/cse.c 2004-11-24 18:35:31.000000000 +0100
+@@ -4212,7 +4212,14 @@
+
+ if (new_const == 0)
+ break;
+-
++#ifndef FRAME_GROWS_DOWNWARD
++ if (flag_propolice_protection
++ && GET_CODE (y) == PLUS
++ && XEXP (y, 0) == frame_pointer_rtx
++ && INTVAL (inner_const) > 0
++ && INTVAL (new_const) <= 0)
++ break;
++#endif
+ /* If we are associating shift operations, don't let this
+ produce a shift of the size of the object or larger.
+ This could occur when we follow a sign-extend by a right
+@@ -4744,6 +4751,14 @@
+ if (SET_DEST (x) == pc_rtx
+ && GET_CODE (SET_SRC (x)) == LABEL_REF)
+ ;
++ /* cut the reg propagation of stack-protected argument. */
++ else if (SET_VOLATILE_P (x)) {
++ rtx x1 = SET_DEST (x);
++ if (GET_CODE (x1) == SUBREG && GET_CODE (SUBREG_REG (x1)) == REG)
++ x1 = SUBREG_REG (x1);
++ if (! REGNO_QTY_VALID_P(REGNO (x1)))
++ make_new_qty (REGNO (x1), GET_MODE (x1));
++ }
+
+ /* Don't count call-insns, (set (reg 0) (call ...)), as a set.
+ The hard function value register is used only once, to copy to
+diff -uNr gcc-3.4.3.orig/gcc/doc/invoke.texi gcc-3.4.3/gcc/doc/invoke.texi
+--- gcc-3.4.3.orig/gcc/doc/invoke.texi 2004-11-24 18:04:19.000000000 +0100
++++ gcc-3.4.3/gcc/doc/invoke.texi 2004-11-24 18:35:32.000000000 +0100
+@@ -228,7 +228,7 @@
+ -Wno-multichar -Wnonnull -Wpacked -Wpadded @gol
+ -Wparentheses -Wpointer-arith -Wredundant-decls @gol
+ -Wreturn-type -Wsequence-point -Wshadow @gol
+--Wsign-compare -Wstrict-aliasing @gol
++-Wsign-compare -Wstack-protector -Wstrict-aliasing @gol
+ -Wswitch -Wswitch-default -Wswitch-enum @gol
+ -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol
+ -Wunknown-pragmas -Wunreachable-code @gol
+@@ -673,6 +673,7 @@
+ -fshort-double -fshort-wchar @gol
+ -fverbose-asm -fpack-struct -fstack-check @gol
+ -fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol
++-fstack-protector -fstack-protector-all @gol
+ -fargument-alias -fargument-noalias @gol
+ -fargument-noalias-global -fleading-underscore @gol
+ -ftls-model=@var{model} @gol
+@@ -3006,6 +3007,10 @@
+ complex; GCC will refuse to optimize programs when the optimization
+ itself is likely to take inordinate amounts of time.
+
++@item -Wstack-protector
++@opindex Wstack-protector
++Warn when not issuing stack smashing protection for some reason.
++
+ @item -Werror
+ @opindex Werror
+ Make all warnings into errors.
+@@ -11202,6 +11207,24 @@
+ @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
+ of 128KB@. Note that this may only work with the GNU linker.
+
++@item -fstack-protector
++@item -fstack-protector-all
++@opindex fstack-protector
++@opindex fstack-protector-all
++@opindex fno-stack-protector
++Generate code to protect an application from a stack smashing
++attack. The features are (1) the insertion of random value next to the
++frame pointer to detect the integrity of the stack, (2) the reordering
++of local variables to place buffers after pointers to avoid the
++corruption of pointers that could be used to further corrupt arbitrary
++memory locations, (3) the copying of pointers in function arguments to
++an area preceding local variable buffers to prevent the corruption of
++pointers that could be used to further corrupt arbitrary memory
++locations, and the (4) omission of instrumentation code from some
++functions to decrease the performance overhead. If the integrity
++would be broken, the program is aborted. If stack-protector-all is
++specified, instrumentation codes are generated at every functions.
++
+ @cindex aliasing of parameters
+ @cindex parameters, aliased
+ @item -fargument-alias
+diff -uNr gcc-3.4.3.orig/gcc/explow.c gcc-3.4.3/gcc/explow.c
+--- gcc-3.4.3.orig/gcc/explow.c 2004-04-03 01:05:26.000000000 +0200
++++ gcc-3.4.3/gcc/explow.c 2004-11-24 18:35:31.000000000 +0100
+@@ -84,7 +84,8 @@
+ rtx tem;
+ int all_constant = 0;
+
+- if (c == 0)
++ if (c == 0
++ && ! (flag_propolice_protection && x == virtual_stack_vars_rtx))
+ return x;
+
+ restart:
+@@ -185,7 +186,10 @@
+ break;
+ }
+
+- if (c != 0)
++ /* For the use of stack protection, keep the frame and offset pattern
++ even if the offset is zero. */
++ if (c != 0
++ || (flag_propolice_protection && x == virtual_stack_vars_rtx))
+ x = gen_rtx_PLUS (mode, x, GEN_INT (c));
+
+ if (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF)
+@@ -474,6 +478,26 @@
+ if (memory_address_p (mode, oldx))
+ goto win2;
+
++ /* The stack protector keeps the addressing style of a local variable.
++ LEGITIMIZE_ADDRESS changes the addressing to the machine-dependent
++ style, so the protector split the frame address to a register using
++ force_reg. */
++ if (flag_propolice_protection)
++ {
++#define FRAMEADDR_P(X) (GET_CODE (X) == PLUS \
++ && XEXP (X, 0) == virtual_stack_vars_rtx \
++ && GET_CODE (XEXP (X, 1)) == CONST_INT)
++ rtx y;
++ if (FRAMEADDR_P (x))
++ goto win;
++ for (y = x; y != 0 && GET_CODE (y) == PLUS; y = XEXP (y, 0))
++ {
++ if (FRAMEADDR_P (XEXP (y, 0)))
++ XEXP (y, 0) = force_reg (GET_MODE (XEXP (y, 0)), XEXP (y, 0));
++ if (FRAMEADDR_P (XEXP (y, 1)))
++ XEXP (y, 1) = force_reg (GET_MODE (XEXP (y, 1)), XEXP (y, 1));
++ }
++ }
+ /* Perform machine-dependent transformations on X
+ in certain cases. This is not necessary since the code
+ below can handle all possible cases, but machine-dependent
+diff -uNr gcc-3.4.3.orig/gcc/expr.c gcc-3.4.3/gcc/expr.c
+--- gcc-3.4.3.orig/gcc/expr.c 2004-05-27 21:35:17.000000000 +0200
++++ gcc-3.4.3/gcc/expr.c 2004-11-24 18:35:31.000000000 +0100
+@@ -48,6 +48,7 @@
+ #include "intl.h"
+ #include "tm_p.h"
+ #include "target.h"
++#include "protector.h"
+
+ /* Decide whether a function's arguments should be processed
+ from first to last or from last to first.
+@@ -1060,7 +1061,11 @@
+
+ If ENDP is 0 return to, if ENDP is 1 return memory at the end ala
+ mempcpy, and if ENDP is 2 return memory the end minus one byte ala
+- stpcpy. */
++ stpcpy.
++
++ When the stack protector is used at the reverse move, it starts the move
++ instruction from the address within the region of a variable.
++ So it eliminates the first address decrement instruction. */
+
+ rtx
+ move_by_pieces (rtx to, rtx from, unsigned HOST_WIDE_INT len,
+@@ -1123,6 +1128,8 @@
+
+ if (USE_LOAD_PRE_DECREMENT (mode) && data.reverse && ! data.autinc_from)
+ {
++ if (flag_propolice_protection)
++ len = len - GET_MODE_SIZE (mode);
+ data.from_addr = copy_addr_to_reg (plus_constant (from_addr, len));
+ data.autinc_from = 1;
+ data.explicit_inc_from = -1;
+@@ -1137,6 +1144,8 @@
+ data.from_addr = copy_addr_to_reg (from_addr);
+ if (USE_STORE_PRE_DECREMENT (mode) && data.reverse && ! data.autinc_to)
+ {
++ if (flag_propolice_protection)
++ len = len - GET_MODE_SIZE (mode);
+ data.to_addr = copy_addr_to_reg (plus_constant (to_addr, len));
+ data.autinc_to = 1;
+ data.explicit_inc_to = -1;
+@@ -1280,11 +1289,15 @@
+ from1 = adjust_address (data->from, mode, data->offset);
+
+ if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
+- emit_insn (gen_add2_insn (data->to_addr,
+- GEN_INT (-(HOST_WIDE_INT)size)));
++ /* The stack protector skips the first address decrement instruction
++ at the reverse move. */
++ if (!flag_propolice_protection || data->explicit_inc_to < -1)
++ emit_insn (gen_add2_insn (data->to_addr,
++ GEN_INT (-(HOST_WIDE_INT)size)));
+ if (HAVE_PRE_DECREMENT && data->explicit_inc_from < 0)
+- emit_insn (gen_add2_insn (data->from_addr,
+- GEN_INT (-(HOST_WIDE_INT)size)));
++ if (!flag_propolice_protection || data->explicit_inc_from < -1)
++ emit_insn (gen_add2_insn (data->from_addr,
++ GEN_INT (-(HOST_WIDE_INT)size)));
+
+ if (data->to)
+ emit_insn ((*genfun) (to1, from1));
+@@ -2475,7 +2488,12 @@
+
+ if (USE_STORE_PRE_DECREMENT (mode) && data->reverse && ! data->autinc_to)
+ {
+- data->to_addr = copy_addr_to_reg (plus_constant (to_addr, data->len));
++ int len = data->len;
++ /* The stack protector starts the store instruction from
++ the address within the region of a variable. */
++ if (flag_propolice_protection)
++ len -= GET_MODE_SIZE (mode);
++ data->to_addr = copy_addr_to_reg (plus_constant (to_addr, len));
+ data->autinc_to = 1;
+ data->explicit_inc_to = -1;
+ }
+@@ -2544,8 +2562,11 @@
+ to1 = adjust_address (data->to, mode, data->offset);
+
+ if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
+- emit_insn (gen_add2_insn (data->to_addr,
+- GEN_INT (-(HOST_WIDE_INT) size)));
++ /* The stack protector skips the first address decrement instruction
++ at the reverse store. */
++ if (!flag_propolice_protection || data->explicit_inc_to < -1)
++ emit_insn (gen_add2_insn (data->to_addr,
++ GEN_INT (-(HOST_WIDE_INT) size)));
+
+ cst = (*data->constfun) (data->constfundata, data->offset, mode);
+ emit_insn ((*genfun) (to1, cst));
+@@ -5701,7 +5722,9 @@
+ && GET_CODE (XEXP (value, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (value, 0), 0)) == REG
+ && REGNO (XEXP (XEXP (value, 0), 0)) >= FIRST_VIRTUAL_REGISTER
+- && REGNO (XEXP (XEXP (value, 0), 0)) <= LAST_VIRTUAL_REGISTER)
++ && REGNO (XEXP (XEXP (value, 0), 0)) <= LAST_VIRTUAL_REGISTER
++ && (!flag_propolice_protection
++ || XEXP (XEXP (value, 0), 0) != virtual_stack_vars_rtx))
+ {
+ rtx temp = expand_simple_binop (GET_MODE (value), code,
+ XEXP (XEXP (value, 0), 0), op2,
+diff -uNr gcc-3.4.3.orig/gcc/flags.h gcc-3.4.3/gcc/flags.h
+--- gcc-3.4.3.orig/gcc/flags.h 2004-11-24 18:04:19.000000000 +0100
++++ gcc-3.4.3/gcc/flags.h 2004-11-24 18:35:31.492689688 +0100
+@@ -210,6 +210,10 @@
+
+ extern bool warn_strict_aliasing;
+
++/* Warn when not issuing stack smashing protection for some reason. */
++
++extern bool warn_stack_protector;
++
+ /* Nonzero if generating code to do profiling. */
+
+ extern int profile_flag;
+@@ -795,4 +799,12 @@
+ #define HONOR_SIGN_DEPENDENT_ROUNDING(MODE) \
+ (MODE_HAS_SIGN_DEPENDENT_ROUNDING (MODE) && flag_rounding_math)
+
++/* Nonzero means use propolice as a stack protection method. */
++
++extern int flag_propolice_protection;
++
++/* Nonzero means use a stack protection method for every function. */
++
++extern int flag_stack_protection;
++
+ #endif /* ! GCC_FLAGS_H */
+diff -uNr gcc-3.4.3.orig/gcc/function.c gcc-3.4.3/gcc/function.c
+--- gcc-3.4.3.orig/gcc/function.c 2004-10-14 01:18:13.000000000 +0200
++++ gcc-3.4.3/gcc/function.c 2004-11-24 18:35:31.542682088 +0100
+@@ -63,6 +63,7 @@
+ #include "integrate.h"
+ #include "langhooks.h"
+ #include "target.h"
++#include "protector.h"
+
+ #ifndef TRAMPOLINE_ALIGNMENT
+ #define TRAMPOLINE_ALIGNMENT FUNCTION_BOUNDARY
+@@ -155,6 +156,10 @@
+ /* Array of INSN_UIDs to hold the INSN_UIDs for each sibcall epilogue
+ in this function. */
+ static GTY(()) varray_type sibcall_epilogue;
++
++/* Current boundary mark for character arrays. */
++static int temp_boundary_mark = 0;
++
+ \f
+ /* In order to evaluate some expressions, such as function calls returning
+ structures in memory, we need to temporarily allocate stack locations.
+@@ -208,6 +213,8 @@
+ /* The size of the slot, including extra space for alignment. This
+ info is for combine_temp_slots. */
+ HOST_WIDE_INT full_size;
++ /* Boundary mark of a character array and the others. This info is for propolice. */
++ int boundary_mark;
+ };
+ \f
+ /* This structure is used to record MEMs or pseudos used to replace VAR, any
+@@ -638,6 +645,7 @@
+ whose lifetime is controlled by CLEANUP_POINT_EXPRs. KEEP is 3
+ if we are to allocate something at an inner level to be treated as
+ a variable in the block (e.g., a SAVE_EXPR).
++ KEEP is 5 if we allocate a place to return structure.
+
+ TYPE is the type that will be used for the stack slot. */
+
+@@ -648,6 +656,8 @@
+ unsigned int align;
+ struct temp_slot *p, *best_p = 0;
+ rtx slot;
++ int char_array = (flag_propolice_protection
++ && keep == 1 && search_string_def (type));
+
+ /* If SIZE is -1 it means that somebody tried to allocate a temporary
+ of a variable size. */
+@@ -673,7 +683,8 @@
+ && ! p->in_use
+ && objects_must_conflict_p (p->type, type)
+ && (best_p == 0 || best_p->size > p->size
+- || (best_p->size == p->size && best_p->align > p->align)))
++ || (best_p->size == p->size && best_p->align > p->align))
++ && (! char_array || p->boundary_mark != 0))
+ {
+ if (p->align == align && p->size == size)
+ {
+@@ -708,6 +719,7 @@
+ p->address = 0;
+ p->rtl_expr = 0;
+ p->type = best_p->type;
++ p->boundary_mark = best_p->boundary_mark;
+ p->next = temp_slots;
+ temp_slots = p;
+
+@@ -768,6 +780,7 @@
+ p->full_size = frame_offset - frame_offset_old;
+ #endif
+ p->address = 0;
++ p->boundary_mark = char_array ? ++temp_boundary_mark : 0;
+ p->next = temp_slots;
+ temp_slots = p;
+ }
+@@ -932,14 +945,16 @@
+ int delete_q = 0;
+ if (! q->in_use && GET_MODE (q->slot) == BLKmode)
+ {
+- if (p->base_offset + p->full_size == q->base_offset)
++ if (p->base_offset + p->full_size == q->base_offset &&
++ p->boundary_mark == q->boundary_mark)
+ {
+ /* Q comes after P; combine Q into P. */
+ p->size += q->size;
+ p->full_size += q->full_size;
+ delete_q = 1;
+ }
+- else if (q->base_offset + q->full_size == p->base_offset)
++ else if (q->base_offset + q->full_size == p->base_offset &&
++ p->boundary_mark == q->boundary_mark)
+ {
+ /* P comes after Q; combine P into Q. */
+ q->size += p->size;
+@@ -1449,7 +1464,9 @@
+ }
+
+ if (new == 0)
+- new = assign_stack_local_1 (decl_mode, GET_MODE_SIZE (decl_mode), 0, func);
++ new = function ?
++ assign_stack_local_1 (decl_mode, GET_MODE_SIZE (decl_mode), 0, func)
++ : assign_stack_local_for_pseudo_reg (decl_mode, GET_MODE_SIZE (decl_mode), 0);
+
+ PUT_CODE (reg, MEM);
+ PUT_MODE (reg, decl_mode);
+@@ -3937,10 +3954,13 @@
+ }
+
+ /* Otherwise copy the new constant into a register and replace
+- constant with that register. */
++ constant with that register.
++ At the use of stack protection, stop to replace the frame
++ offset with a register. */
+ temp = gen_reg_rtx (Pmode);
+ XEXP (x, 0) = new;
+- if (validate_change (object, &XEXP (x, 1), temp, 0))
++ if (validate_change (object, &XEXP (x, 1), temp, 0)
++ && !flag_propolice_protection)
+ emit_insn_before (gen_move_insn (temp, new_offset), object);
+ else
+ {
+diff -uNr gcc-3.4.3.orig/gcc/gcse.c gcc-3.4.3/gcc/gcse.c
+--- gcc-3.4.3.orig/gcc/gcse.c 2004-10-30 20:02:53.000000000 +0200
++++ gcc-3.4.3/gcc/gcse.c 2004-11-24 18:35:31.583675856 +0100
+@@ -4176,9 +4176,13 @@
+ continue;
+
+ /* Find an assignment that sets reg_used and is available
+- at the start of the block. */
++ at the start of the block.
++
++ Skip the copy propagation not to eliminate the register that is
++ the duplicated pointer of a function argument. It is used for
++ the function argument protection. */
+ set = find_avail_set (regno, insn);
+- if (! set)
++ if (! set || SET_VOLATILE_P (set->expr))
+ continue;
+
+ pat = set->expr;
+diff -uNr gcc-3.4.3.orig/gcc/integrate.c gcc-3.4.3/gcc/integrate.c
+--- gcc-3.4.3.orig/gcc/integrate.c 2004-01-24 00:36:00.000000000 +0100
++++ gcc-3.4.3/gcc/integrate.c 2004-11-24 18:35:31.603672816 +0100
+@@ -393,6 +393,11 @@
+ /* These args would always appear unused, if not for this. */
+ TREE_USED (copy) = 1;
+
++ /* The inlined variable is marked as INLINE not to change the location
++ by stack protector. */
++ if (flag_propolice_protection && TREE_CODE (copy) == VAR_DECL)
++ DECL_COPIED (copy) = 1;
++
+ /* Set the context for the new declaration. */
+ if (!DECL_CONTEXT (decl))
+ /* Globals stay global. */
+@@ -1970,6 +1975,12 @@
+
+ seq = get_insns ();
+ end_sequence ();
++#ifdef ARGS_GROWS_DOWNWARD
++ /* Mark this pointer as the top of the argument
++ block. The pointer minus one is in the block. */
++ if (flag_propolice_protection && GET_CODE (seq) == SET)
++ RTX_INTEGRATED_P (SET_SRC (seq)) = 1;
++#endif
+ emit_insn_after (seq, map->insns_at_start);
+ return temp;
+ }
+diff -uNr gcc-3.4.3.orig/gcc/libgcc2.c gcc-3.4.3/gcc/libgcc2.c
+--- gcc-3.4.3.orig/gcc/libgcc2.c 2004-09-26 22:47:14.000000000 +0200
++++ gcc-3.4.3/gcc/libgcc2.c 2004-11-24 18:35:31.627669168 +0100
+@@ -1678,3 +1678,124 @@
+ #endif /* no INIT_SECTION_ASM_OP and not CTOR_LISTS_DEFINED_EXTERNALLY */
+ #endif /* L_ctors */
+
++\f
++#ifdef L_stack_smash_handler
++#ifndef _LIBC_PROVIDES_SSP_
++#include <stdio.h>
++#include <string.h>
++#include <fcntl.h>
++#include <unistd.h>
++
++#ifdef _POSIX_SOURCE
++#include <signal.h>
++#endif
++
++#if defined(HAVE_SYSLOG)
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++
++#include <sys/syslog.h>
++#ifndef _PATH_LOG
++#define _PATH_LOG "/dev/log"
++#endif
++#endif
++
++long __guard[8] = {0, 0, 0, 0, 0, 0, 0, 0};
++static void __guard_setup (void) __attribute__ ((constructor));
++
++static void
++__guard_setup (void)
++{
++ int fd;
++ if (__guard[0] != 0)
++ return;
++ fd = open ("/dev/urandom", 0);
++ if (fd != -1) {
++ ssize_t size = read (fd, (char*)&__guard, sizeof(__guard));
++ close (fd) ;
++ if (size == sizeof(__guard))
++ return;
++ }
++ /* If a random generator can't be used, the protector switches the guard
++ to the "terminator canary". */
++ ((char*)__guard)[0] = 0;
++ ((char*)__guard)[1] = 0;
++ ((char*)__guard)[2] = '\n';
++ ((char*)__guard)[3] = 255;
++}
++
++extern void __stack_smash_handler (char func[], ATTRIBUTE_UNUSED int damaged);
++void
++__stack_smash_handler (char func[], ATTRIBUTE_UNUSED int damaged)
++{
++#if defined (__GNU_LIBRARY__)
++ extern char * __progname;
++#endif
++ const char message[] = ": stack smashing attack in function ";
++ int bufsz = 256, len;
++ char buf[bufsz];
++#if defined(HAVE_SYSLOG)
++ int log_file;
++ struct sockaddr_un sys_log_addr; /* AF_UNIX address of local logger. */
++#endif
++#ifdef _POSIX_SOURCE
++ {
++ sigset_t mask;
++ sigfillset (&mask);
++ /* Block all signal handlers except SIGABRT. */
++ sigdelset (&mask, SIGABRT);
++ sigprocmask (SIG_BLOCK, &mask, NULL);
++ }
++#endif
++
++ /* send LOG_CRIT. */
++ strcpy (buf, "<2>"); len=3;
++#if defined (__GNU_LIBRARY__)
++ strncat (buf, __progname, bufsz - len - 1);
++ len = strlen (buf);
++#endif
++ if (bufsz > len)
++ {
++ strncat (buf, message, bufsz - len - 1);
++ len = strlen (buf);
++ }
++ if (bufsz > len)
++ {
++ strncat (buf, func, bufsz - len - 1);
++ len = strlen (buf);
++ }
++
++ /* Print error message. */
++ write (STDERR_FILENO, buf + 3, len - 3);
++#if defined(HAVE_SYSLOG)
++ if ((log_file = socket (AF_UNIX, SOCK_DGRAM, 0)) != -1)
++ {
++
++ /* Send "found" message to the "/dev/log" path. */
++ sys_log_addr.sun_family = AF_UNIX;
++ (void)strncpy (sys_log_addr.sun_path, _PATH_LOG,
++ sizeof (sys_log_addr.sun_path) - 1);
++ sys_log_addr.sun_path[sizeof (sys_log_addr.sun_path) - 1] = '\0';
++ sendto(log_file, buf, len, 0, (struct sockaddr *)&sys_log_addr,
++ sizeof (sys_log_addr));
++ }
++#endif
++
++#ifdef _POSIX_SOURCE
++ {
++ /* Make sure the default handler is associated with SIGABRT. */
++ struct sigaction sa;
++
++ memset (&sa, 0, sizeof(struct sigaction));
++ sigfillset (&sa.sa_mask); /* Block all signals. */
++ sa.sa_flags = 0;
++ sa.sa_handler = SIG_DFL;
++ sigaction (SIGABRT, &sa, NULL);
++ (void)kill (getpid(), SIGABRT);
++ }
++#endif
++ _exit (127);
++}
++#endif /* _LIBC_PROVIDES_SSP_ */
++#endif /* L_stack_smash_handler */
+diff -uNr gcc-3.4.3.orig/gcc/libgcc-std.ver gcc-3.4.3/gcc/libgcc-std.ver
+--- gcc-3.4.3.orig/gcc/libgcc-std.ver 2004-09-01 21:14:33.000000000 +0200
++++ gcc-3.4.3/gcc/libgcc-std.ver 2004-11-24 18:35:31.620670232 +0100
+@@ -174,6 +174,12 @@
+ _Unwind_SjLj_RaiseException
+ _Unwind_SjLj_ForcedUnwind
+ _Unwind_SjLj_Resume
++
++%if !defined(_LIBC_PROVIDES_SSP_)
++ # stack smash handler symbols
++ __guard
++ __stack_smash_handler
++%endif
+ }
+
+ %inherit GCC_3.3 GCC_3.0
+diff -uNr gcc-3.4.3.orig/gcc/loop.c gcc-3.4.3/gcc/loop.c
+--- gcc-3.4.3.orig/gcc/loop.c 2004-07-13 17:29:08.000000000 +0200
++++ gcc-3.4.3/gcc/loop.c 2004-11-24 18:35:31.680661112 +0100
+@@ -6514,6 +6514,14 @@
+ if (GET_CODE (*mult_val) == USE)
+ *mult_val = XEXP (*mult_val, 0);
+
++#ifndef FRAME_GROWS_DOWNWARD
++ if (flag_propolice_protection
++ && GET_CODE (*add_val) == PLUS
++ && (XEXP (*add_val, 0) == frame_pointer_rtx
++ || XEXP (*add_val, 1) == frame_pointer_rtx))
++ return 0;
++#endif
++
+ if (is_addr)
+ *pbenefit += address_cost (orig_x, addr_mode) - reg_address_cost;
+ else
+diff -uNr gcc-3.4.3.orig/gcc/Makefile.in gcc-3.4.3/gcc/Makefile.in
+--- gcc-3.4.3.orig/gcc/Makefile.in 2004-11-24 18:04:18.000000000 +0100
++++ gcc-3.4.3/gcc/Makefile.in 2004-11-24 18:35:31.038758696 +0100
+@@ -867,7 +867,7 @@
+ sibcall.o simplify-rtx.o sreal.o stmt.o stor-layout.o stringpool.o \
+ targhooks.o timevar.o toplev.o tracer.o tree.o tree-dump.o unroll.o \
+ varasm.o varray.o version.o vmsdbgout.o xcoffout.o alloc-pool.o \
+- et-forest.o cfghooks.o bt-load.o pretty-print.o $(GGC) web.o
++ et-forest.o cfghooks.o bt-load.o pretty-print.o $(GGC) web.o protector.o
+
+ OBJS-md = $(out_object_file)
+ OBJS-archive = $(EXTRA_OBJS) $(host_hook_obj) hashtable.o tree-inline.o \
+@@ -1549,7 +1549,7 @@
+ langhooks.h insn-flags.h cfglayout.h real.h cfgloop.h \
+ hosthooks.h $(LANGHOOKS_DEF_H) cgraph.h $(COVERAGE_H) alloc-pool.h
+ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+- -DTARGET_NAME=\"$(target_noncanonical)\" \
++ -DTARGET_NAME=\"$(target_noncanonical)\" @ENABLESSP@ \
+ -c $(srcdir)/toplev.c $(OUTPUT_OPTION)
+ main.o : main.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h
+
+@@ -1852,6 +1852,10 @@
+ params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) toplev.h
+ hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H)
+ pretty-print.o: $(CONFIG_H) $(SYSTEM_H) pretty-print.c $(PRETTY_PRINT_H)
++protector.o : protector.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h function.h $(EXPR_H) $(OPTABS_H) $(REGS_H) toplev.h hard-reg-set.h \
++ insn-config.h insn-flags.h $(RECOG_H) output.h toplev.h except.h reload.h \
++ $(TM_P_H) conditions.h $(INSN_ATTR_H) real.h protector.h
+
+ $(out_object_file): $(out_file) $(CONFIG_H) coretypes.h $(TM_H) $(TREE_H) $(GGC_H) \
+ $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \
+diff -uNr gcc-3.4.3.orig/gcc/mklibgcc.in gcc-3.4.3/gcc/mklibgcc.in
+--- gcc-3.4.3.orig/gcc/mklibgcc.in 2004-10-18 18:00:43.000000000 +0200
++++ gcc-3.4.3/gcc/mklibgcc.in 2004-11-24 18:35:31.699658224 +0100
+@@ -57,7 +57,7 @@
+ _enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
+ _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
+ _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
+- _popcountsi2 _popcountdi2 _paritysi2 _paritydi2'
++ _popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _stack_smash_handler'
+
+ # Disable SHLIB_LINK if shared libgcc not enabled.
+ if [ "@enable_shared@" = "no" ]; then
+diff -uNr gcc-3.4.3.orig/gcc/optabs.c gcc-3.4.3/gcc/optabs.c
+--- gcc-3.4.3.orig/gcc/optabs.c 2004-03-03 01:45:01.000000000 +0100
++++ gcc-3.4.3/gcc/optabs.c 2004-11-24 18:35:31.739652144 +0100
+@@ -678,6 +678,27 @@
+ if (target)
+ target = protect_from_queue (target, 1);
+
++ /* Keep the frame and offset pattern at the use of stack protection. */
++ if (flag_propolice_protection
++ && binoptab->code == PLUS
++ && op0 == virtual_stack_vars_rtx
++ && GET_CODE(op1) == CONST_INT)
++ {
++ int icode = (int) binoptab->handlers[(int) mode].insn_code;
++ if (target)
++ temp = target;
++ else
++ temp = gen_reg_rtx (mode);
++
++ if (! (*insn_data[icode].operand[0].predicate) (temp, mode)
++ || GET_CODE (temp) != REG)
++ temp = gen_reg_rtx (mode);
++
++ emit_insn (gen_rtx_SET (VOIDmode, temp,
++ gen_rtx_PLUS (GET_MODE (op0), op0, op1)));
++ return temp;
++ }
++
+ if (flag_force_mem)
+ {
+ /* Load duplicate non-volatile operands once. */
+diff -uNr gcc-3.4.3.orig/gcc/opts.c gcc-3.4.3/gcc/opts.c
+--- gcc-3.4.3.orig/gcc/opts.c 2004-11-24 18:04:19.000000000 +0100
++++ gcc-3.4.3/gcc/opts.c 2004-11-24 18:35:31.762648648 +0100
+@@ -125,6 +125,9 @@
+ bool warn_unused_variable;
+ bool warn_unused_value;
+
++/* Warn when not issuing stack smashing protection for some reason */
++bool warn_stack_protector;
++
+ /* Hack for cooperation between set_Wunused and set_Wextra. */
+ static bool maybe_warn_unused_parameter;
+
+@@ -804,6 +807,10 @@
+ warn_unused_variable = value;
+ break;
+
++ case OPT_Wstack_protector:
++ warn_stack_protector = value;
++ break;
++
+ case OPT_aux_info:
+ case OPT_aux_info_:
+ aux_info_file_name = arg;
+@@ -1367,6 +1374,14 @@
+ stack_limit_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (arg));
+ break;
+
++ case OPT_fstack_protector:
++ flag_propolice_protection = value;
++ break;
++
++ case OPT_fstack_protector_all:
++ flag_stack_protection = value;
++ break;
++
+ case OPT_fstrength_reduce:
+ flag_strength_reduce = value;
+ break;
+diff -uNr gcc-3.4.3.orig/gcc/protector.c gcc-3.4.3/gcc/protector.c
+--- gcc-3.4.3.orig/gcc/protector.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.3/gcc/protector.c 2004-09-02 11:36:11.000000000 +0200
+@@ -0,0 +1,2730 @@
++/* RTL buffer overflow protection function for GNU C compiler
++ Copyright (C) 2003 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 2, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING. If not, write to the Free
++Software Foundation, 59 Temple Place - Suite 330, Boston, MA
++02111-1307, USA. */
++
++/* This file contains several memory arrangement functions to protect
++ the return address and the frame pointer of the stack
++ from a stack-smashing attack. It also
++ provides the function that protects pointer variables. */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++#include "machmode.h"
++#include "real.h"
++#include "rtl.h"
++#include "tree.h"
++#include "regs.h"
++#include "flags.h"
++#include "insn-config.h"
++#include "insn-flags.h"
++#include "expr.h"
++#include "output.h"
++#include "recog.h"
++#include "hard-reg-set.h"
++#include "except.h"
++#include "function.h"
++#include "toplev.h"
++#include "tm_p.h"
++#include "conditions.h"
++#include "insn-attr.h"
++#include "optabs.h"
++#include "reload.h"
++#include "protector.h"
++
++
++/* Round a value to the lowest integer less than it that is a multiple of
++ the required alignment. Avoid using division in case the value is
++ negative. Assume the alignment is a power of two. */
++#define FLOOR_ROUND(VALUE,ALIGN) ((VALUE) & ~((ALIGN) - 1))
++
++/* Similar, but round to the next highest integer that meets the
++ alignment. */
++#define CEIL_ROUND(VALUE,ALIGN) (((VALUE) + (ALIGN) - 1) & ~((ALIGN)- 1))
++
++
++/* Nonzero if function being compiled can define string buffers that may be
++ damaged by the stack-smash attack. */
++static int current_function_defines_vulnerable_string;
++static int current_function_defines_short_string;
++static int current_function_has_variable_string;
++static int current_function_defines_vsized_array;
++static int current_function_is_inlinable;
++
++/* Nonzero if search_string_def finds the variable which contains an array. */
++static int is_array;
++
++/* Nonzero if search_string_def finds a byte-pointer variable,
++ which may be assigned to alloca output. */
++static int may_have_alloca_pointer;
++
++static rtx guard_area, _guard;
++static rtx function_first_insn, prologue_insert_point;
++
++/* Offset to end of sweeped area for gathering character arrays. */
++static HOST_WIDE_INT sweep_frame_offset;
++
++/* Offset to end of allocated area for instantiating pseudo registers. */
++static HOST_WIDE_INT push_allocated_offset = 0;
++
++/* Offset to end of assigned area for instantiating pseudo registers. */
++static HOST_WIDE_INT push_frame_offset = 0;
++
++/* Set to 1 after cse_not_expected becomes nonzero. it is used to identify
++ which stage assign_stack_local_for_pseudo_reg is called from. */
++static int saved_cse_not_expected = 0;
++
++static int search_string_from_argsandvars (int);
++static int search_string_from_local_vars (tree);
++static int search_pointer_def (tree);
++static int search_func_pointer (tree);
++static int check_used_flag (rtx);
++static void reset_used_flags_for_insns (rtx);
++static void reset_used_flags_for_decls (tree);
++static void reset_used_flags_of_plus (rtx);
++static void rtl_prologue (rtx);
++static void rtl_epilogue (rtx);
++static void arrange_var_order (tree);
++static void copy_args_for_protection (void);
++static void sweep_string_variable (rtx, HOST_WIDE_INT);
++static void sweep_string_in_decls (tree, HOST_WIDE_INT, HOST_WIDE_INT);
++static void sweep_string_in_args (tree, HOST_WIDE_INT, HOST_WIDE_INT);
++static void sweep_string_use_of_insns (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
++static void sweep_string_in_operand (rtx, rtx *, HOST_WIDE_INT, HOST_WIDE_INT);
++static void move_arg_location (rtx, rtx, rtx, HOST_WIDE_INT);
++static void change_arg_use_of_insns (rtx, rtx, rtx *, HOST_WIDE_INT);
++static void change_arg_use_in_operand (rtx, rtx, rtx, rtx *, HOST_WIDE_INT);
++static void validate_insns_of_varrefs (rtx);
++static void validate_operand_of_varrefs (rtx, rtx *);
++
++/* Specify which size of buffers should be protected from a stack smashing
++ attack. Because small buffers are not used in situations which may
++ overflow buffer, the default size sets to the size of 64 bit register. */
++#ifndef SUSPICIOUS_BUF_SIZE
++#define SUSPICIOUS_BUF_SIZE 8
++#endif
++
++#define AUTO_BASEPTR(X) \
++ (GET_CODE (X) == PLUS ? XEXP (X, 0) : X)
++#define AUTO_OFFSET(X) \
++ (GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0)
++#undef PARM_PASSED_IN_MEMORY
++#define PARM_PASSED_IN_MEMORY(PARM) \
++ (GET_CODE (DECL_INCOMING_RTL (PARM)) == MEM)
++#define TREE_VISITED(NODE) ((NODE)->common.unused_0)
++
++/* Argument values for calling search_string_from_argsandvars. */
++#define CALL_FROM_PREPARE_STACK_PROTECTION 0
++#define CALL_FROM_PUSH_FRAME 1
++
++
++/* Prepare several stack protection instruments for the current function
++ if the function has an array as a local variable, which may be vulnerable
++ from a stack smashing attack, and it is not inlinable.
++
++ The overall steps are as follows;
++ (1)search an array,
++ (2)insert guard_area on the stack,
++ (3)duplicate pointer arguments into local variables, and
++ (4)arrange the location of local variables. */
++void
++prepare_stack_protection (int inlinable)
++{
++ tree blocks = DECL_INITIAL (current_function_decl);
++ current_function_is_inlinable = inlinable && !flag_no_inline;
++ push_frame_offset = push_allocated_offset = 0;
++ saved_cse_not_expected = 0;
++
++ /* Skip the protection if the function has no block
++ or it is an inline function. */
++ if (current_function_is_inlinable)
++ validate_insns_of_varrefs (get_insns ());
++ if (! blocks || current_function_is_inlinable)
++ return;
++
++ current_function_defines_vulnerable_string
++ = search_string_from_argsandvars (CALL_FROM_PREPARE_STACK_PROTECTION);
++
++ if (current_function_defines_vulnerable_string
++ || flag_stack_protection)
++ {
++ function_first_insn = get_insns ();
++
++ if (current_function_contains_functions)
++ {
++ if (warn_stack_protector)
++ warning ("not protecting function: it contains functions");
++ return;
++ }
++
++ /* Initialize recognition, indicating that volatile is OK. */
++ init_recog ();
++
++ sweep_frame_offset = 0;
++
++#ifdef STACK_GROWS_DOWNWARD
++ /* frame_offset: offset to end of allocated area of stack frame.
++ It is defined in the function.c. */
++
++ /* the location must be before buffers. */
++ guard_area = assign_stack_local (BLKmode, UNITS_PER_GUARD, -1);
++ PUT_MODE (guard_area, GUARD_m);
++ MEM_VOLATILE_P (guard_area) = 1;
++
++#ifndef FRAME_GROWS_DOWNWARD
++ sweep_frame_offset = frame_offset;
++#endif
++
++ /* For making room for guard value, scan all insns and fix the offset
++ address of the variable that is based on frame pointer.
++ Scan all declarations of variables and fix the offset address
++ of the variable that is based on the frame pointer. */
++ sweep_string_variable (guard_area, UNITS_PER_GUARD);
++
++
++ /* the location of guard area moves to the beginning of stack frame. */
++ if (AUTO_OFFSET(XEXP (guard_area, 0)))
++ XEXP (XEXP (guard_area, 0), 1)
++ = gen_rtx_CONST_INT (VOIDmode, sweep_frame_offset);
++
++
++ /* Insert prologue rtl instructions. */
++ rtl_prologue (function_first_insn);
++
++ if (! current_function_has_variable_string)
++ {
++ /* Generate argument saving instruction. */
++ copy_args_for_protection ();
++
++#ifndef FRAME_GROWS_DOWNWARD
++ /* If frame grows upward, character arrays for protecting args
++ may copy to the top of the guard variable.
++ So sweep the guard variable again. */
++ sweep_frame_offset = CEIL_ROUND (frame_offset,
++ BIGGEST_ALIGNMENT / BITS_PER_UNIT);
++ sweep_string_variable (guard_area, UNITS_PER_GUARD);
++#endif
++ }
++ /* Variable can't be protected from the overflow of variable length
++ buffer. But variable reordering is still effective against
++ the overflow of fixed size character arrays. */
++ else if (warn_stack_protector)
++ warning ("not protecting variables: it has a variable length buffer");
++#endif
++#ifndef FRAME_GROWS_DOWNWARD
++ if (STARTING_FRAME_OFFSET == 0)
++ {
++ /* This part may be only for alpha. */
++ push_allocated_offset = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
++ assign_stack_local (BLKmode, push_allocated_offset, -1);
++ sweep_frame_offset = frame_offset;
++ sweep_string_variable (const0_rtx, -push_allocated_offset);
++ sweep_frame_offset = AUTO_OFFSET (XEXP (guard_area, 0));
++ }
++#endif
++
++ /* Arrange the order of local variables. */
++ arrange_var_order (blocks);
++
++#ifdef STACK_GROWS_DOWNWARD
++ /* Insert epilogue rtl instructions. */
++ rtl_epilogue (get_last_insn ());
++#endif
++ init_recog_no_volatile ();
++ }
++ else if (current_function_defines_short_string
++ && warn_stack_protector)
++ warning ("not protecting function: buffer is less than %d bytes long",
++ SUSPICIOUS_BUF_SIZE);
++}
++
++/*
++ Search string from arguments and local variables.
++ caller: CALL_FROM_PREPARE_STACK_PROTECTION (0)
++ CALL_FROM_PUSH_FRAME (1)
++*/
++static int
++search_string_from_argsandvars (int caller)
++{
++ tree blocks, parms;
++ int string_p;
++
++ /* Saves a latest search result as a cached infomation. */
++ static tree __latest_search_decl = 0;
++ static int __latest_search_result = FALSE;
++
++ if (__latest_search_decl == current_function_decl)
++ return __latest_search_result;
++ else
++ if (caller == CALL_FROM_PUSH_FRAME)
++ return FALSE;
++
++ __latest_search_decl = current_function_decl;
++ __latest_search_result = TRUE;
++
++ current_function_defines_short_string = FALSE;
++ current_function_has_variable_string = FALSE;
++ current_function_defines_vsized_array = FALSE;
++ may_have_alloca_pointer = FALSE;
++
++ /* Search a string variable from local variables. */
++ blocks = DECL_INITIAL (current_function_decl);
++ string_p = search_string_from_local_vars (blocks);
++
++ if (! current_function_defines_vsized_array
++ && may_have_alloca_pointer
++ && current_function_calls_alloca)
++ {
++ current_function_has_variable_string = TRUE;
++ return TRUE;
++ }
++
++ if (string_p)
++ return TRUE;
++
++#ifdef STACK_GROWS_DOWNWARD
++ /* Search a string variable from arguments. */
++ parms = DECL_ARGUMENTS (current_function_decl);
++
++ for (; parms; parms = TREE_CHAIN (parms))
++ if (DECL_NAME (parms) && TREE_TYPE (parms) != error_mark_node)
++ {
++ if (PARM_PASSED_IN_MEMORY (parms))
++ {
++ string_p = search_string_def (TREE_TYPE(parms));
++ if (string_p)
++ return TRUE;
++ }
++ }
++#endif
++
++ __latest_search_result = FALSE;
++ return FALSE;
++}
++
++
++/* Search string from local variables in the specified scope. */
++static int
++search_string_from_local_vars (tree block)
++{
++ tree types;
++ int found = FALSE;
++
++ while (block && TREE_CODE(block)==BLOCK)
++ {
++ for (types = BLOCK_VARS(block); types; types = TREE_CHAIN(types))
++ {
++ /* Skip the declaration that refers an external variable. */
++ /* name: types.decl.name.identifier.id */
++ if (! DECL_EXTERNAL (types) && ! TREE_STATIC (types)
++ && TREE_CODE (types) == VAR_DECL
++ && ! DECL_ARTIFICIAL (types)
++ && DECL_RTL_SET_P (types)
++ && GET_CODE (DECL_RTL (types)) == MEM
++
++ && search_string_def (TREE_TYPE (types)))
++ {
++ rtx home = DECL_RTL (types);
++
++ if (GET_CODE (home) == MEM
++ && (GET_CODE (XEXP (home, 0)) == MEM
++ || (GET_CODE (XEXP (home, 0)) == REG
++ && XEXP (home, 0) != virtual_stack_vars_rtx
++ && REGNO (XEXP (home, 0)) != HARD_FRAME_POINTER_REGNUM
++ && REGNO (XEXP (home, 0)) != STACK_POINTER_REGNUM
++#if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
++ && REGNO (XEXP (home, 0)) != ARG_POINTER_REGNUM
++#endif
++ )))
++ /* If the value is indirect by memory or by a register
++ that isn't the frame pointer then it means the object is
++ variable-sized and address through
++ that register or stack slot.
++ The protection has no way to hide pointer variables
++ behind the array, so all we can do is staying
++ the order of variables and arguments. */
++ {
++ current_function_has_variable_string = TRUE;
++ }
++
++ /* Found character array. */
++ found = TRUE;
++ }
++ }
++
++ if (search_string_from_local_vars (BLOCK_SUBBLOCKS (block)))
++ {
++ found = TRUE;
++ }
++
++ block = BLOCK_CHAIN (block);
++ }
++
++ return found;
++}
++
++
++/* Search a character array from the specified type tree. */
++int
++search_string_def (tree type)
++{
++ tree tem;
++
++ if (! type)
++ return FALSE;
++
++ switch (TREE_CODE (type))
++ {
++ case ARRAY_TYPE:
++ /* Check if the array is a variable-sized array. */
++ if (TYPE_DOMAIN (type) == 0
++ || (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != 0
++ && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == NOP_EXPR))
++ current_function_defines_vsized_array = TRUE;
++
++ /* Check if the array is related to char array. */
++ if (TYPE_MAIN_VARIANT (TREE_TYPE(type)) == char_type_node
++ || TYPE_MAIN_VARIANT (TREE_TYPE(type)) == signed_char_type_node
++ || TYPE_MAIN_VARIANT (TREE_TYPE(type)) == unsigned_char_type_node)
++ {
++ /* Check if the string is a variable string. */
++ if (TYPE_DOMAIN (type) == 0
++ || (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != 0
++ && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == NOP_EXPR))
++ return TRUE;
++
++ /* Check if the string size is greater than SUSPICIOUS_BUF_SIZE. */
++ if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != 0
++ && (TREE_INT_CST_LOW(TYPE_MAX_VALUE(TYPE_DOMAIN(type)))+1
++ >= SUSPICIOUS_BUF_SIZE))
++ return TRUE;
++
++ current_function_defines_short_string = TRUE;
++ }
++
++ /* to protect every functions, sweep any arrays to the frame top. */
++ is_array = TRUE;
++
++ return search_string_def(TREE_TYPE(type));
++
++ case UNION_TYPE:
++ case QUAL_UNION_TYPE:
++ case RECORD_TYPE:
++ /* Check if each field has character arrays. */
++ for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
++ {
++ /* Omit here local type decls until we know how to support them. */
++ if ((TREE_CODE (tem) == TYPE_DECL)
++ || (TREE_CODE (tem) == VAR_DECL && TREE_STATIC (tem)))
++ continue;
++
++ if (search_string_def(TREE_TYPE(tem)))
++ return TRUE;
++ }
++ break;
++
++ case POINTER_TYPE:
++ /* Check if pointer variables, which may be a pointer assigned
++ by alloca function call, are declared. */
++ if (TYPE_MAIN_VARIANT (TREE_TYPE(type)) == char_type_node
++ || TYPE_MAIN_VARIANT (TREE_TYPE(type)) == signed_char_type_node
++ || TYPE_MAIN_VARIANT (TREE_TYPE(type)) == unsigned_char_type_node)
++ may_have_alloca_pointer = TRUE;
++ break;
++
++ case REFERENCE_TYPE:
++ case OFFSET_TYPE:
++ default:
++ break;
++ }
++
++ return FALSE;
++}
++
++
++/* Examine whether the input contains frame pointer addressing. */
++int
++contains_fp (rtx op)
++{
++ enum rtx_code code;
++ rtx x;
++ int i, j;
++ const char *fmt;
++
++ x = op;
++ if (x == 0)
++ return FALSE;
++
++ code = GET_CODE (x);
++
++ switch (code)
++ {
++ case CONST_INT:
++ case CONST_DOUBLE:
++ case CONST:
++ case SYMBOL_REF:
++ case CODE_LABEL:
++ case REG:
++ case ADDRESSOF:
++ return FALSE;
++
++ case MEM:
++ /* This case is not generated at the stack protection.
++ see plus_constant_wide and simplify_plus_minus function. */
++ if (XEXP (x, 0) == virtual_stack_vars_rtx)
++ abort ();
++
++ case PLUS:
++ if (XEXP (x, 0) == virtual_stack_vars_rtx
++ && GET_CODE (XEXP (x, 1)) == CONST_INT)
++ return TRUE;
++
++ default:
++ break;
++ }
++
++ /* Scan all subexpressions. */
++ fmt = GET_RTX_FORMAT (code);
++ for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
++ if (*fmt == 'e')
++ {
++ if (contains_fp (XEXP (x, i)))
++ return TRUE;
++ }
++ else if (*fmt == 'E')
++ for (j = 0; j < XVECLEN (x, i); j++)
++ if (contains_fp (XVECEXP (x, i, j)))
++ return TRUE;
++
++ return FALSE;
++}
++
++
++/* Examine whether the input contains any pointer. */
++static int
++search_pointer_def (tree type)
++{
++ tree tem;
++
++ if (! type)
++ return FALSE;
++
++ switch (TREE_CODE (type))
++ {
++ case UNION_TYPE:
++ case QUAL_UNION_TYPE:
++ case RECORD_TYPE:
++ /* Check if each field has a pointer. */
++ for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
++ {
++ if ((TREE_CODE (tem) == TYPE_DECL)
++ || (TREE_CODE (tem) == VAR_DECL && TREE_STATIC (tem)))
++ continue;
++
++ if (search_pointer_def (TREE_TYPE(tem)))
++ return TRUE;
++ }
++ break;
++
++ case ARRAY_TYPE:
++ return search_pointer_def (TREE_TYPE(type));
++
++ case POINTER_TYPE:
++ case REFERENCE_TYPE:
++ case OFFSET_TYPE:
++ if (TYPE_READONLY (TREE_TYPE (type)))
++ {
++ /* If this pointer contains function pointer,
++ it should be protected. */
++ return search_func_pointer (TREE_TYPE (type));
++ }
++ return TRUE;
++
++ default:
++ break;
++ }
++
++ return FALSE;
++}
++
++
++/* Examine whether the input contains function pointer. */
++static int
++search_func_pointer (tree type)
++{
++ tree tem;
++
++ if (! type)
++ return FALSE;
++
++ switch (TREE_CODE (type))
++ {
++ case UNION_TYPE:
++ case QUAL_UNION_TYPE:
++ case RECORD_TYPE:
++ if (! TREE_VISITED (type))
++ {
++ /* Mark the type as having been visited already. */
++ TREE_VISITED (type) = 1;
++
++ /* Check if each field has a function pointer. */
++ for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
++ {
++ if (TREE_CODE (tem) == FIELD_DECL
++ && search_func_pointer (TREE_TYPE(tem)))
++ {
++ TREE_VISITED (type) = 0;
++ return TRUE;
++ }
++ }
++
++ TREE_VISITED (type) = 0;
++ }
++ break;
++
++ case ARRAY_TYPE:
++ return search_func_pointer (TREE_TYPE(type));
++
++ case POINTER_TYPE:
++ case REFERENCE_TYPE:
++ case OFFSET_TYPE:
++ if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
++ return TRUE;
++ return search_func_pointer (TREE_TYPE(type));
++
++ default:
++ break;
++ }
++
++ return FALSE;
++}
++
++
++/* Check whether the specified rtx contains PLUS rtx with used flag. */
++static int
++check_used_flag (rtx x)
++{
++ register int i, j;
++ register enum rtx_code code;
++ register const char *format_ptr;
++
++ if (x == 0)
++ return FALSE;
++
++ code = GET_CODE (x);
++
++ switch (code)
++ {
++ case REG:
++ case QUEUED:
++ case CONST_INT:
++ case CONST_DOUBLE:
++ case SYMBOL_REF:
++ case CODE_LABEL:
++ case PC:
++ case CC0:
++ return FALSE;
++
++ case PLUS:
++ if (x->used)
++ return TRUE;
++
++ default:
++ break;
++ }
++
++ format_ptr = GET_RTX_FORMAT (code);
++ for (i = 0; i < GET_RTX_LENGTH (code); i++)
++ {
++ switch (*format_ptr++)
++ {
++ case 'e':
++ if (check_used_flag (XEXP (x, i)))
++ return TRUE;
++ break;
++
++ case 'E':
++ for (j = 0; j < XVECLEN (x, i); j++)
++ if (check_used_flag (XVECEXP (x, i, j)))
++ return TRUE;
++ break;
++ }
++ }
++
++ return FALSE;
++}
++
++
++/* Reset used flag of every insns after the spcecified insn. */
++static void
++reset_used_flags_for_insns (rtx insn)
++{
++ int i, j;
++ enum rtx_code code;
++ const char *format_ptr;
++
++ for (; insn; insn = NEXT_INSN (insn))
++ if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
++ || GET_CODE (insn) == CALL_INSN)
++ {
++ code = GET_CODE (insn);
++ insn->used = 0;
++ format_ptr = GET_RTX_FORMAT (code);
++
++ for (i = 0; i < GET_RTX_LENGTH (code); i++)
++ {
++ switch (*format_ptr++)
++ {
++ case 'e':
++ reset_used_flags_of_plus (XEXP (insn, i));
++ break;
++
++ case 'E':
++ for (j = 0; j < XVECLEN (insn, i); j++)
++ reset_used_flags_of_plus (XVECEXP (insn, i, j));
++ break;
++ }
++ }
++ }
++}
++
++
++/* Reset used flag of every variables in the specified block. */
++static void
++reset_used_flags_for_decls (tree block)
++{
++ tree types;
++ rtx home;
++
++ while (block && TREE_CODE(block)==BLOCK)
++ {
++ types = BLOCK_VARS(block);
++
++ for (types= BLOCK_VARS(block); types; types = TREE_CHAIN(types))
++ {
++ /* Skip the declaration that refers an external variable and
++ also skip an global variable. */
++ if (! DECL_EXTERNAL (types))
++ {
++ if (! DECL_RTL_SET_P (types))
++ continue;
++ home = DECL_RTL (types);
++
++ if (GET_CODE (home) == MEM
++ && GET_CODE (XEXP (home, 0)) == PLUS
++ && GET_CODE (XEXP (XEXP (home, 0), 1)) == CONST_INT)
++ {
++ XEXP (home, 0)->used = 0;
++ }
++ }
++ }
++
++ reset_used_flags_for_decls (BLOCK_SUBBLOCKS (block));
++
++ block = BLOCK_CHAIN (block);
++ }
++}
++
++
++/* Reset the used flag of every PLUS rtx derived from the specified rtx. */
++static void
++reset_used_flags_of_plus (rtx x)
++{
++ int i, j;
++ enum rtx_code code;
++ const char *format_ptr;
++
++ if (x == 0)
++ return;
++
++ code = GET_CODE (x);
++
++ switch (code)
++ {
++ /* These types may be freely shared so we needn't do any resetting
++ for them. */
++ case REG:
++ case QUEUED:
++ case CONST_INT:
++ case CONST_DOUBLE:
++ case SYMBOL_REF:
++ case CODE_LABEL:
++ case PC:
++ case CC0:
++ return;
++
++ case INSN:
++ case JUMP_INSN:
++ case CALL_INSN:
++ case NOTE:
++ case LABEL_REF:
++ case BARRIER:
++ /* The chain of insns is not being copied. */
++ return;
++
++ case PLUS:
++ x->used = 0;
++ break;
++
++ case CALL_PLACEHOLDER:
++ reset_used_flags_for_insns (XEXP (x, 0));
++ reset_used_flags_for_insns (XEXP (x, 1));
++ reset_used_flags_for_insns (XEXP (x, 2));
++ break;
++
++ default:
++ break;
++ }
++
++ format_ptr = GET_RTX_FORMAT (code);
++ for (i = 0; i < GET_RTX_LENGTH (code); i++)
++ {
++ switch (*format_ptr++)
++ {
++ case 'e':
++ reset_used_flags_of_plus (XEXP (x, i));
++ break;
++
++ case 'E':
++ for (j = 0; j < XVECLEN (x, i); j++)
++ reset_used_flags_of_plus (XVECEXP (x, i, j));
++ break;
++ }
++ }
++}
++
++
++/* Generate the prologue insns of the protector into the specified insn. */
++static void
++rtl_prologue (rtx insn)
++{
++#if defined(INIT_SECTION_ASM_OP) && !defined(INVOKE__main)
++#undef HAS_INIT_SECTION
++#define HAS_INIT_SECTION
++#endif
++
++ rtx _val;
++
++ for (; insn; insn = NEXT_INSN (insn))
++ if (GET_CODE (insn) == NOTE
++ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
++ break;
++
++#if !defined (HAS_INIT_SECTION)
++ /* If this function is `main', skip a call to `__main'
++ to run guard instruments after global initializers, etc. */
++ if (DECL_NAME (current_function_decl)
++ && MAIN_NAME_P (DECL_NAME (current_function_decl))
++ && DECL_CONTEXT (current_function_decl) == NULL_TREE)
++ {
++ rtx fbinsn = insn;
++ for (; insn; insn = NEXT_INSN (insn))
++ if (GET_CODE (insn) == NOTE
++ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_BEG)
++ break;
++ if (insn == 0)
++ insn = fbinsn;
++ }
++#endif
++
++ /* Mark the next insn of FUNCTION_BEG insn. */
++ prologue_insert_point = NEXT_INSN (insn);
++
++ start_sequence ();
++
++ _guard = gen_rtx_MEM (GUARD_m, gen_rtx_SYMBOL_REF (Pmode, "__guard"));
++ emit_move_insn ( guard_area, _guard);
++
++ _val = get_insns ();
++ end_sequence ();
++
++ emit_insn_before (_val, prologue_insert_point);
++}
++
++
++/* Generate the epilogue insns of the protector into the specified insn. */
++static void
++rtl_epilogue (rtx insn)
++{
++ rtx if_false_label;
++ rtx _val;
++ rtx funcname;
++ tree funcstr;
++ int flag_have_return = FALSE;
++
++ start_sequence ();
++
++#ifdef HAVE_return
++ if (HAVE_return)
++ {
++ rtx insn;
++ return_label = gen_label_rtx ();
++
++ for (insn = prologue_insert_point; insn; insn = NEXT_INSN (insn))
++ if (GET_CODE (insn) == JUMP_INSN
++ && GET_CODE (PATTERN (insn)) == RETURN
++ && GET_MODE (PATTERN (insn)) == VOIDmode)
++ {
++ rtx pat = gen_rtx_SET (VOIDmode,
++ pc_rtx,
++ gen_rtx_LABEL_REF (VOIDmode,
++ return_label));
++ PATTERN (insn) = pat;
++ flag_have_return = TRUE;
++ }
++
++
++ emit_label (return_label);
++ }
++#endif
++
++ /* if (guard_area != _guard) */
++ compare_from_rtx (guard_area, _guard, NE, 0, GUARD_m, NULL_RTX);
++
++ if_false_label = gen_label_rtx (); /* { */
++ emit_jump_insn ( gen_beq(if_false_label));
++
++ /* generate string for the current function name */
++ funcstr = build_string (strlen(current_function_name ())+1,
++ current_function_name ());
++ TREE_TYPE (funcstr) = build_array_type (char_type_node, 0);
++ funcname = output_constant_def (funcstr, 1);
++
++ emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__stack_smash_handler"),
++ 0, VOIDmode, 2,
++ XEXP (funcname, 0), Pmode, guard_area, GUARD_m);
++
++ /* generate RTL to return from the current function */
++
++ emit_barrier (); /* } */
++ emit_label (if_false_label);
++
++ /* generate RTL to return from the current function */
++ if (DECL_RTL_SET_P (DECL_RESULT (current_function_decl)))
++ use_return_register ();
++
++#ifdef HAVE_return
++ if (HAVE_return && flag_have_return)
++ {
++ emit_jump_insn (gen_return ());
++ emit_barrier ();
++ }
++#endif
++
++ _val = get_insns ();
++ end_sequence ();
++
++ emit_insn_after (_val, insn);
++}
++
++
++/* For every variable which type is character array, moves its location
++ in the stack frame to the sweep_frame_offset position. */
++static void
++arrange_var_order (tree block)
++{
++ tree types;
++ HOST_WIDE_INT offset;
++
++ while (block && TREE_CODE(block)==BLOCK)
++ {
++ /* arrange the location of character arrays in depth first. */
++ arrange_var_order (BLOCK_SUBBLOCKS (block));
++
++ for (types = BLOCK_VARS (block); types; types = TREE_CHAIN(types))
++ {
++ /* Skip the declaration that refers an external variable. */
++ if (! DECL_EXTERNAL (types) && ! TREE_STATIC (types)
++ && TREE_CODE (types) == VAR_DECL
++ && ! DECL_ARTIFICIAL (types)
++ && DECL_RTL_SET_P (types)
++ && GET_CODE (DECL_RTL (types)) == MEM
++ && GET_MODE (DECL_RTL (types)) == BLKmode
++
++ && (is_array=0,
++ search_string_def (TREE_TYPE (types))
++ || (! current_function_defines_vulnerable_string && is_array)))
++ {
++ rtx home = DECL_RTL (types);
++
++ if (!(GET_CODE (home) == MEM
++ && (GET_CODE (XEXP (home, 0)) == MEM
++ || (GET_CODE (XEXP (home, 0)) == REG
++ && XEXP (home, 0) != virtual_stack_vars_rtx
++ && REGNO (XEXP (home, 0)) != HARD_FRAME_POINTER_REGNUM
++ && REGNO (XEXP (home, 0)) != STACK_POINTER_REGNUM
++#if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
++ && REGNO (XEXP (home, 0)) != ARG_POINTER_REGNUM
++#endif
++ ))))
++ {
++ /* Found a string variable. */
++ HOST_WIDE_INT var_size =
++ ((TREE_INT_CST_LOW (DECL_SIZE (types)) + BITS_PER_UNIT - 1)
++ / BITS_PER_UNIT);
++
++ /* Confirmed it is BLKmode. */
++ int alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
++ var_size = CEIL_ROUND (var_size, alignment);
++
++ /* Skip the variable if it is top of the region
++ specified by sweep_frame_offset. */
++ offset = AUTO_OFFSET (XEXP (DECL_RTL (types), 0));
++ if (offset == sweep_frame_offset - var_size)
++ sweep_frame_offset -= var_size;
++
++ else if (offset < sweep_frame_offset - var_size)
++ sweep_string_variable (DECL_RTL (types), var_size);
++ }
++ }
++ }
++
++ block = BLOCK_CHAIN (block);
++ }
++}
++
++
++/* To protect every pointer argument and move character arrays in the argument,
++ Copy those variables to the top of the stack frame and move the location of
++ character arrays to the posion of sweep_frame_offset. */
++static void
++copy_args_for_protection (void)
++{
++ tree parms = DECL_ARGUMENTS (current_function_decl);
++ rtx temp_rtx;
++
++ parms = DECL_ARGUMENTS (current_function_decl);
++ for (; parms; parms = TREE_CHAIN (parms))
++ if (DECL_NAME (parms) && TREE_TYPE (parms) != error_mark_node)
++ {
++ if (PARM_PASSED_IN_MEMORY (parms) && DECL_NAME (parms))
++ {
++ int string_p;
++ rtx seq;
++
++ string_p = search_string_def (TREE_TYPE(parms));
++
++ /* Check if it is a candidate to move. */
++ if (string_p || search_pointer_def (TREE_TYPE (parms)))
++ {
++ int arg_size
++ = ((TREE_INT_CST_LOW (DECL_SIZE (parms)) + BITS_PER_UNIT - 1)
++ / BITS_PER_UNIT);
++ tree passed_type = DECL_ARG_TYPE (parms);
++ tree nominal_type = TREE_TYPE (parms);
++
++ start_sequence ();
++
++ if (GET_CODE (DECL_RTL (parms)) == REG)
++ {
++ rtx safe = 0;
++
++ change_arg_use_of_insns (prologue_insert_point,
++ DECL_RTL (parms), &safe, 0);
++ if (safe)
++ {
++ /* Generate codes for copying the content. */
++ rtx movinsn = emit_move_insn (safe, DECL_RTL (parms));
++
++ /* Avoid register elimination in gcse.c. */
++ PATTERN (movinsn)->volatil = 1;
++
++ /* Save debugger info. */
++ SET_DECL_RTL (parms, safe);
++ }
++ }
++ else if (GET_CODE (DECL_RTL (parms)) == MEM
++ && GET_CODE (XEXP (DECL_RTL (parms), 0)) == ADDRESSOF)
++ {
++ rtx movinsn;
++ rtx safe = gen_reg_rtx (GET_MODE (DECL_RTL (parms)));
++
++ /* Generate codes for copying the content. */
++ movinsn = emit_move_insn (safe, DECL_INCOMING_RTL (parms));
++ /* Avoid register elimination in gcse.c. */
++ PATTERN (movinsn)->volatil = 1;
++
++ /* Change the addressof information to the newly
++ allocated pseudo register. */
++ emit_move_insn (DECL_RTL (parms), safe);
++
++ /* Save debugger info. */
++ SET_DECL_RTL (parms, safe);
++ }
++
++ /* See if the frontend wants to pass this by invisible
++ reference. */
++ else if (passed_type != nominal_type
++ && POINTER_TYPE_P (passed_type)
++ && TREE_TYPE (passed_type) == nominal_type)
++ {
++ rtx safe = 0, orig = XEXP (DECL_RTL (parms), 0);
++
++ change_arg_use_of_insns (prologue_insert_point,
++ orig, &safe, 0);
++ if (safe)
++ {
++ /* Generate codes for copying the content. */
++ rtx movinsn = emit_move_insn (safe, orig);
++
++ /* Avoid register elimination in gcse.c */
++ PATTERN (movinsn)->volatil = 1;
++
++ /* Save debugger info. */
++ SET_DECL_RTL (parms, safe);
++ }
++ }
++
++ else
++ {
++ /* Declare temporary local variable for parms. */
++ temp_rtx
++ = assign_stack_local (DECL_MODE (parms), arg_size,
++ DECL_MODE (parms) == BLKmode ?
++ -1 : 0);
++
++ MEM_IN_STRUCT_P (temp_rtx)
++ = AGGREGATE_TYPE_P (TREE_TYPE (parms));
++ set_mem_alias_set (temp_rtx, get_alias_set (parms));
++
++ /* Generate codes for copying the content. */
++ store_expr (parms, temp_rtx, 0);
++
++ /* Change the reference for each instructions. */
++ move_arg_location (prologue_insert_point, DECL_RTL (parms),
++ temp_rtx, arg_size);
++
++ /* Change the location of parms variable. */
++ SET_DECL_RTL (parms, temp_rtx);
++ }
++
++ seq = get_insns ();
++ end_sequence ();
++ emit_insn_before (seq, prologue_insert_point);
++
++#ifdef FRAME_GROWS_DOWNWARD
++ /* Process the string argument. */
++ if (string_p && DECL_MODE (parms) == BLKmode)
++ {
++ int alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
++ arg_size = CEIL_ROUND (arg_size, alignment);
++
++ /* Change the reference for each instructions. */
++ sweep_string_variable (DECL_RTL (parms), arg_size);
++ }
++#endif
++ }
++ }
++ }
++}
++
++
++/* Sweep a string variable to the positon of sweep_frame_offset in the
++ stack frame, that is a last position of string variables. */
++static void
++sweep_string_variable (rtx sweep_var, HOST_WIDE_INT var_size)
++{
++ HOST_WIDE_INT sweep_offset;
++
++ switch (GET_CODE (sweep_var))
++ {
++ case MEM:
++ if (GET_CODE (XEXP (sweep_var, 0)) == ADDRESSOF
++ && GET_CODE (XEXP (XEXP (sweep_var, 0), 0)) == REG)
++ return;
++ sweep_offset = AUTO_OFFSET(XEXP (sweep_var, 0));
++ break;
++ case CONST_INT:
++ sweep_offset = INTVAL (sweep_var);
++ break;
++ default:
++ abort ();
++ }
++
++ /* Scan all declarations of variables and fix the offset address of
++ the variable based on the frame pointer. */
++ sweep_string_in_decls (DECL_INITIAL (current_function_decl),
++ sweep_offset, var_size);
++
++ /* Scan all argument variable and fix the offset address based on
++ the frame pointer. */
++ sweep_string_in_args (DECL_ARGUMENTS (current_function_decl),
++ sweep_offset, var_size);
++
++ /* For making room for sweep variable, scan all insns and
++ fix the offset address of the variable that is based on frame pointer. */
++ sweep_string_use_of_insns (function_first_insn, sweep_offset, var_size);
++
++
++ /* Clear all the USED bits in operands of all insns and declarations of
++ local variables. */
++ reset_used_flags_for_decls (DECL_INITIAL (current_function_decl));
++ reset_used_flags_for_insns (function_first_insn);
++
++ sweep_frame_offset -= var_size;
++}
++
++
++
++/* Move an argument to the local variable addressed by frame_offset. */
++static void
++move_arg_location (rtx insn, rtx orig, rtx new, HOST_WIDE_INT var_size)
++{
++ /* For making room for sweep variable, scan all insns and
++ fix the offset address of the variable that is based on frame pointer. */
++ change_arg_use_of_insns (insn, orig, &new, var_size);
++
++
++ /* Clear all the USED bits in operands of all insns and declarations
++ of local variables. */
++ reset_used_flags_for_insns (insn);
++}
++
++
++/* Sweep character arrays declared as local variable. */
++static void
++sweep_string_in_decls (tree block, HOST_WIDE_INT sweep_offset,
++ HOST_WIDE_INT sweep_size)
++{
++ tree types;
++ HOST_WIDE_INT offset;
++ rtx home;
++
++ while (block && TREE_CODE(block)==BLOCK)
++ {
++ for (types = BLOCK_VARS(block); types; types = TREE_CHAIN(types))
++ {
++ /* Skip the declaration that refers an external variable and
++ also skip an global variable. */
++ if (! DECL_EXTERNAL (types) && ! TREE_STATIC (types)) {
++
++ if (! DECL_RTL_SET_P (types))
++ continue;
++
++ home = DECL_RTL (types);
++
++ /* Process for static local variable. */
++ if (GET_CODE (home) == MEM
++ && GET_CODE (XEXP (home, 0)) == SYMBOL_REF)
++ continue;
++
++ if (GET_CODE (home) == MEM
++ && XEXP (home, 0) == virtual_stack_vars_rtx)
++ {
++ offset = 0;
++
++ /* the operand related to the sweep variable. */
++ if (sweep_offset <= offset
++ && offset < sweep_offset + sweep_size)
++ {
++ offset = sweep_frame_offset - sweep_size - sweep_offset;
++
++ XEXP (home, 0) = plus_constant (virtual_stack_vars_rtx,
++ offset);
++ XEXP (home, 0)->used = 1;
++ }
++ else if (sweep_offset <= offset
++ && offset < sweep_frame_offset)
++ {
++ /* the rest of variables under sweep_frame_offset,
++ shift the location. */
++ XEXP (home, 0) = plus_constant (virtual_stack_vars_rtx,
++ -sweep_size);
++ XEXP (home, 0)->used = 1;
++ }
++ }
++
++ if (GET_CODE (home) == MEM
++ && GET_CODE (XEXP (home, 0)) == MEM)
++ {
++ /* Process for dynamically allocated array. */
++ home = XEXP (home, 0);
++ }
++
++ if (GET_CODE (home) == MEM
++ && GET_CODE (XEXP (home, 0)) == PLUS
++ && XEXP (XEXP (home, 0), 0) == virtual_stack_vars_rtx
++ && GET_CODE (XEXP (XEXP (home, 0), 1)) == CONST_INT)
++ {
++ if (! XEXP (home, 0)->used)
++ {
++ offset = AUTO_OFFSET(XEXP (home, 0));
++
++ /* the operand related to the sweep variable. */
++ if (sweep_offset <= offset
++ && offset < sweep_offset + sweep_size)
++ {
++
++ offset
++ += sweep_frame_offset - sweep_size - sweep_offset;
++ XEXP (XEXP (home, 0), 1) = gen_rtx_CONST_INT (VOIDmode,
++ offset);
++
++ /* mark */
++ XEXP (home, 0)->used = 1;
++ }
++ else if (sweep_offset <= offset
++ && offset < sweep_frame_offset)
++ {
++ /* the rest of variables under sweep_frame_offset,
++ so shift the location. */
++
++ XEXP (XEXP (home, 0), 1)
++ = gen_rtx_CONST_INT (VOIDmode, offset - sweep_size);
++
++ /* mark */
++ XEXP (home, 0)->used = 1;
++ }
++ }
++ }
++ }
++ }
++
++ sweep_string_in_decls (BLOCK_SUBBLOCKS (block),
++ sweep_offset, sweep_size);
++
++ block = BLOCK_CHAIN (block);
++ }
++}
++
++
++/* Sweep character arrays declared as argument. */
++static void
++sweep_string_in_args (tree parms, HOST_WIDE_INT sweep_offset,
++ HOST_WIDE_INT sweep_size)
++{
++ rtx home;
++ HOST_WIDE_INT offset;
++
++ for (; parms; parms = TREE_CHAIN (parms))
++ if (DECL_NAME (parms) && TREE_TYPE (parms) != error_mark_node)
++ {
++ if (PARM_PASSED_IN_MEMORY (parms) && DECL_NAME (parms))
++ {
++ home = DECL_INCOMING_RTL (parms);
++
++ if (XEXP (home, 0)->used)
++ continue;
++
++ offset = AUTO_OFFSET(XEXP (home, 0));
++
++ /* the operand related to the sweep variable. */
++ if (AUTO_BASEPTR (XEXP (home, 0)) == virtual_stack_vars_rtx)
++ {
++ if (sweep_offset <= offset
++ && offset < sweep_offset + sweep_size)
++ {
++ offset += sweep_frame_offset - sweep_size - sweep_offset;
++ XEXP (XEXP (home, 0), 1) = gen_rtx_CONST_INT (VOIDmode,
++ offset);
++
++ /* mark */
++ XEXP (home, 0)->used = 1;
++ }
++ else if (sweep_offset <= offset
++ && offset < sweep_frame_offset)
++ {
++ /* the rest of variables under sweep_frame_offset,
++ shift the location. */
++ XEXP (XEXP (home, 0), 1)
++ = gen_rtx_CONST_INT (VOIDmode, offset - sweep_size);
++
++ /* mark */
++ XEXP (home, 0)->used = 1;
++ }
++ }
++ }
++ }
++}
++
++
++/* Set to 1 when the instruction contains virtual registers. */
++static int has_virtual_reg;
++
++/* Sweep the specified character array for every insns. The array starts from
++ the sweep_offset and its size is sweep_size. */
++static void
++sweep_string_use_of_insns (rtx insn, HOST_WIDE_INT sweep_offset,
++ HOST_WIDE_INT sweep_size)
++{
++ for (; insn; insn = NEXT_INSN (insn))
++ if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
++ || GET_CODE (insn) == CALL_INSN)
++ {
++ has_virtual_reg = FALSE;
++ sweep_string_in_operand (insn, &PATTERN (insn),
++ sweep_offset, sweep_size);
++ sweep_string_in_operand (insn, ®_NOTES (insn),
++ sweep_offset, sweep_size);
++ }
++}
++
++
++/* Sweep the specified character array, which starts from the sweep_offset and
++ its size is sweep_size.
++
++ When a pointer is given,
++ if it points the address higher than the array, it stays.
++ if it points the address inside the array, it changes to point inside
++ the sweeped array.
++ if it points the address lower than the array, it shifts higher address by
++ the sweep_size. */
++static void
++sweep_string_in_operand (rtx insn, rtx *loc,
++ HOST_WIDE_INT sweep_offset, HOST_WIDE_INT sweep_size)
++{
++ rtx x = *loc;
++ enum rtx_code code;
++ int i, j, k = 0;
++ HOST_WIDE_INT offset;
++ const char *fmt;
++
++ if (x == 0)
++ return;
++
++ code = GET_CODE (x);
++
++ switch (code)
++ {
++ case CONST_INT:
++ case CONST_DOUBLE:
++ case CONST:
++ case SYMBOL_REF:
++ case CODE_LABEL:
++ case PC:
++ case CC0:
++ case ASM_INPUT:
++ case ADDR_VEC:
++ case ADDR_DIFF_VEC:
++ case RETURN:
++ case ADDRESSOF:
++ return;
++
++ case REG:
++ if (x == virtual_incoming_args_rtx
++ || x == virtual_stack_vars_rtx
++ || x == virtual_stack_dynamic_rtx
++ || x == virtual_outgoing_args_rtx
++ || x == virtual_cfa_rtx)
++ has_virtual_reg = TRUE;
++ return;
++
++ case SET:
++ /*
++ skip setjmp setup insn and setjmp restore insn
++ Example:
++ (set (MEM (reg:SI xx)) (virtual_stack_vars_rtx)))
++ (set (virtual_stack_vars_rtx) (REG))
++ */
++ if (GET_CODE (XEXP (x, 0)) == MEM
++ && XEXP (x, 1) == virtual_stack_vars_rtx)
++ return;
++ if (XEXP (x, 0) == virtual_stack_vars_rtx
++ && GET_CODE (XEXP (x, 1)) == REG)
++ return;
++ break;
++
++ case PLUS:
++ /* Handle typical case of frame register plus constant. */
++ if (XEXP (x, 0) == virtual_stack_vars_rtx
++ && GET_CODE (XEXP (x, 1)) == CONST_INT)
++ {
++ if (x->used)
++ goto single_use_of_virtual_reg;
++
++ offset = AUTO_OFFSET(x);
++
++ /* When arguments grow downward, the virtual incoming
++ args pointer points to the top of the argument block,
++ so block is identified by the pointer - 1.
++ The flag is set at the copy_rtx_and_substitute in integrate.c */
++ if (RTX_INTEGRATED_P (x))
++ k = -1;
++
++ /* the operand related to the sweep variable. */
++ if (sweep_offset <= offset + k
++ && offset + k < sweep_offset + sweep_size)
++ {
++ offset += sweep_frame_offset - sweep_size - sweep_offset;
++
++ XEXP (x, 0) = virtual_stack_vars_rtx;
++ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset);
++ x->used = 1;
++ }
++ else if (sweep_offset <= offset + k
++ && offset + k < sweep_frame_offset)
++ {
++ /* the rest of variables under sweep_frame_offset,
++ shift the location. */
++ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset - sweep_size);
++ x->used = 1;
++ }
++
++ single_use_of_virtual_reg:
++ if (has_virtual_reg) {
++ /* excerpt from insn_invalid_p in recog.c */
++ int icode = recog_memoized (insn);
++
++ if (icode < 0 && asm_noperands (PATTERN (insn)) < 0)
++ {
++ rtx temp, seq;
++
++ start_sequence ();
++ temp = force_operand (x, NULL_RTX);
++ seq = get_insns ();
++ end_sequence ();
++
++ emit_insn_before (seq, insn);
++ if (! validate_change (insn, loc, temp, 0)
++ && !validate_replace_rtx (x, temp, insn))
++ fatal_insn ("sweep_string_in_operand", insn);
++ }
++ }
++
++ has_virtual_reg = TRUE;
++ return;
++ }
++
++#ifdef FRAME_GROWS_DOWNWARD
++ /* Alert the case of frame register plus constant given by reg. */
++ else if (XEXP (x, 0) == virtual_stack_vars_rtx
++ && GET_CODE (XEXP (x, 1)) == REG)
++ fatal_insn ("sweep_string_in_operand: unknown addressing", insn);
++#endif
++
++ /*
++ process further subtree:
++ Example: (plus:SI (mem/s:SI (plus:SI (reg:SI 17) (const_int 8)))
++ (const_int 5))
++ */
++ break;
++
++ case CALL_PLACEHOLDER:
++ for (i = 0; i < 3; i++)
++ {
++ rtx seq = XEXP (x, i);
++ if (seq)
++ {
++ push_to_sequence (seq);
++ sweep_string_use_of_insns (XEXP (x, i),
++ sweep_offset, sweep_size);
++ XEXP (x, i) = get_insns ();
++ end_sequence ();
++ }
++ }
++ break;
++
++ default:
++ break;
++ }
++
++ /* Scan all subexpressions. */
++ fmt = GET_RTX_FORMAT (code);
++ for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
++ if (*fmt == 'e')
++ {
++ /*
++ virtual_stack_vars_rtx without offset
++ Example:
++ (set (reg:SI xx) (reg:SI 78))
++ (set (reg:SI xx) (MEM (reg:SI 78)))
++ */
++ if (XEXP (x, i) == virtual_stack_vars_rtx)
++ fatal_insn ("sweep_string_in_operand: unknown fp usage", insn);
++ sweep_string_in_operand (insn, &XEXP (x, i), sweep_offset, sweep_size);
++ }
++ else if (*fmt == 'E')
++ for (j = 0; j < XVECLEN (x, i); j++)
++ sweep_string_in_operand (insn, &XVECEXP (x, i, j), sweep_offset, sweep_size);
++}
++
++
++/* Change the use of an argument to the use of the duplicated variable for
++ every insns, The variable is addressed by new rtx. */
++static void
++change_arg_use_of_insns (rtx insn, rtx orig, rtx *new, HOST_WIDE_INT size)
++{
++ for (; insn; insn = NEXT_INSN (insn))
++ if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
++ || GET_CODE (insn) == CALL_INSN)
++ {
++ rtx seq;
++
++ start_sequence ();
++ change_arg_use_in_operand (insn, PATTERN (insn), orig, new, size);
++
++ seq = get_insns ();
++ end_sequence ();
++ emit_insn_before (seq, insn);
++
++ /* load_multiple insn from virtual_incoming_args_rtx have several
++ load insns. If every insn change the load address of arg
++ to frame region, those insns are moved before the PARALLEL insn
++ and remove the PARALLEL insn. */
++ if (GET_CODE (PATTERN (insn)) == PARALLEL
++ && XVECLEN (PATTERN (insn), 0) == 0)
++ delete_insn (insn);
++ }
++}
++
++
++/* Change the use of an argument to the use of the duplicated variable for
++ every rtx derived from the x. */
++static void
++change_arg_use_in_operand (rtx insn, rtx x, rtx orig, rtx *new, HOST_WIDE_INT size)
++{
++ enum rtx_code code;
++ int i, j;
++ HOST_WIDE_INT offset;
++ const char *fmt;
++
++ if (x == 0)
++ return;
++
++ code = GET_CODE (x);
++
++ switch (code)
++ {
++ case CONST_INT:
++ case CONST_DOUBLE:
++ case CONST:
++ case SYMBOL_REF:
++ case CODE_LABEL:
++ case PC:
++ case CC0:
++ case ASM_INPUT:
++ case ADDR_VEC:
++ case ADDR_DIFF_VEC:
++ case RETURN:
++ case REG:
++ case ADDRESSOF:
++ return;
++
++ case MEM:
++ /* Handle special case of MEM (incoming_args). */
++ if (GET_CODE (orig) == MEM
++ && XEXP (x, 0) == virtual_incoming_args_rtx)
++ {
++ offset = 0;
++
++ /* the operand related to the sweep variable. */
++ if (AUTO_OFFSET(XEXP (orig, 0)) <= offset &&
++ offset < AUTO_OFFSET(XEXP (orig, 0)) + size) {
++
++ offset = AUTO_OFFSET(XEXP (*new, 0))
++ + (offset - AUTO_OFFSET(XEXP (orig, 0)));
++
++ XEXP (x, 0) = plus_constant (virtual_stack_vars_rtx, offset);
++ XEXP (x, 0)->used = 1;
++
++ return;
++ }
++ }
++ break;
++
++ case PLUS:
++ /* Handle special case of frame register plus constant. */
++ if (GET_CODE (orig) == MEM
++ && XEXP (x, 0) == virtual_incoming_args_rtx
++ && GET_CODE (XEXP (x, 1)) == CONST_INT
++ && ! x->used)
++ {
++ offset = AUTO_OFFSET(x);
++
++ /* the operand related to the sweep variable. */
++ if (AUTO_OFFSET(XEXP (orig, 0)) <= offset &&
++ offset < AUTO_OFFSET(XEXP (orig, 0)) + size)
++ {
++
++ offset = (AUTO_OFFSET(XEXP (*new, 0))
++ + (offset - AUTO_OFFSET(XEXP (orig, 0))));
++
++ XEXP (x, 0) = virtual_stack_vars_rtx;
++ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset);
++ x->used = 1;
++
++ return;
++ }
++
++ /*
++ process further subtree:
++ Example: (plus:SI (mem/s:SI (plus:SI (reg:SI 17) (const_int 8)))
++ (const_int 5))
++ */
++ }
++ break;
++
++ case SET:
++ /* Handle special case of "set (REG or MEM) (incoming_args)".
++ It means that the the address of the 1st argument is stored. */
++ if (GET_CODE (orig) == MEM
++ && XEXP (x, 1) == virtual_incoming_args_rtx)
++ {
++ offset = 0;
++
++ /* the operand related to the sweep variable. */
++ if (AUTO_OFFSET(XEXP (orig, 0)) <= offset &&
++ offset < AUTO_OFFSET(XEXP (orig, 0)) + size)
++ {
++ offset = (AUTO_OFFSET(XEXP (*new, 0))
++ + (offset - AUTO_OFFSET(XEXP (orig, 0))));
++
++ XEXP (x, 1) = force_operand (plus_constant (virtual_stack_vars_rtx,
++ offset), NULL_RTX);
++ XEXP (x, 1)->used = 1;
++
++ return;
++ }
++ }
++ break;
++
++ case CALL_PLACEHOLDER:
++ for (i = 0; i < 3; i++)
++ {
++ rtx seq = XEXP (x, i);
++ if (seq)
++ {
++ push_to_sequence (seq);
++ change_arg_use_of_insns (XEXP (x, i), orig, new, size);
++ XEXP (x, i) = get_insns ();
++ end_sequence ();
++ }
++ }
++ break;
++
++ case PARALLEL:
++ for (j = 0; j < XVECLEN (x, 0); j++)
++ {
++ change_arg_use_in_operand (insn, XVECEXP (x, 0, j), orig, new, size);
++ }
++ if (recog_memoized (insn) < 0)
++ {
++ for (i = 0, j = 0; j < XVECLEN (x, 0); j++)
++ {
++ /* if parallel insn has a insn used virtual_incoming_args_rtx,
++ the insn is removed from this PARALLEL insn. */
++ if (check_used_flag (XVECEXP (x, 0, j)))
++ {
++ emit_insn (XVECEXP (x, 0, j));
++ XVECEXP (x, 0, j) = NULL;
++ }
++ else
++ XVECEXP (x, 0, i++) = XVECEXP (x, 0, j);
++ }
++ PUT_NUM_ELEM (XVEC (x, 0), i);
++ }
++ return;
++
++ default:
++ break;
++ }
++
++ /* Scan all subexpressions. */
++ fmt = GET_RTX_FORMAT (code);
++ for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
++ if (*fmt == 'e')
++ {
++ if (XEXP (x, i) == orig)
++ {
++ if (*new == 0)
++ *new = gen_reg_rtx (GET_MODE (orig));
++ XEXP (x, i) = *new;
++ continue;
++ }
++ change_arg_use_in_operand (insn, XEXP (x, i), orig, new, size);
++ }
++ else if (*fmt == 'E')
++ for (j = 0; j < XVECLEN (x, i); j++)
++ {
++ if (XVECEXP (x, i, j) == orig)
++ {
++ if (*new == 0)
++ *new = gen_reg_rtx (GET_MODE (orig));
++ XVECEXP (x, i, j) = *new;
++ continue;
++ }
++ change_arg_use_in_operand (insn, XVECEXP (x, i, j), orig, new, size);
++ }
++}
++
++
++/* Validate every instructions from the specified instruction.
++
++ The stack protector prohibits to generate machine specific frame addressing
++ for the first rtl generation. The prepare_stack_protection must convert
++ machine independent frame addressing to machine specific frame addressing,
++ so instructions for inline functions, which skip the conversion of
++ the stack protection, validate every instructions. */
++static void
++validate_insns_of_varrefs (rtx insn)
++{
++ rtx next;
++
++ /* Initialize recognition, indicating that volatile is OK. */
++ init_recog ();
++
++ for (; insn; insn = next)
++ {
++ next = NEXT_INSN (insn);
++ if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
++ || GET_CODE (insn) == CALL_INSN)
++ {
++ /* excerpt from insn_invalid_p in recog.c */
++ int icode = recog_memoized (insn);
++
++ if (icode < 0 && asm_noperands (PATTERN (insn)) < 0)
++ validate_operand_of_varrefs (insn, &PATTERN (insn));
++ }
++ }
++
++ init_recog_no_volatile ();
++}
++
++
++/* Validate frame addressing of the rtx and covert it to machine specific one. */
++static void
++validate_operand_of_varrefs (rtx insn, rtx *loc)
++{
++ enum rtx_code code;
++ rtx x, temp, seq;
++ int i, j;
++ const char *fmt;
++
++ x = *loc;
++ if (x == 0)
++ return;
++
++ code = GET_CODE (x);
++
++ switch (code)
++ {
++ case USE:
++ case CONST_INT:
++ case CONST_DOUBLE:
++ case CONST:
++ case SYMBOL_REF:
++ case CODE_LABEL:
++ case PC:
++ case CC0:
++ case ASM_INPUT:
++ case ADDR_VEC:
++ case ADDR_DIFF_VEC:
++ case RETURN:
++ case REG:
++ case ADDRESSOF:
++ return;
++
++ case PLUS:
++ /* validate insn of frame register plus constant. */
++ if (GET_CODE (x) == PLUS
++ && XEXP (x, 0) == virtual_stack_vars_rtx
++ && GET_CODE (XEXP (x, 1)) == CONST_INT)
++ {
++ start_sequence ();
++
++ { /* excerpt from expand_binop in optabs.c */
++ optab binoptab = add_optab;
++ enum machine_mode mode = GET_MODE (x);
++ int icode = (int) binoptab->handlers[(int) mode].insn_code;
++ enum machine_mode mode1 = insn_data[icode].operand[2].mode;
++ rtx pat;
++ rtx xop0 = XEXP (x, 0), xop1 = XEXP (x, 1);
++ temp = gen_reg_rtx (mode);
++
++ /* Now, if insn's predicates don't allow offset operands,
++ put them into pseudo regs. */
++
++ if (! (*insn_data[icode].operand[2].predicate) (xop1, mode1)
++ && mode1 != VOIDmode)
++ xop1 = copy_to_mode_reg (mode1, xop1);
++
++ pat = GEN_FCN (icode) (temp, xop0, xop1);
++ if (pat)
++ emit_insn (pat);
++ else
++ abort (); /* there must be add_optab handler. */
++ }
++ seq = get_insns ();
++ end_sequence ();
++
++ emit_insn_before (seq, insn);
++ if (! validate_change (insn, loc, temp, 0))
++ abort ();
++ return;
++ }
++ break;
++
++
++ case CALL_PLACEHOLDER:
++ for (i = 0; i < 3; i++)
++ {
++ rtx seq = XEXP (x, i);
++ if (seq)
++ {
++ push_to_sequence (seq);
++ validate_insns_of_varrefs (XEXP (x, i));
++ XEXP (x, i) = get_insns ();
++ end_sequence ();
++ }
++ }
++ break;
++
++ default:
++ break;
++ }
++
++ /* Scan all subexpressions. */
++ fmt = GET_RTX_FORMAT (code);
++ for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
++ if (*fmt == 'e')
++ validate_operand_of_varrefs (insn, &XEXP (x, i));
++ else if (*fmt == 'E')
++ for (j = 0; j < XVECLEN (x, i); j++)
++ validate_operand_of_varrefs (insn, &XVECEXP (x, i, j));
++}
++
++
++
++/* Return size that is not allocated for stack frame. It will be allocated
++ to modify the home of pseudo registers called from global_alloc. */
++HOST_WIDE_INT
++get_frame_free_size (void)
++{
++ if (! flag_propolice_protection)
++ return 0;
++
++ return push_allocated_offset - push_frame_offset;
++}
++
++
++/* The following codes are invoked after the instantiation of pseudo registers.
++
++ Reorder local variables to place a peudo register after buffers to avoid
++ the corruption of local variables that could be used to further corrupt
++ arbitrary memory locations. */
++#if !defined(FRAME_GROWS_DOWNWARD) && defined(STACK_GROWS_DOWNWARD)
++static void push_frame (HOST_WIDE_INT, HOST_WIDE_INT);
++static void push_frame_in_decls (tree, HOST_WIDE_INT, HOST_WIDE_INT);
++static void push_frame_in_args (tree, HOST_WIDE_INT, HOST_WIDE_INT);
++static void push_frame_of_insns (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
++static void push_frame_in_operand (rtx, rtx, HOST_WIDE_INT, HOST_WIDE_INT);
++static void push_frame_of_reg_equiv_memory_loc (HOST_WIDE_INT, HOST_WIDE_INT);
++static void push_frame_of_reg_equiv_constant (HOST_WIDE_INT, HOST_WIDE_INT);
++static void reset_used_flags_for_push_frame (void);
++static int check_out_of_frame_access (rtx, HOST_WIDE_INT);
++static int check_out_of_frame_access_in_operand (rtx, HOST_WIDE_INT);
++#endif
++
++
++/* Assign stack local at the stage of register allocater. if a pseudo reg is
++ spilled out from such an allocation, it is allocated on the stack.
++ The protector keep the location be lower stack region than the location of
++ sweeped arrays. */
++rtx
++assign_stack_local_for_pseudo_reg (enum machine_mode mode,
++ HOST_WIDE_INT size, int align)
++{
++#if defined(FRAME_GROWS_DOWNWARD) || !defined(STACK_GROWS_DOWNWARD)
++ return assign_stack_local (mode, size, align);
++#else
++ tree blocks = DECL_INITIAL (current_function_decl);
++ rtx new;
++ HOST_WIDE_INT saved_frame_offset, units_per_push, starting_frame;
++ int first_call_from_purge_addressof, first_call_from_global_alloc;
++
++ if (! flag_propolice_protection
++ || size == 0
++ || ! blocks
++ || current_function_is_inlinable
++ || ! search_string_from_argsandvars (CALL_FROM_PUSH_FRAME)
++ || current_function_contains_functions)
++ return assign_stack_local (mode, size, align);
++
++ first_call_from_purge_addressof = !push_frame_offset && !cse_not_expected;
++ first_call_from_global_alloc = !saved_cse_not_expected && cse_not_expected;
++ saved_cse_not_expected = cse_not_expected;
++
++ starting_frame = ((STARTING_FRAME_OFFSET)
++ ? STARTING_FRAME_OFFSET : BIGGEST_ALIGNMENT / BITS_PER_UNIT);
++ units_per_push = MAX (BIGGEST_ALIGNMENT / BITS_PER_UNIT,
++ GET_MODE_SIZE (mode));
++
++ if (first_call_from_purge_addressof)
++ {
++ push_frame_offset = push_allocated_offset;
++ if (check_out_of_frame_access (get_insns (), starting_frame))
++ {
++ /* After the purge_addressof stage, there may be an instruction which
++ have the pointer less than the starting_frame.
++ if there is an access below frame, push dummy region to seperate
++ the address of instantiated variables. */
++ push_frame (GET_MODE_SIZE (DImode), 0);
++ assign_stack_local (BLKmode, GET_MODE_SIZE (DImode), -1);
++ }
++ }
++
++ if (first_call_from_global_alloc)
++ {
++ push_frame_offset = push_allocated_offset = 0;
++ if (check_out_of_frame_access (get_insns (), starting_frame))
++ {
++ if (STARTING_FRAME_OFFSET)
++ {
++ /* if there is an access below frame, push dummy region
++ to seperate the address of instantiated variables. */
++ push_frame (GET_MODE_SIZE (DImode), 0);
++ assign_stack_local (BLKmode, GET_MODE_SIZE (DImode), -1);
++ }
++ else
++ push_allocated_offset = starting_frame;
++ }
++ }
++
++ saved_frame_offset = frame_offset;
++ frame_offset = push_frame_offset;
++
++ new = assign_stack_local (mode, size, align);
++
++ push_frame_offset = frame_offset;
++ frame_offset = saved_frame_offset;
++
++ if (push_frame_offset > push_allocated_offset)
++ {
++ push_frame (units_per_push,
++ push_allocated_offset + STARTING_FRAME_OFFSET);
++
++ assign_stack_local (BLKmode, units_per_push, -1);
++ push_allocated_offset += units_per_push;
++ }
++
++ /* At the second call from global alloc, alpha push frame and assign
++ a local variable to the top of the stack. */
++ if (first_call_from_global_alloc && STARTING_FRAME_OFFSET == 0)
++ push_frame_offset = push_allocated_offset = 0;
++
++ return new;
++#endif
++}
++
++
++#if !defined(FRAME_GROWS_DOWNWARD) && defined(STACK_GROWS_DOWNWARD)
++
++/* push frame infomation for instantiating pseudo register at the top of stack.
++ This is only for the "frame grows upward", it means FRAME_GROWS_DOWNWARD is
++ not defined.
++
++ It is called by purge_addressof function and global_alloc (or reload)
++ function. */
++static void
++push_frame (HOST_WIDE_INT var_size, HOST_WIDE_INT boundary)
++{
++ reset_used_flags_for_push_frame();
++
++ /* Scan all declarations of variables and fix the offset address of
++ the variable based on the frame pointer. */
++ push_frame_in_decls (DECL_INITIAL (current_function_decl),
++ var_size, boundary);
++
++ /* Scan all argument variable and fix the offset address based on
++ the frame pointer. */
++ push_frame_in_args (DECL_ARGUMENTS (current_function_decl),
++ var_size, boundary);
++
++ /* Scan all operands of all insns and fix the offset address
++ based on the frame pointer. */
++ push_frame_of_insns (get_insns (), var_size, boundary);
++
++ /* Scan all reg_equiv_memory_loc and reg_equiv_constant. */
++ push_frame_of_reg_equiv_memory_loc (var_size, boundary);
++ push_frame_of_reg_equiv_constant (var_size, boundary);
++
++ reset_used_flags_for_push_frame();
++}
++
++
++/* Reset used flag of every insns, reg_equiv_memory_loc,
++ and reg_equiv_constant. */
++static void
++reset_used_flags_for_push_frame(void)
++{
++ int i;
++ extern rtx *reg_equiv_memory_loc;
++ extern rtx *reg_equiv_constant;
++
++ /* Clear all the USED bits in operands of all insns and declarations of
++ local vars. */
++ reset_used_flags_for_decls (DECL_INITIAL (current_function_decl));
++ reset_used_flags_for_insns (get_insns ());
++
++
++ /* The following codes are processed if the push_frame is called from
++ global_alloc (or reload) function. */
++ if (reg_equiv_memory_loc == 0)
++ return;
++
++ for (i=LAST_VIRTUAL_REGISTER+1; i < max_regno; i++)
++ if (reg_equiv_memory_loc[i])
++ {
++ rtx x = reg_equiv_memory_loc[i];
++
++ if (GET_CODE (x) == MEM
++ && GET_CODE (XEXP (x, 0)) == PLUS
++ && AUTO_BASEPTR (XEXP (x, 0)) == frame_pointer_rtx)
++ {
++ /* reset */
++ XEXP (x, 0)->used = 0;
++ }
++ }
++
++
++ if (reg_equiv_constant == 0)
++ return;
++
++ for (i=LAST_VIRTUAL_REGISTER+1; i < max_regno; i++)
++ if (reg_equiv_constant[i])
++ {
++ rtx x = reg_equiv_constant[i];
++
++ if (GET_CODE (x) == PLUS
++ && AUTO_BASEPTR (x) == frame_pointer_rtx)
++ {
++ /* reset */
++ x->used = 0;
++ }
++ }
++}
++
++
++/* Push every variables declared as a local variable and make a room for
++ instantiated register. */
++static void
++push_frame_in_decls (tree block, HOST_WIDE_INT push_size,
++ HOST_WIDE_INT boundary)
++{
++ tree types;
++ HOST_WIDE_INT offset;
++ rtx home;
++
++ while (block && TREE_CODE(block)==BLOCK)
++ {
++ for (types = BLOCK_VARS(block); types; types = TREE_CHAIN(types))
++ {
++ /* Skip the declaration that refers an external variable and
++ also skip an global variable. */
++ if (! DECL_EXTERNAL (types) && ! TREE_STATIC (types))
++ {
++ if (! DECL_RTL_SET_P (types))
++ continue;
++
++ home = DECL_RTL (types);
++
++ /* Process for static local variable. */
++ if (GET_CODE (home) == MEM
++ && GET_CODE (XEXP (home, 0)) == SYMBOL_REF)
++ continue;
++
++ if (GET_CODE (home) == MEM
++ && GET_CODE (XEXP (home, 0)) == REG)
++ {
++ if (XEXP (home, 0) != frame_pointer_rtx
++ || boundary != 0)
++ continue;
++
++ XEXP (home, 0) = plus_constant (frame_pointer_rtx,
++ push_size);
++
++ /* mark */
++ XEXP (home, 0)->used = 1;
++ }
++
++ if (GET_CODE (home) == MEM
++ && GET_CODE (XEXP (home, 0)) == MEM)
++ {
++ /* Process for dynamically allocated array. */
++ home = XEXP (home, 0);
++ }
++
++ if (GET_CODE (home) == MEM
++ && GET_CODE (XEXP (home, 0)) == PLUS
++ && GET_CODE (XEXP (XEXP (home, 0), 1)) == CONST_INT)
++ {
++ offset = AUTO_OFFSET(XEXP (home, 0));
++
++ if (! XEXP (home, 0)->used
++ && offset >= boundary)
++ {
++ offset += push_size;
++ XEXP (XEXP (home, 0), 1)
++ = gen_rtx_CONST_INT (VOIDmode, offset);
++
++ /* mark */
++ XEXP (home, 0)->used = 1;
++ }
++ }
++ }
++ }
++
++ push_frame_in_decls (BLOCK_SUBBLOCKS (block), push_size, boundary);
++ block = BLOCK_CHAIN (block);
++ }
++}
++
++
++/* Push every variables declared as an argument and make a room for
++ instantiated register. */
++static void
++push_frame_in_args (tree parms, HOST_WIDE_INT push_size,
++ HOST_WIDE_INT boundary)
++{
++ rtx home;
++ HOST_WIDE_INT offset;
++
++ for (; parms; parms = TREE_CHAIN (parms))
++ if (DECL_NAME (parms) && TREE_TYPE (parms) != error_mark_node)
++ {
++ if (PARM_PASSED_IN_MEMORY (parms))
++ {
++ home = DECL_INCOMING_RTL (parms);
++ offset = AUTO_OFFSET(XEXP (home, 0));
++
++ if (XEXP (home, 0)->used || offset < boundary)
++ continue;
++
++ /* the operand related to the sweep variable. */
++ if (AUTO_BASEPTR (XEXP (home, 0)) == frame_pointer_rtx)
++ {
++ if (XEXP (home, 0) == frame_pointer_rtx)
++ XEXP (home, 0) = plus_constant (frame_pointer_rtx,
++ push_size);
++ else {
++ offset += push_size;
++ XEXP (XEXP (home, 0), 1) = gen_rtx_CONST_INT (VOIDmode,
++ offset);
++ }
++
++ /* mark */
++ XEXP (home, 0)->used = 1;
++ }
++ }
++ }
++}
++
++
++/* Set to 1 when the instruction has the reference to be pushed. */
++static int insn_pushed;
++
++/* Tables of equivalent registers with frame pointer. */
++static int *fp_equiv = 0;
++
++
++/* Push the frame region to make a room for allocated local variable. */
++static void
++push_frame_of_insns (rtx insn, HOST_WIDE_INT push_size, HOST_WIDE_INT boundary)
++{
++ /* init fp_equiv */
++ fp_equiv = (int *) xcalloc (max_reg_num (), sizeof (int));
++
++ for (; insn; insn = NEXT_INSN (insn))
++ if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
++ || GET_CODE (insn) == CALL_INSN)
++ {
++ rtx last;
++
++ insn_pushed = FALSE;
++
++ /* Push frame in INSN operation. */
++ push_frame_in_operand (insn, PATTERN (insn), push_size, boundary);
++
++ /* Push frame in NOTE. */
++ push_frame_in_operand (insn, REG_NOTES (insn), push_size, boundary);
++
++ /* Push frame in CALL EXPR_LIST. */
++ if (GET_CODE (insn) == CALL_INSN)
++ push_frame_in_operand (insn, CALL_INSN_FUNCTION_USAGE (insn),
++ push_size, boundary);
++
++ /* Pushed frame addressing style may not be machine specific one.
++ so the instruction should be converted to use the machine specific
++ frame addressing. */
++ if (insn_pushed
++ && (last = try_split (PATTERN (insn), insn, 1)) != insn)
++ {
++ rtx first = NEXT_INSN (insn);
++ rtx trial = NEXT_INSN (first);
++ rtx pattern = PATTERN (trial);
++ rtx set;
++
++ /* Update REG_EQUIV info to the first splitted insn. */
++ if ((set = single_set (insn))
++ && find_reg_note (insn, REG_EQUIV, SET_SRC (set))
++ && GET_CODE (PATTERN (first)) == SET)
++ {
++ REG_NOTES (first)
++ = gen_rtx_EXPR_LIST (REG_EQUIV,
++ SET_SRC (PATTERN (first)),
++ REG_NOTES (first));
++ }
++
++ /* copy the first insn of splitted insns to the original insn and
++ delete the first insn,
++ because the original insn is pointed from records:
++ insn_chain, reg_equiv_init, used for global_alloc. */
++ if (cse_not_expected)
++ {
++ add_insn_before (insn, first);
++
++ /* Copy the various flags, and other information. */
++ memcpy (insn, first, sizeof (struct rtx_def) - sizeof (rtunion));
++ PATTERN (insn) = PATTERN (first);
++ INSN_CODE (insn) = INSN_CODE (first);
++ LOG_LINKS (insn) = LOG_LINKS (first);
++ REG_NOTES (insn) = REG_NOTES (first);
++
++ /* then remove the first insn of splitted insns. */
++ remove_insn (first);
++ INSN_DELETED_P (first) = 1;
++ }
++
++ if (GET_CODE (pattern) == SET
++ && GET_CODE (XEXP (pattern, 0)) == REG
++ && GET_CODE (XEXP (pattern, 1)) == PLUS
++ && XEXP (pattern, 0) == XEXP (XEXP (pattern, 1), 0)
++ && GET_CODE (XEXP (XEXP (pattern, 1), 1)) == CONST_INT)
++ {
++ rtx offset = XEXP (XEXP (pattern, 1), 1);
++ fp_equiv[REGNO (XEXP (pattern, 0))] = INTVAL (offset);
++
++ delete_insn (trial);
++ }
++
++ insn = last;
++ }
++ }
++
++ /* Clean up. */
++ free (fp_equiv);
++}
++
++
++/* Push the frame region by changing the operand that points the frame. */
++static void
++push_frame_in_operand (rtx insn, rtx orig,
++ HOST_WIDE_INT push_size, HOST_WIDE_INT boundary)
++{
++ rtx x = orig;
++ enum rtx_code code;
++ int i, j;
++ HOST_WIDE_INT offset;
++ const char *fmt;
++
++ if (x == 0)
++ return;
++
++ code = GET_CODE (x);
++
++ switch (code)
++ {
++ case CONST_INT:
++ case CONST_DOUBLE:
++ case CONST:
++ case SYMBOL_REF:
++ case CODE_LABEL:
++ case PC:
++ case CC0:
++ case ASM_INPUT:
++ case ADDR_VEC:
++ case ADDR_DIFF_VEC:
++ case RETURN:
++ case REG:
++ case ADDRESSOF:
++ case USE:
++ return;
++
++ case SET:
++ /*
++ Skip setjmp setup insn and setjmp restore insn
++ alpha case:
++ (set (MEM (reg:SI xx)) (frame_pointer_rtx)))
++ (set (frame_pointer_rtx) (REG))
++ */
++ if (GET_CODE (XEXP (x, 0)) == MEM
++ && XEXP (x, 1) == frame_pointer_rtx)
++ return;
++ if (XEXP (x, 0) == frame_pointer_rtx
++ && GET_CODE (XEXP (x, 1)) == REG)
++ return;
++
++ /*
++ powerpc case: restores setjmp address
++ (set (frame_pointer_rtx) (plus frame_pointer_rtx const_int -n))
++ or
++ (set (reg) (plus frame_pointer_rtx const_int -n))
++ (set (frame_pointer_rtx) (reg))
++ */
++ if (GET_CODE (XEXP (x, 0)) == REG
++ && GET_CODE (XEXP (x, 1)) == PLUS
++ && XEXP (XEXP (x, 1), 0) == frame_pointer_rtx
++ && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT
++ && INTVAL (XEXP (XEXP (x, 1), 1)) < 0)
++ {
++ x = XEXP (x, 1);
++ offset = AUTO_OFFSET(x);
++ if (x->used || -offset < boundary)
++ return;
++
++ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset - push_size);
++ x->used = 1; insn_pushed = TRUE;
++ return;
++ }
++
++ /* Reset fp_equiv register. */
++ else if (GET_CODE (XEXP (x, 0)) == REG
++ && fp_equiv[REGNO (XEXP (x, 0))])
++ fp_equiv[REGNO (XEXP (x, 0))] = 0;
++
++ /* Propagete fp_equiv register. */
++ else if (GET_CODE (XEXP (x, 0)) == REG
++ && GET_CODE (XEXP (x, 1)) == REG
++ && fp_equiv[REGNO (XEXP (x, 1))])
++ if (REGNO (XEXP (x, 0)) <= LAST_VIRTUAL_REGISTER
++ || reg_renumber[REGNO (XEXP (x, 0))] > 0)
++ fp_equiv[REGNO (XEXP (x, 0))] = fp_equiv[REGNO (XEXP (x, 1))];
++ break;
++
++ case MEM:
++ if (XEXP (x, 0) == frame_pointer_rtx
++ && boundary == 0)
++ {
++ XEXP (x, 0) = plus_constant (frame_pointer_rtx, push_size);
++ XEXP (x, 0)->used = 1; insn_pushed = TRUE;
++ return;
++ }
++ break;
++
++ case PLUS:
++ /* Handle special case of frame register plus constant. */
++ if (GET_CODE (XEXP (x, 1)) == CONST_INT
++ && XEXP (x, 0) == frame_pointer_rtx)
++ {
++ offset = AUTO_OFFSET(x);
++
++ if (x->used || offset < boundary)
++ return;
++
++ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset + push_size);
++ x->used = 1; insn_pushed = TRUE;
++
++ return;
++ }
++ /*
++ Handle alpha case:
++ (plus:SI (subreg:SI (reg:DI 63 FP) 0) (const_int 64 [0x40]))
++ */
++ if (GET_CODE (XEXP (x, 1)) == CONST_INT
++ && GET_CODE (XEXP (x, 0)) == SUBREG
++ && SUBREG_REG (XEXP (x, 0)) == frame_pointer_rtx)
++ {
++ offset = AUTO_OFFSET(x);
++
++ if (x->used || offset < boundary)
++ return;
++
++ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset + push_size);
++ x->used = 1; insn_pushed = TRUE;
++
++ return;
++ }
++ /*
++ Handle powerpc case:
++ (set (reg x) (plus fp const))
++ (set (.....) (... (plus (reg x) (const B))))
++ */
++ else if (GET_CODE (XEXP (x, 1)) == CONST_INT
++ && GET_CODE (XEXP (x, 0)) == REG
++ && fp_equiv[REGNO (XEXP (x, 0))])
++ {
++ offset = AUTO_OFFSET(x);
++
++ if (x->used)
++ return;
++
++ offset += fp_equiv[REGNO (XEXP (x, 0))];
++
++ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset);
++ x->used = 1; insn_pushed = TRUE;
++
++ return;
++ }
++ /*
++ Handle special case of frame register plus reg (constant).
++ (set (reg x) (const B))
++ (set (....) (...(plus fp (reg x))))
++ */
++ else if (XEXP (x, 0) == frame_pointer_rtx
++ && GET_CODE (XEXP (x, 1)) == REG
++ && PREV_INSN (insn)
++ && PATTERN (PREV_INSN (insn))
++ && SET_DEST (PATTERN (PREV_INSN (insn))) == XEXP (x, 1)
++ && GET_CODE (SET_SRC (PATTERN (PREV_INSN (insn)))) == CONST_INT)
++ {
++ offset = INTVAL (SET_SRC (PATTERN (PREV_INSN (insn))));
++
++ if (x->used || offset < boundary)
++ return;
++
++ SET_SRC (PATTERN (PREV_INSN (insn)))
++ = gen_rtx_CONST_INT (VOIDmode, offset + push_size);
++ x->used = 1;
++ XEXP (x, 1)->used = 1;
++
++ return;
++ }
++ /*
++ Handle special case of frame register plus reg (used).
++ The register already have a pushed offset, just mark this frame
++ addressing.
++ */
++ else if (XEXP (x, 0) == frame_pointer_rtx
++ && XEXP (x, 1)->used)
++ {
++ x->used = 1;
++ return;
++ }
++ /*
++ Process further subtree:
++ Example: (plus:SI (mem/s:SI (plus:SI (FP) (const_int 8)))
++ (const_int 5))
++ */
++ break;
++
++ case CALL_PLACEHOLDER:
++ push_frame_of_insns (XEXP (x, 0), push_size, boundary);
++ push_frame_of_insns (XEXP (x, 1), push_size, boundary);
++ push_frame_of_insns (XEXP (x, 2), push_size, boundary);
++ break;
++
++ default:
++ break;
++ }
++
++ /* Scan all subexpressions. */
++ fmt = GET_RTX_FORMAT (code);
++ for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
++ if (*fmt == 'e')
++ {
++ if (XEXP (x, i) == frame_pointer_rtx && boundary == 0)
++ fatal_insn ("push_frame_in_operand", insn);
++ push_frame_in_operand (insn, XEXP (x, i), push_size, boundary);
++ }
++ else if (*fmt == 'E')
++ for (j = 0; j < XVECLEN (x, i); j++)
++ push_frame_in_operand (insn, XVECEXP (x, i, j), push_size, boundary);
++}
++
++
++/* Change the location pointed in reg_equiv_memory_loc. */
++static void
++push_frame_of_reg_equiv_memory_loc (HOST_WIDE_INT push_size,
++ HOST_WIDE_INT boundary)
++{
++ int i;
++ extern rtx *reg_equiv_memory_loc;
++
++ /* This function is processed if the push_frame is called from
++ global_alloc (or reload) function. */
++ if (reg_equiv_memory_loc == 0)
++ return;
++
++ for (i=LAST_VIRTUAL_REGISTER+1; i < max_regno; i++)
++ if (reg_equiv_memory_loc[i])
++ {
++ rtx x = reg_equiv_memory_loc[i];
++ int offset;
++
++ if (GET_CODE (x) == MEM
++ && GET_CODE (XEXP (x, 0)) == PLUS
++ && XEXP (XEXP (x, 0), 0) == frame_pointer_rtx)
++ {
++ offset = AUTO_OFFSET(XEXP (x, 0));
++
++ if (! XEXP (x, 0)->used
++ && offset >= boundary)
++ {
++ offset += push_size;
++ XEXP (XEXP (x, 0), 1) = gen_rtx_CONST_INT (VOIDmode, offset);
++
++ /* mark */
++ XEXP (x, 0)->used = 1;
++ }
++ }
++ else if (GET_CODE (x) == MEM
++ && XEXP (x, 0) == frame_pointer_rtx
++ && boundary == 0)
++ {
++ XEXP (x, 0) = plus_constant (frame_pointer_rtx, push_size);
++ XEXP (x, 0)->used = 1; insn_pushed = TRUE;
++ }
++ }
++}
++
++
++/* Change the location pointed in reg_equiv_constant. */
++static void
++push_frame_of_reg_equiv_constant (HOST_WIDE_INT push_size,
++ HOST_WIDE_INT boundary)
++{
++ int i;
++ extern rtx *reg_equiv_constant;
++
++ /* This function is processed if the push_frame is called from
++ global_alloc (or reload) function. */
++ if (reg_equiv_constant == 0)
++ return;
++
++ for (i = LAST_VIRTUAL_REGISTER + 1; i < max_regno; i++)
++ if (reg_equiv_constant[i])
++ {
++ rtx x = reg_equiv_constant[i];
++ int offset;
++
++ if (GET_CODE (x) == PLUS
++ && XEXP (x, 0) == frame_pointer_rtx)
++ {
++ offset = AUTO_OFFSET(x);
++
++ if (! x->used
++ && offset >= boundary)
++ {
++ offset += push_size;
++ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset);
++
++ /* mark */
++ x->used = 1;
++ }
++ }
++ else if (x == frame_pointer_rtx
++ && boundary == 0)
++ {
++ reg_equiv_constant[i]
++ = plus_constant (frame_pointer_rtx, push_size);
++ reg_equiv_constant[i]->used = 1; insn_pushed = TRUE;
++ }
++ }
++}
++
++
++/* Check every instructions if insn's memory reference is out of frame. */
++static int
++check_out_of_frame_access (rtx insn, HOST_WIDE_INT boundary)
++{
++ for (; insn; insn = NEXT_INSN (insn))
++ if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
++ || GET_CODE (insn) == CALL_INSN)
++ {
++ if (check_out_of_frame_access_in_operand (PATTERN (insn), boundary))
++ return TRUE;
++ }
++ return FALSE;
++}
++
++
++/* Check every operands if the reference is out of frame. */
++static int
++check_out_of_frame_access_in_operand (rtx orig, HOST_WIDE_INT boundary)
++{
++ rtx x = orig;
++ enum rtx_code code;
++ int i, j;
++ const char *fmt;
++
++ if (x == 0)
++ return FALSE;
++
++ code = GET_CODE (x);
++
++ switch (code)
++ {
++ case CONST_INT:
++ case CONST_DOUBLE:
++ case CONST:
++ case SYMBOL_REF:
++ case CODE_LABEL:
++ case PC:
++ case CC0:
++ case ASM_INPUT:
++ case ADDR_VEC:
++ case ADDR_DIFF_VEC:
++ case RETURN:
++ case REG:
++ case ADDRESSOF:
++ return FALSE;
++
++ case MEM:
++ if (XEXP (x, 0) == frame_pointer_rtx)
++ if (0 < boundary)
++ return TRUE;
++ break;
++
++ case PLUS:
++ /* Handle special case of frame register plus constant. */
++ if (GET_CODE (XEXP (x, 1)) == CONST_INT
++ && XEXP (x, 0) == frame_pointer_rtx)
++ {
++ if (0 <= AUTO_OFFSET(x)
++ && AUTO_OFFSET(x) < boundary)
++ return TRUE;
++ return FALSE;
++ }
++ /*
++ Process further subtree:
++ Example: (plus:SI (mem/s:SI (plus:SI (reg:SI 17) (const_int 8)))
++ (const_int 5))
++ */
++ break;
++
++ case CALL_PLACEHOLDER:
++ if (check_out_of_frame_access (XEXP (x, 0), boundary))
++ return TRUE;
++ if (check_out_of_frame_access (XEXP (x, 1), boundary))
++ return TRUE;
++ if (check_out_of_frame_access (XEXP (x, 2), boundary))
++ return TRUE;
++ break;
++
++ default:
++ break;
++ }
++
++ /* Scan all subexpressions. */
++ fmt = GET_RTX_FORMAT (code);
++ for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
++ if (*fmt == 'e')
++ {
++ if (check_out_of_frame_access_in_operand (XEXP (x, i), boundary))
++ return TRUE;
++ }
++ else if (*fmt == 'E')
++ for (j = 0; j < XVECLEN (x, i); j++)
++ if (check_out_of_frame_access_in_operand (XVECEXP (x, i, j), boundary))
++ return TRUE;
++
++ return FALSE;
++}
++#endif
+diff -uNr gcc-3.4.3.orig/gcc/protector.h gcc-3.4.3/gcc/protector.h
+--- gcc-3.4.3.orig/gcc/protector.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.3/gcc/protector.h 2004-01-20 03:01:39.000000000 +0100
+@@ -0,0 +1,55 @@
++/* RTL buffer overflow protection function for GNU C compiler
++ Copyright (C) 2003 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 2, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING. If not, write to the Free
++Software Foundation, 59 Temple Place - Suite 330, Boston, MA
++02111-1307, USA. */
++
++
++/* Declare GUARD variable. */
++#define GUARD_m Pmode
++#define UNITS_PER_GUARD \
++ MAX(BIGGEST_ALIGNMENT / BITS_PER_UNIT, GET_MODE_SIZE (GUARD_m))
++
++#ifndef L_stack_smash_handler
++
++/* Insert a guard variable before a character buffer and change the order
++ of pointer variables, character buffers and pointer arguments. */
++
++extern void prepare_stack_protection (int);
++
++#ifdef TREE_CODE
++/* Search a character array from the specified type tree. */
++
++extern int search_string_def (tree);
++#endif
++
++/* Examine whether the input contains frame pointer addressing. */
++
++extern int contains_fp (rtx);
++
++/* Return size that is not allocated for stack frame. It will be allocated
++ to modify the home of pseudo registers called from global_alloc. */
++
++extern HOST_WIDE_INT get_frame_free_size (void);
++
++/* Allocate a local variable in the stack area before character buffers
++ to avoid the corruption of it. */
++
++extern rtx assign_stack_local_for_pseudo_reg (enum machine_mode,
++ HOST_WIDE_INT, int);
++
++#endif
+diff -uNr gcc-3.4.3.orig/gcc/reload1.c gcc-3.4.3/gcc/reload1.c
+--- gcc-3.4.3.orig/gcc/reload1.c 2004-05-02 14:37:17.000000000 +0200
++++ gcc-3.4.3/gcc/reload1.c 2004-11-24 18:35:31.812641048 +0100
+@@ -43,6 +43,7 @@
+ #include "toplev.h"
+ #include "except.h"
+ #include "tree.h"
++#include "protector.h"
+
+ /* This file contains the reload pass of the compiler, which is
+ run after register allocation has been done. It checks that
+@@ -891,7 +892,7 @@
+ if (cfun->stack_alignment_needed)
+ assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed);
+
+- starting_frame_size = get_frame_size ();
++ starting_frame_size = get_frame_size () - get_frame_free_size ();
+
+ set_initial_elim_offsets ();
+ set_initial_label_offsets ();
+@@ -955,7 +956,7 @@
+ setup_save_areas ();
+
+ /* If we allocated another stack slot, redo elimination bookkeeping. */
+- if (starting_frame_size != get_frame_size ())
++ if (starting_frame_size != get_frame_size () - get_frame_free_size ())
+ continue;
+
+ if (caller_save_needed)
+@@ -974,7 +975,7 @@
+
+ /* If we allocated any new memory locations, make another pass
+ since it might have changed elimination offsets. */
+- if (starting_frame_size != get_frame_size ())
++ if (starting_frame_size != get_frame_size () - get_frame_free_size ())
+ something_changed = 1;
+
+ {
+@@ -1066,11 +1067,11 @@
+ if (insns_need_reload != 0 || something_needs_elimination
+ || something_needs_operands_changed)
+ {
+- HOST_WIDE_INT old_frame_size = get_frame_size ();
++ HOST_WIDE_INT old_frame_size = get_frame_size () - get_frame_free_size ();
+
+ reload_as_needed (global);
+
+- if (old_frame_size != get_frame_size ())
++ if (old_frame_size != get_frame_size () - get_frame_free_size ())
+ abort ();
+
+ if (num_eliminable)
+@@ -1957,8 +1958,10 @@
+ inherent space, and no less total space, then the previous slot. */
+ if (from_reg == -1)
+ {
+- /* No known place to spill from => no slot to reuse. */
+- x = assign_stack_local (GET_MODE (regno_reg_rtx[i]), total_size,
++ /* No known place to spill from => no slot to reuse.
++ For the stack protection, an allocated slot should be placed in
++ the safe region from the stack smaching attack. */
++ x = assign_stack_local_for_pseudo_reg (GET_MODE (regno_reg_rtx[i]), total_size,
+ inherent_size == total_size ? 0 : -1);
+ if (BYTES_BIG_ENDIAN)
+ /* Cancel the big-endian correction done in assign_stack_local.
+diff -uNr gcc-3.4.3.orig/gcc/rtl.h gcc-3.4.3/gcc/rtl.h
+--- gcc-3.4.3.orig/gcc/rtl.h 2004-10-13 01:35:32.000000000 +0200
++++ gcc-3.4.3/gcc/rtl.h 2004-11-24 18:35:31.830638312 +0100
+@@ -473,6 +473,18 @@
+ __FUNCTION__); \
+ _rtx; })
+
++#define RTL_FLAG_CHECK9(NAME, RTX, C1, C2, C3, C4, C5, C6, C7, C8, C9) \
++ __extension__ \
++({ rtx const _rtx = (RTX); \
++ if (GET_CODE(_rtx) != C1 && GET_CODE(_rtx) != C2 \
++ && GET_CODE(_rtx) != C3 && GET_CODE(_rtx) != C4 \
++ && GET_CODE(_rtx) != C5 && GET_CODE(_rtx) != C6 \
++ && GET_CODE(_rtx) != C7 && GET_CODE(_rtx) != C8 \
++ && GET_CODE(_rtx) != C9) \
++ rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
++ __FUNCTION__); \
++ _rtx; })
++
+ extern void rtl_check_failed_flag (const char *, rtx, const char *,
+ int, const char *)
+ ATTRIBUTE_NORETURN
+@@ -488,6 +500,7 @@
+ #define RTL_FLAG_CHECK6(NAME, RTX, C1, C2, C3, C4, C5, C6) (RTX)
+ #define RTL_FLAG_CHECK7(NAME, RTX, C1, C2, C3, C4, C5, C6, C7) (RTX)
+ #define RTL_FLAG_CHECK8(NAME, RTX, C1, C2, C3, C4, C5, C6, C7, C8) (RTX)
++#define RTL_FLAG_CHECK9(NAME, RTX, C1, C2, C3, C4, C5, C6, C7, C8, C9) (RTX)
+ #endif
+
+ #define CLEAR_RTX_FLAGS(RTX) \
+@@ -583,9 +596,9 @@
+ #define LOG_LINKS(INSN) XEXP(INSN, 7)
+
+ #define RTX_INTEGRATED_P(RTX) \
+- (RTL_FLAG_CHECK8("RTX_INTEGRATED_P", (RTX), INSN, CALL_INSN, \
++ (RTL_FLAG_CHECK9("RTX_INTEGRATED_P", (RTX), INSN, CALL_INSN, \
+ JUMP_INSN, INSN_LIST, BARRIER, CODE_LABEL, CONST, \
+- NOTE)->integrated)
++ PLUS, NOTE)->integrated)
+ #define RTX_UNCHANGING_P(RTX) \
+ (RTL_FLAG_CHECK3("RTX_UNCHANGING_P", (RTX), REG, MEM, CONCAT)->unchanging)
+ #define RTX_FRAME_RELATED_P(RTX) \
+@@ -1125,6 +1138,10 @@
+ (RTL_FLAG_CHECK3("MEM_VOLATILE_P", (RTX), MEM, ASM_OPERANDS, \
+ ASM_INPUT)->volatil)
+
++/* 1 if RTX is an SET rtx that is not eliminated for the stack protection. */
++#define SET_VOLATILE_P(RTX) \
++ (RTL_FLAG_CHECK1("SET_VOLATILE_P", (RTX), SET)->volatil)
++
+ /* 1 if RTX is a mem that refers to an aggregate, either to the
+ aggregate itself of to a field of the aggregate. If zero, RTX may
+ or may not be such a reference. */
+diff -uNr gcc-3.4.3.orig/gcc/simplify-rtx.c gcc-3.4.3/gcc/simplify-rtx.c
+--- gcc-3.4.3.orig/gcc/simplify-rtx.c 2004-10-10 23:53:35.000000000 +0200
++++ gcc-3.4.3/gcc/simplify-rtx.c 2004-11-24 18:35:31.858634056 +0100
+@@ -2287,6 +2287,7 @@
+ int n_ops = 2, input_ops = 2, input_consts = 0, n_consts;
+ int first, changed;
+ int i, j;
++ HOST_WIDE_INT fp_offset = 0;
+
+ memset (ops, 0, sizeof ops);
+
+@@ -2312,6 +2313,10 @@
+ switch (this_code)
+ {
+ case PLUS:
++ if (flag_propolice_protection
++ && XEXP (this_op, 0) == virtual_stack_vars_rtx
++ && GET_CODE (XEXP (this_op, 1)) == CONST_INT)
++ fp_offset = INTVAL (XEXP (this_op, 1));
+ case MINUS:
+ if (n_ops == 7)
+ return NULL_RTX;
+@@ -2473,11 +2478,24 @@
+ && GET_CODE (ops[n_ops - 1].op) == CONST_INT
+ && CONSTANT_P (ops[n_ops - 2].op))
+ {
+- rtx value = ops[n_ops - 1].op;
+- if (ops[n_ops - 1].neg ^ ops[n_ops - 2].neg)
+- value = neg_const_int (mode, value);
+- ops[n_ops - 2].op = plus_constant (ops[n_ops - 2].op, INTVAL (value));
+- n_ops--;
++ if (!flag_propolice_protection)
++ {
++ rtx value = ops[n_ops - 1].op;
++ if (ops[n_ops - 1].neg ^ ops[n_ops - 2].neg)
++ value = neg_const_int (mode, value);
++ ops[n_ops - 2].op = plus_constant (ops[n_ops - 2].op, INTVAL (value));
++ n_ops--;
++ }
++ /* The stack protector keeps the addressing style of a local variable,
++ so it doesn't use neg_const_int function not to change
++ the offset value. */
++ else {
++ HOST_WIDE_INT value = INTVAL (ops[n_ops - 1].op);
++ if (ops[n_ops - 1].neg ^ ops[n_ops - 2].neg)
++ value = -value;
++ ops[n_ops - 2].op = plus_constant (ops[n_ops - 2].op, value);
++ n_ops--;
++ }
+ }
+
+ /* Count the number of CONSTs that we generated. */
+@@ -2495,6 +2513,59 @@
+ || (n_ops + n_consts == input_ops && n_consts <= input_consts)))
+ return NULL_RTX;
+
++ if (flag_propolice_protection)
++ {
++ /* keep the addressing style of local variables
++ as (plus (virtual_stack_vars_rtx) (CONST_int x)).
++ For the case array[r-1],
++ converts from (+ (+VFP c1) (+r -1)) to (SET R (+VFP c1)) (+ R (+r -1)).
++
++ This loop finds ops[i] which is the register for the frame
++ addressing, Then, makes the frame addressing using the register and
++ the constant of ops[n_ops - 1]. */
++ for (i = 0; i < n_ops; i++)
++#ifdef FRAME_GROWS_DOWNWARD
++ if (ops[i].op == virtual_stack_vars_rtx)
++#else
++ if (ops[i].op == virtual_stack_vars_rtx
++ || ops[i].op == frame_pointer_rtx)
++#endif
++ {
++ if (GET_CODE (ops[n_ops - 1].op) == CONST_INT)
++ {
++ HOST_WIDE_INT value = INTVAL (ops[n_ops - 1].op);
++ if (value >= fp_offset)
++ {
++ ops[i].op = plus_constant (ops[i].op, value);
++ n_ops--;
++ }
++ else
++ {
++ if (!force
++ && (n_ops + 1 + n_consts > input_ops
++ || (n_ops + 1 + n_consts == input_ops
++ && n_consts <= input_consts)))
++ return NULL_RTX;
++ ops[n_ops - 1].op = GEN_INT (value-fp_offset);
++ ops[i].op = plus_constant (ops[i].op, fp_offset);
++ }
++ }
++ /* keep the following address pattern;
++ (1) buf[BUFSIZE] is the first assigned variable.
++ (+ (+ fp -BUFSIZE) BUFSIZE)
++ (2) ((+ (+ fp 1) r) -1). */
++ else if (fp_offset != 0)
++ return NULL_RTX;
++ /* keep the (+ fp 0) pattern for the following case;
++ (1) buf[i]: i: REG, buf: (+ fp 0) in !FRAME_GROWS_DOWNWARD
++ (2) argument: the address is (+ fp 0). */
++ else if (fp_offset == 0)
++ return NULL_RTX;
++
++ break;
++ }
++ }
++
+ /* Put a non-negated operand first, if possible. */
+
+ for (i = 0; i < n_ops && ops[i].neg; i++)
+diff -uNr gcc-3.4.3.orig/gcc/testsuite/gcc.dg/ssp-warn.c gcc-3.4.3/gcc/testsuite/gcc.dg/ssp-warn.c
+--- gcc-3.4.3.orig/gcc/testsuite/gcc.dg/ssp-warn.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.3/gcc/testsuite/gcc.dg/ssp-warn.c 2003-11-21 09:41:19.000000000 +0100
+@@ -0,0 +1,32 @@
++/* { dg-do compile } */
++/* { dg-options "-fstack-protector" } */
++void
++test1()
++{
++ void intest1(int *a)
++ {
++ *a ++;
++ }
++
++ char buf[80];
++
++ buf[0] = 0;
++} /* { dg-bogus "not protecting function: it contains functions" } */
++
++void
++test2(int n)
++{
++ char buf[80];
++ char vbuf[n];
++
++ buf[0] = 0;
++ vbuf[0] = 0;
++} /* { dg-bogus "not protecting variables: it has a variable length buffer" } */
++
++void
++test3()
++{
++ char buf[5];
++
++ buf[0] = 0;
++} /* { dg-bogus "not protecting function: buffer is less than 8 bytes long" } */
+diff -uNr gcc-3.4.3.orig/gcc/testsuite/gcc.misc-tests/ssp-execute1.c gcc-3.4.3/gcc/testsuite/gcc.misc-tests/ssp-execute1.c
+--- gcc-3.4.3.orig/gcc/testsuite/gcc.misc-tests/ssp-execute1.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.3/gcc/testsuite/gcc.misc-tests/ssp-execute1.c 2004-02-16 06:15:39.000000000 +0100
+@@ -0,0 +1,54 @@
++/* Test location changes of character array. */
++
++void
++test(int i)
++{
++ int ibuf1[10];
++ char buf[50];
++ int ibuf2[10];
++ char buf2[50000];
++ int ibuf3[10];
++ char *p;
++
++ /* c1: the frame offset of buf[0]
++ c2: the frame offset of buf2[0]
++ */
++ p= &buf[0]; *p=1; /* expected rtl: (+ fp -c1) */
++ if (*p != buf[0])
++ abort();
++ p= &buf[5]; *p=2; /* expected rtl: (+ fp -c1+5) */
++ if (*p != buf[5])
++ abort();
++ p= &buf[-1]; *p=3; /* expected rtl: (+ (+ fp -c1) -1) */
++ if (*p != buf[-1])
++ abort();
++ p= &buf[49]; *p=4; /* expected rtl: (+ fp -c1+49) */
++ if (*p != buf[49])
++ abort();
++ p = &buf[i+5]; *p=5; /* expected rtl: (+ (+ fp -c1) (+ i 5)) */
++ if (*p != buf[i+5])
++ abort ();
++ p = buf - 1; *p=6; /* expected rtl: (+ (+ fp -c1) -1) */
++ if (*p != buf[-1])
++ abort ();
++ p = 1 + buf; *p=7; /* expected rtl: (+ (+ fp -c1) 1) */
++ if (*p != buf[1])
++ abort ();
++ p = &buf[1] - 1; *p=8; /* expected rtl: (+ (+ fp -c1+1) -1) */
++ if (*p != buf[0])
++ abort ();
++
++ /* test big offset which is greater than the max value of signed 16 bit integer. */
++ p = &buf2[45555]; *p=9; /* expected rtl: (+ fp -c2+45555) */
++ if (*p != buf2[45555])
++ abort ();
++}
++
++int main()
++{
++ test(10);
++ exit(0);
++}
++
++
++
+diff -uNr gcc-3.4.3.orig/gcc/testsuite/gcc.misc-tests/ssp-execute2.c gcc-3.4.3/gcc/testsuite/gcc.misc-tests/ssp-execute2.c
+--- gcc-3.4.3.orig/gcc/testsuite/gcc.misc-tests/ssp-execute2.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.3/gcc/testsuite/gcc.misc-tests/ssp-execute2.c 2003-11-22 09:44:33.000000000 +0100
+@@ -0,0 +1,49 @@
++void
++test(int i, char *j, int k)
++{
++ int a[10];
++ char b;
++ int c;
++ long *d;
++ char buf[50];
++ long e[10];
++ int n;
++
++ a[0] = 4;
++ b = 5;
++ c = 6;
++ d = (long*)7;
++ e[0] = 8;
++
++ /* overflow buffer */
++ for (n = 0; n < 120; n++)
++ buf[n] = 0;
++
++ if (j == 0 || *j != 2)
++ abort ();
++ if (a[0] == 0)
++ abort ();
++ if (b == 0)
++ abort ();
++ if (c == 0)
++ abort ();
++ if (d == 0)
++ abort ();
++ if (e[0] == 0)
++ abort ();
++
++ exit (0);
++}
++
++int main()
++{
++ int i, k;
++ int j[40];
++ i = 1;
++ j[39] = 2;
++ k = 3;
++ test(i, &j[39], k);
++}
++
++
++
+diff -uNr gcc-3.4.3.orig/gcc/testsuite/gcc.misc-tests/ssp-execute.exp gcc-3.4.3/gcc/testsuite/gcc.misc-tests/ssp-execute.exp
+--- gcc-3.4.3.orig/gcc/testsuite/gcc.misc-tests/ssp-execute.exp 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.3/gcc/testsuite/gcc.misc-tests/ssp-execute.exp 2004-06-02 13:23:36.000000000 +0200
+@@ -0,0 +1,35 @@
++# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++# Load support procs.
++load_lib c-torture.exp
++
++#
++# main test loop
++#
++
++foreach src [lsort [glob -nocomplain $srcdir/$subdir/ssp-execute*.c]] {
++ # If we're only testing specific files and this isn't one of them, skip it.
++ if ![runtest_file_p $runtests $src] then {
++ continue
++ }
++
++ c-torture-execute $src -fstack-protector
++}
+diff -uNr gcc-3.4.3.orig/gcc/toplev.c gcc-3.4.3/gcc/toplev.c
+--- gcc-3.4.3.orig/gcc/toplev.c 2004-07-26 16:42:11.000000000 +0200
++++ gcc-3.4.3/gcc/toplev.c 2004-11-24 18:35:31.000000000 +0100
+@@ -79,6 +79,7 @@
+ #include "coverage.h"
+ #include "value-prof.h"
+ #include "alloc-pool.h"
++#include "protector.h"
+
+ #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
+ #include "dwarf2out.h"
+@@ -97,6 +98,10 @@
+ declarations for e.g. AIX 4.x. */
+ #endif
+
++#ifdef STACK_PROTECTOR
++#include "protector.h"
++#endif
++
+ #ifndef HAVE_conditional_execution
+ #define HAVE_conditional_execution 0
+ #endif
+@@ -979,6 +984,15 @@
+ minimum function alignment. Zero means no alignment is forced. */
+ int force_align_functions_log;
+
++#if defined(STACK_PROTECTOR) && defined(STACK_GROWS_DOWNWARD)
++/* Nonzero means use propolice as a stack protection method */
++int flag_propolice_protection = 1;
++int flag_stack_protection = 0;
++#else
++int flag_propolice_protection = 0;
++int flag_stack_protection = 0;
++#endif
++
+ typedef struct
+ {
+ const char *const string;
+@@ -1154,7 +1168,9 @@
+ {"mem-report", &mem_report, 1 },
+ { "trapv", &flag_trapv, 1 },
+ { "wrapv", &flag_wrapv, 1 },
+- { "new-ra", &flag_new_regalloc, 1 }
++ { "new-ra", &flag_new_regalloc, 1 },
++ {"stack-protector", &flag_propolice_protection, 1 },
++ {"stack-protector-all", &flag_stack_protection, 1 }
+ };
+
+ /* Here is a table, controlled by the tm.h file, listing each -m switch
+@@ -2686,6 +2702,9 @@
+
+ insns = get_insns ();
+
++ if (flag_propolice_protection)
++ prepare_stack_protection (inlinable);
++
+ /* Dump the rtl code if we are dumping rtl. */
+
+ if (open_dump_file (DFI_rtl, decl))
+@@ -4483,6 +4502,12 @@
+ /* The presence of IEEE signaling NaNs, implies all math can trap. */
+ if (flag_signaling_nans)
+ flag_trapping_math = 1;
++
++ /* This combination makes optimized frame addressings and causes
++ a internal compilation error at prepare_stack_protection.
++ so don't allow it. */
++ if (flag_stack_protection && !flag_propolice_protection)
++ flag_propolice_protection = TRUE;
+ }
+
+ /* Initialize the compiler back end. */
+diff -uNr gcc-3.4.3.orig/gcc/tree.h gcc-3.4.3/gcc/tree.h
+--- gcc-3.4.3.orig/gcc/tree.h 2004-11-24 18:04:19.000000000 +0100
++++ gcc-3.4.3/gcc/tree.h 2004-11-24 18:35:31.000000000 +0100
+@@ -1489,6 +1489,10 @@
+ where it is called. */
+ #define DECL_INLINE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inline_flag)
+
++/* In a VAR_DECL, nonzero if the declaration is copied for inlining.
++ The stack protector should keep its location in the stack. */
++#define DECL_COPIED(NODE) (VAR_DECL_CHECK (NODE)->decl.inline_flag)
++
+ /* Nonzero in a FUNCTION_DECL means that this function was declared inline,
+ such as via the `inline' keyword in C/C++. This flag controls the linkage
+ semantics of 'inline'; whether or not the function is inlined is