From b14e216f59d57818d9086cd3f928df8030863bb1 Mon Sep 17 00:00:00 2001 From: hawk Date: Fri, 6 Feb 2009 16:15:54 +0000 Subject: [PATCH] - gcc3 renamed to gcc 3.4 Changed files: gcc3-ada-bootstrap.patch -> 1.2 gcc3-ada-link-new-libgnat.patch -> 1.2 gcc3-ada-link.patch -> 1.2 gcc3-cxxabi.patch -> 1.2 gcc3-gcc_visibility.m4 -> 1.2 gcc3-info.patch -> 1.2 gcc3-nodebug.patch -> 1.2 gcc3-nolocalefiles.patch -> 1.2 gcc3-pr-rh.patch -> 1.2 gcc3-pr15666.patch -> 1.2 gcc3-ssp.patch -> 1.2 gcc3-visibility.patch -> 1.2 --- gcc3-ada-bootstrap.patch | 7695 ------------------------------- gcc3-ada-link-new-libgnat.patch | 11 - gcc3-ada-link.patch | 154 - gcc3-cxxabi.patch | 47 - gcc3-gcc_visibility.m4 | 26 - gcc3-info.patch | 233 - gcc3-nodebug.patch | 66 - gcc3-nolocalefiles.patch | 11 - gcc3-pr-rh.patch | 3102 ------------- gcc3-pr15666.patch | 23 - gcc3-ssp.patch | 4202 ----------------- gcc3-visibility.patch | 702 --- 12 files changed, 16272 deletions(-) delete mode 100644 gcc3-ada-bootstrap.patch delete mode 100644 gcc3-ada-link-new-libgnat.patch delete mode 100644 gcc3-ada-link.patch delete mode 100644 gcc3-cxxabi.patch delete mode 100644 gcc3-gcc_visibility.m4 delete mode 100644 gcc3-info.patch delete mode 100644 gcc3-nodebug.patch delete mode 100644 gcc3-nolocalefiles.patch delete mode 100644 gcc3-pr-rh.patch delete mode 100644 gcc3-pr15666.patch delete mode 100644 gcc3-ssp.patch delete mode 100644 gcc3-visibility.patch diff --git a/gcc3-ada-bootstrap.patch b/gcc3-ada-bootstrap.patch deleted file mode 100644 index e70ef3b..0000000 --- a/gcc3-ada-bootstrap.patch +++ /dev/null @@ -1,7695 +0,0 @@ ---- 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; diff --git a/gcc3-ada-link-new-libgnat.patch b/gcc3-ada-link-new-libgnat.patch deleted file mode 100644 index 59ee893..0000000 --- a/gcc3-ada-link-new-libgnat.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gcc-3.4-20040611/gcc/ada/Make-lang.in.orig 2004-06-09 11:20:41.000000000 +0200 -+++ gcc-3.4-20040611/gcc/ada/Make-lang.in 2004-06-12 03:38:09.373698608 +0200 -@@ -446,7 +446,7 @@ - ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb - -$(MKDIR) ada/doctools - $(CP) $^ ada/doctools -- cd ada/doctools && gnatmake -q xgnatugn -+ cd ada/doctools && gnatmake -q xgnatugn -a0../rts - - doc/gnat_ugn_unw.texi : ada/doctools/xgnatugn$(build_exeext) \ - $(srcdir)/ada/gnat_ugn.texi $(srcdir)/ada/ug_words diff --git a/gcc3-ada-link.patch b/gcc3-ada-link.patch deleted file mode 100644 index 339e870..0000000 --- a/gcc3-ada-link.patch +++ /dev/null @@ -1,154 +0,0 @@ ---- gcc-3.4.0/gcc/ada/link.c.orig Mon Jan 12 12:45:24 2004 -+++ gcc-3.4.0/gcc/ada/link.c Tue Jun 1 15:57:42 2004 -@@ -165,9 +165,9 @@ - - #elif defined (linux) - const char *object_file_option = ""; --const char *run_path_option = "-Wl,-rpath,"; --char shared_libgnat_default = STATIC; --int link_max = 8192; -+const char *run_path_option = ""; -+char shared_libgnat_default = SHARED; -+int link_max = 131072; - unsigned char objlist_file_supported = 1; - unsigned char using_gnu_linker = 1; - const char *object_library_extension = ".a"; ---- gcc-3.4.0/gcc/ada/Makefile.in.orig Mon Apr 26 11:19:09 2004 -+++ gcc-3.4.0/gcc/ada/Makefile.in Tue Jun 1 15:58:33 2004 -@@ -142,7 +142,7 @@ - objext = .o - exeext = - arext = .a --soext = .so -+soext = .so.1 - shext = - - # Define this as & to perform parallel make on a Sequent. -@@ -1269,6 +1269,90 @@ - LIBRARY_VERSION := $(LIB_VERSION) - endif - -+ifeq ($(strip $(filter-out alpha% linux%,$(arch) $(osys))),) -+ LIBGNAT_TARGET_PAIRS = \ -+ a-intnam.ads<4lintnam.ads \ -+ s-inmaop.adb<7sinmaop.adb \ -+ s-intman.adb<7sintman.adb \ -+ s-osinte.ads<5iosinte.ads \ -+ s-osinte.adb<5iosinte.adb \ -+ s-osprim.adb<7sosprim.adb \ -+ s-taprop.adb<5itaprop.adb \ -+ s-tpopsp.adb<5atpopsp.adb \ -+ s-taspri.ads<5itaspri.ads \ -+ system.ads<5nsystem.ads -+ TOOLS_TARGET_PAIRS=mlib-tgt.adb<5lml-tgt.adb -+ THREADSLIB=-lpthread -+ GNATLIB_SHARED=gnatlib-shared-dual -+ PREFIX_OBJS=$(PREFIX_REAL_OBJS) -+ LIBRARY_VERSION := $(LIB_VERSION) -+endif -+ -+ifeq ($(strip $(filter-out sparc% linux%,$(arch) $(osys))),) -+ LIBGNAT_TARGET_PAIRS = \ -+ a-intnam.ads<4lintnam.ads \ -+ s-inmaop.adb<7sinmaop.adb \ -+ s-intman.adb<7sintman.adb \ -+ s-osinte.ads<5iosinte.ads \ -+ s-osinte.adb<5iosinte.adb \ -+ s-osprim.adb<7sosprim.adb \ -+ s-taprop.adb<5itaprop.adb \ -+ s-tpopsp.adb<5atpopsp.adb \ -+ s-taspri.ads<5itaspri.ads -+# system.ads<5ssystem.ads (Tick and Stack_Check_Probes differ) -+ TOOLS_TARGET_PAIRS=mlib-tgt.adb<5lml-tgt.adb -+ THREADSLIB=-lpthread -+ GNATLIB_SHARED=gnatlib-shared-dual -+ PREFIX_OBJS=$(PREFIX_REAL_OBJS) -+ LIBRARY_VERSION := $(LIB_VERSION) -+endif -+ -+ifeq ($(strip $(filter-out ppc% linux%,$(arch) $(osys))),) -+ LIBGNAT_TARGET_PAIRS = \ -+ a-intnam.ads<4lintnam.ads \ -+ s-inmaop.adb<7sinmaop.adb \ -+ s-intman.adb<7sintman.adb \ -+ s-osinte.ads<5iosinte.ads \ -+ s-osinte.adb<5iosinte.adb \ -+ s-osprim.adb<7sosprim.adb \ -+ s-taprop.adb<5itaprop.adb \ -+ s-tpopsp.adb<5atpopsp.adb \ -+ s-taspri.ads<5itaspri.ads -+# system.ads<59system.ads (???) -+ TOOLS_TARGET_PAIRS=mlib-tgt.adb<5lml-tgt.adb -+ THREADSLIB=-lpthread -+ GNATLIB_SHARED=gnatlib-shared-dual -+ PREFIX_OBJS=$(PREFIX_REAL_OBJS) -+ LIBRARY_VERSION := $(LIB_VERSION) -+endif -+ -+ifeq ($(strip $(filter-out powerpc% linux%,$(arch) $(osys))),) -+ LIBGNAT_TARGET_PAIRS = \ -+ a-intnam.ads<4lintnam.ads \ -+ s-inmaop.adb<7sinmaop.adb \ -+ s-intman.adb<7sintman.adb \ -+ s-osinte.ads<5iosinte.ads \ -+ s-osinte.adb<5iosinte.adb \ -+ s-osprim.adb<7sosprim.adb \ -+ s-taprop.adb<5itaprop.adb \ -+ s-tpopsp.adb<5atpopsp.adb \ -+ s-taspri.ads<5itaspri.ads -+# system.ads<59system.ads (???) -+ TOOLS_TARGET_PAIRS=mlib-tgt.adb<5lml-tgt.adb -+ THREADSLIB=-lpthread -+ GNATLIB_SHARED=gnatlib-shared-dual -+ PREFIX_OBJS=$(PREFIX_REAL_OBJS) -+ LIBRARY_VERSION := $(LIB_VERSION) -+endif -+ -+ifeq ($(strip $(filter-out s390% linux%,$(arch) $(osys))),) -+ TOOLS_TARGET_PAIRS=mlib-tgt.adb<5lml-tgt.adb -+ THREADSLIB=-lpthread -+ GNATLIB_SHARED=gnatlib-shared-dual -+ PREFIX_OBJS=$(PREFIX_REAL_OBJS) -+ LIBRARY_VERSION := $(LIB_VERSION) -+endif -+ - ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),) - LIBGNAT_TARGET_PAIRS = \ - a-intnam.ads<4lintnam.ads \ -@@ -1767,6 +1840,9 @@ - # is guaranteed to overflow the buffer. - - gnatlib: ../stamp-gnatlib1 ../stamp-gnatlib2 -+ $(RMDIR) save -+ $(MKDIR) save -+ $(MV) *.o save/ - $(MAKE) -C rts CC="../../xgcc -B../../" \ - INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \ - CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \ -@@ -1779,6 +1855,8 @@ - srcdir=$(fsrcdir) \ - -f ../Makefile \ - $(GNATRTL_OBJS) -+ $(MV) save/*.o . -+ $(RMDIR) save - $(RM) rts/libgnat$(arext) rts/libgnarl$(arext) - $(AR) $(AR_FLAGS) rts/libgnat$(arext) \ - $(addprefix rts/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS)) -@@ -1891,14 +1969,15 @@ - THREAD_KIND="$(THREAD_KIND)" \ - gnatlib - $(RM) rts/libgnat$(soext) rts/libgnarl$(soext) -- cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \ -+ cd rts; ../../xgcc -B../../ -shared -shared-libgcc $(TARGET_LIBGCC2_CFLAGS) \ - -o libgnat-$(LIBRARY_VERSION)$(soext) \ - $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \ - $(SO_OPTS)libgnat-$(LIBRARY_VERSION)$(soext) $(MISCLIB) -lm - cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \ - -o libgnarl-$(LIBRARY_VERSION)$(soext) \ - $(GNATRTL_TASKING_OBJS) \ -- $(SO_OPTS)libgnarl-$(LIBRARY_VERSION)$(soext) $(THREADSLIB) -+ $(SO_OPTS)libgnarl-$(LIBRARY_VERSION)$(soext) $(THREADSLIB) \ -+ ./libgnat-$(LIBRARY_VERSION)$(soext) - cd rts; $(LN_S) libgnat-$(LIBRARY_VERSION)$(soext) libgnat$(soext) - cd rts; $(LN_S) libgnarl-$(LIBRARY_VERSION)$(soext) libgnarl$(soext) - diff --git a/gcc3-cxxabi.patch b/gcc3-cxxabi.patch deleted file mode 100644 index 1797a85..0000000 --- a/gcc3-cxxabi.patch +++ /dev/null @@ -1,47 +0,0 @@ -2005-02-18 Richard Henderson - - PR libstdc++/10606 - * config/linker-map.gnu (CXXABI_1.3.1): Add __cxa_get_exception_ptr. - * libsupc++/eh_catch.cc (__cxa_get_exception_ptr): New. - * libsupc++/unwind-cxx.h (__cxa_get_exception_ptr): Declare. - ---- libstdc++-v3/config/linker-map.gnu (revision 94498) -+++ libstdc++-v3/config/linker-map.gnu (revision 95705) -@@ -406,3 +410,9 @@ CXXABI_1.3 { - local: - *; - }; -+ -+CXXABI_1.3.1 { -+ -+ __cxa_get_exception_ptr; -+ -+} CXXABI_1.3; ---- libstdc++-v3/libsupc++/unwind-cxx.h (revision 94498) -+++ libstdc++-v3/libsupc++/unwind-cxx.h (revision 95705) -@@ -107,6 +107,7 @@ extern "C" void __cxa_throw (void *throw - __attribute__((noreturn)); - - // Used to implement exception handlers. -+extern "C" void *__cxa_get_exception_ptr (void *) throw(); - extern "C" void *__cxa_begin_catch (void *) throw(); - extern "C" void __cxa_end_catch (); - extern "C" void __cxa_rethrow () __attribute__((noreturn)); ---- libstdc++-v3/libsupc++/eh_catch.cc (revision 94498) -+++ libstdc++-v3/libsupc++/eh_catch.cc (revision 95705) -@@ -33,6 +33,15 @@ - - using namespace __cxxabiv1; - -+extern "C" void * -+__cxxabiv1::__cxa_get_exception_ptr(void *exc_obj_in) throw() -+{ -+ _Unwind_Exception *exceptionObject -+ = reinterpret_cast <_Unwind_Exception *>(exc_obj_in); -+ __cxa_exception *header = __get_exception_header_from_ue (exceptionObject); -+ -+ return header->adjustedPtr; -+} - - extern "C" void * - __cxxabiv1::__cxa_begin_catch (void *exc_obj_in) throw() diff --git a/gcc3-gcc_visibility.m4 b/gcc3-gcc_visibility.m4 deleted file mode 100644 index e0d8f2a..0000000 --- a/gcc3-gcc_visibility.m4 +++ /dev/null @@ -1,26 +0,0 @@ -AC_DEFUN([HIDE_INLINES], [ - visibility_inlines_hidden=yes - if test "X$CXX" != "X"; then - AC_MSG_CHECKING([whether ${CXX} accepts -fvisbility-inlines-hidden]) - visbility_old_cxxflags="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden" - AC_TRY_COMPILE(, , , visibility_inlines_hidden=no) - echo $visibility_inlines_hidden - if test "X$visibility_inlines_hidden" = "Xno"; then - CXXFLAGS="$visibility_old_cxxflags" - fi - fi -]) - -AC_DEFUN([HIDDEN_ATTRIBUTE], [ - if test "X$CC" != "X"; then - AC_MSG_CHECKING([GCC visibility attribute]) - AC_TRY_COMPILE( - [int __attribute__((visibility("hidden"))) test();], - [], - AC_DEFINE(HAVE_HIDDEN_ATTRIBUTE, 1, []) - AC_MSG_RESULT(yes), - AC_MSG_RESULT(no) - ) - fi -]) diff --git a/gcc3-info.patch b/gcc3-info.patch deleted file mode 100644 index 54f3a9b..0000000 --- a/gcc3-info.patch +++ /dev/null @@ -1,233 +0,0 @@ ---- gcc-3.4-20040611/gcc/doc/cpp.texi.orig 2004-01-18 12:59:03.000000000 +0100 -+++ gcc-3.4-20040611/gcc/doc/cpp.texi 2004-06-12 03:49:21.959450032 +0200 -@@ -52,9 +52,9 @@ - @set cppmanual - - @ifinfo --@dircategory Programming -+@dircategory Programming Languages - @direntry --* Cpp: (cpp). The GNU C preprocessor. -+* Cpp: (cpp). The GNU C preprocessor. - @end direntry - @end ifinfo - ---- gcc-3.4-20040611/gcc/doc/cppinternals.texi.orig 2002-01-07 20:03:36.000000000 +0100 -+++ gcc-3.4-20040611/gcc/doc/cppinternals.texi 2004-06-12 03:50:08.394390848 +0200 -@@ -3,9 +3,9 @@ - @settitle The GNU C Preprocessor Internals - - @ifinfo --@dircategory Programming -+@dircategory Programming Languages - @direntry --* Cpplib: (cppinternals). Cpplib internals. -+* Cpplib: (cppinternals). Cpplib internals. - @end direntry - @end ifinfo - ---- gcc-3.2/gcc/doc/gcc.texi.orig Fri Nov 1 22:58:48 2002 -+++ gcc-3.2/gcc/doc/gcc.texi Fri Nov 1 23:06:12 2002 -@@ -65,9 +65,9 @@ - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - @end macro - @ifnottex --@dircategory Programming -+@dircategory Programming Languages: - @direntry --* gcc: (gcc). The GNU Compiler Collection. -+* gcc: (gcc). The GNU Compiler Collection - @end direntry - This file documents the use of the GNU compilers. - @sp 1 ---- gcc-3.2/gcc/doc/gccint.texi.orig Wed Jan 23 18:30:28 2002 -+++ gcc-3.2/gcc/doc/gccint.texi Fri Nov 1 23:06:57 2002 -@@ -51,9 +51,9 @@ - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - @end macro - @ifnottex --@dircategory Programming -+@dircategory Programming Languages: - @direntry --* gccint: (gccint). Internals of the GNU Compiler Collection. -+* gccint: (gccint). Internals of the GNU Compiler Collection - @end direntry - This file documents the internals of the GNU compilers. - @sp 1 ---- gcc-3.4-20040611/gcc/ada/gnat-style.texi.orig 2004-06-09 11:20:43.000000000 +0200 -+++ gcc-3.4-20040611/gcc/ada/gnat-style.texi 2004-06-12 03:22:07.287957872 +0200 -@@ -28,9 +28,9 @@ - @setchapternewpage odd - - --@dircategory Programming -+@dircategory Programming Languages - @direntry --* gnat-style: (gnat-style). GNAT Coding Style -+* gnat-style: (gnat-style). GNAT Coding Style - @end direntry - - @macro syntax{element} ---- gcc-3.4-20040611/gcc/ada/gnat_ugn.texi.orig Fri Nov 1 22:58:52 2002 -+++ gcc-3.4-20040611/gcc/ada/gnat_ugn.texi Fri Nov 1 23:10:20 2002 -@@ -75,6 +75,11 @@ - @syncodeindex fn cp - @c %**end of header - -+@dircategory Programming Languages: -+@direntry -+* gnat_ug: (gnat_ug). GNAT User's Guide -+@end direntry -+ - @titlepage - - @ifset vms ---- gcc-3.2/gcc/f/g77.texi.orig Mon Apr 29 09:58:32 2002 -+++ gcc-3.2/gcc/f/g77.texi Fri Nov 1 23:11:56 2002 -@@ -90,9 +90,9 @@ - @c @end tex - - @ifinfo --@dircategory Programming -+@dircategory Programming Languages: - @direntry --* g77: (g77). The GNU Fortran compiler. -+* g77: (g77). The GNU Fortran compiler - @end direntry - @ifset INTERNALS - @ifset USING ---- gcc-3.2/gcc/java/gcj.texi.orig Sun Aug 4 18:55:55 2002 -+++ gcc-3.2/gcc/java/gcj.texi Fri Nov 1 23:16:39 2002 -@@ -20,26 +20,20 @@ - - @ifinfo - @format --@dircategory Programming -+@dircategory Programming Languages: - @direntry --* Gcj: (gcj). Ahead-of-time compiler for the Java language -+* Gcj: (gcj). Ahead-of-time compiler for the Java language - @end direntry - --@dircategory Individual utilities -+@dircategory Programming tools: - @direntry --* gcjh: (gcj)Invoking gcjh. -- Generate header files from Java class files --* jv-scan: (gcj)Invoking jv-scan. -- Print information about Java source files --* jcf-dump: (gcj)Invoking jcf-dump. -- Print information about Java class files --* gij: (gcj)Invoking gij. GNU interpreter for Java bytecode --* jv-convert: (gcj)Invoking jv-convert. -- Convert file from one encoding to another --* rmic: (gcj)Invoking rmic. -- Generate stubs for Remote Method Invocation. --* rmiregistry: (gcj)Invoking rmiregistry. -- The remote object registry. -+* gcjh: (gcj)gcjh. Generate header files from Java class files -+* jv-scan: (gcj)jv-scan. Print information about Java source files -+* jcf-dump: (gcj)jcf-dump. Print information about Java class files -+* gij: (gcj)gij. GNU interpreter for Java bytecode -+* jv-convert: (gcj)jv-convert. Convert file from one encoding to another -+* rmic: (gcj)rmic. Generate stubs for Remote Method Invocation. -+* rmiregistry: (gcj)rmiregistry. The remote object registry - @end direntry - @end format - -@@ -120,15 +114,15 @@ - * Copying:: The GNU General Public License - * GNU Free Documentation License:: - How you can share and copy this manual --* Invoking gcj:: Compiler options supported by @command{gcj} -+* gcj:: Compiler options supported by @command{gcj} - * Compatibility:: Compatibility between gcj and other tools for Java --* Invoking gcjh:: Generate header files from class files --* Invoking jv-scan:: Print information about source files --* Invoking jcf-dump:: Print information about class files --* Invoking gij:: Interpreting Java bytecodes --* Invoking jv-convert:: Converting from one encoding to another --* Invoking rmic:: Generate stubs for Remote Method Invocation. --* Invoking rmiregistry:: The remote object registry. -+* gcjh:: Generate header files from class files -+* jv-scan:: Print information about source files -+* jcf-dump:: Print information about class files -+* gij:: Interpreting Java bytecodes -+* jv-convert:: Converting from one encoding to another -+* rmic:: Generate stubs for Remote Method Invocation. -+* rmiregistry:: The remote object registry. - * About CNI:: Description of the Compiled Native Interface - * System properties:: Modifying runtime behavior of the libgcj library - * Resources:: Where to look for more information -@@ -139,7 +133,7 @@ - @include fdl.texi - - --@node Invoking gcj -+@node gcj - @chapter Invoking gcj - - @c man title gcj Ahead-of-time compiler for the Java language -@@ -506,7 +500,7 @@ - @end itemize - - --@node Invoking gcjh -+@node gcjh - @chapter Invoking gcjh - - @c man title gcjh generate header files from Java class files -@@ -607,7 +601,7 @@ - - @c man end - --@node Invoking jv-scan -+@node jv-scan - @chapter Invoking jv-scan - - @c man title jv-scan print information about Java source file -@@ -665,7 +659,7 @@ - - @c man end - --@node Invoking jcf-dump -+@node jcf-dump - @chapter Invoking jcf-dump - - @c man title jcf-dump print information about Java class files -@@ -720,7 +714,7 @@ - - @c man end - --@node Invoking gij -+@node gij - @chapter Invoking gij - - @c man title gij GNU interpreter for Java bytecode -@@ -798,7 +792,7 @@ - - @c man end - --@node Invoking jv-convert -+@node jv-convert - @chapter Invoking jv-convert - - @c man title jv-convert Convert file from one encoding to another -@@ -857,7 +851,7 @@ - - @c man end - --@node Invoking rmic -+@node rmic - @chapter Invoking rmic - - @c man title rmic Generate stubs for Remote Method Invocation -@@ -936,7 +930,7 @@ - @c man end - - --@node Invoking rmiregistry -+@node rmiregistry - @chapter Invoking rmiregistry - - @c man title rmiregistry Remote object registry diff --git a/gcc3-nodebug.patch b/gcc3-nodebug.patch deleted file mode 100644 index b4e5be5..0000000 --- a/gcc3-nodebug.patch +++ /dev/null @@ -1,66 +0,0 @@ ---- gcc-3.3.3/gcc/Makefile.in.orig 2004-02-16 18:57:42.824016056 +0100 -+++ gcc-3.3.3/gcc/Makefile.in 2004-02-16 18:59:52.167352880 +0100 -@@ -65,9 +65,9 @@ - # TCFLAGS is used for compilations with the GCC just built. - XCFLAGS = - TCFLAGS = --CFLAGS = -g --STAGE1_CFLAGS = -g @stage1_cflags@ --BOOT_CFLAGS = -g -O2 -+CFLAGS = -+STAGE1_CFLAGS = @stage1_cflags@ -+BOOT_CFLAGS = -O2 - - # Flags to determine code coverage. When coverage is disabled, this will - # contain the optimization flags, as you normally want code coverage -@@ -390,7 +390,7 @@ - - # Options to use when compiling libgcc2.a. - # --LIBGCC2_DEBUG_CFLAGS = -g -+LIBGCC2_DEBUG_CFLAGS = - LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED @inhibit_libc@ - - # Additional options to use when compiling libgcc2.a. ---- gcc-3.3.3/gcc/ada/Makefile.in.orig 2004-02-16 08:29:33.000000000 +0100 -+++ gcc-3.3.3/gcc/ada/Makefile.in 2004-02-16 19:04:55.708207656 +0100 -@@ -73,7 +73,7 @@ - # to the stage2 and stage3 compilations - # XCFLAGS is used for most compilations but not when using the GCC just built. - XCFLAGS = --CFLAGS = -g -+CFLAGS = - BOOT_CFLAGS = -O $(CFLAGS) - # These exists to be overridden by the x-* and t-* files, respectively. - X_CFLAGS = -@@ -127,7 +127,7 @@ - SOME_ADAFLAGS =-gnata - FORCE_DEBUG_ADAFLAGS = -g - GNATLIBFLAGS = -gnatpg --GNATLIBCFLAGS = -g -O2 -+GNATLIBCFLAGS = -O2 - GNATLIBCFLAGS_FOR_C = $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) -fexceptions \ - -DIN_RTS - ALL_ADA_CFLAGS = $(X_ADA_CFLAGS) $(T_ADA_CFLAGS) $(ADA_CFLAGS) ---- gcc-3.3.3/libjava/Makefile.am.orig 2004-02-16 08:29:34.000000000 +0100 -+++ gcc-3.3.3/libjava/Makefile.am 2004-02-16 19:02:25.582030304 +0100 -@@ -95,7 +95,7 @@ - AM_CFLAGS = @LIBGCJ_CFLAGS@ - endif - --JCFLAGS = -g -+JCFLAGS = - JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS) - - LIBFFIINCS = @LIBFFIINCS@ ---- gcc-3.3.3/libjava/Makefile.in.orig 2004-02-16 08:29:34.000000000 +0100 -+++ gcc-3.3.3/libjava/Makefile.in 2004-02-16 19:02:31.196176824 +0100 -@@ -180,7 +180,7 @@ - @USING_GCC_TRUE@AM_CFLAGS = @USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS) - @USING_GCC_FALSE@AM_CFLAGS = @USING_GCC_FALSE@@LIBGCJ_CFLAGS@ - --JCFLAGS = -g -+JCFLAGS = - JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS) - - LIBFFIINCS = @LIBFFIINCS@ diff --git a/gcc3-nolocalefiles.patch b/gcc3-nolocalefiles.patch deleted file mode 100644 index 720954a..0000000 --- a/gcc3-nolocalefiles.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gcc-3.2/libstdc++-v3/configure.orig Sat Jul 27 01:23:04 2002 -+++ gcc-3.2/libstdc++-v3/configure Thu Aug 22 08:03:18 2002 -@@ -2957,7 +2957,7 @@ - int j; - __locale_t loc; - __locale_t loc_dup; -- loc = __newlocale(1 << LC_ALL, "de_DE", 0); -+ loc = __newlocale(1 << LC_ALL, "C", 0); - loc_dup = __duplocale(loc); - i = __strcoll_l(__one, __two, loc); - j = __strcoll_l(__one, __two, loc_dup); diff --git a/gcc3-pr-rh.patch b/gcc3-pr-rh.patch deleted file mode 100644 index 5d4abef..0000000 --- a/gcc3-pr-rh.patch +++ /dev/null @@ -1,3102 +0,0 @@ -2006-02-17 Jakub Jelinek - - PR libstdc++/11953 - * gthr-posix.h (_REENTRANT): Only define if __osf__ is defined. - - * config/ia64/linux.h (CPP_SPEC): Define. - * config/s390/linux.h (CPP_SPEC): Define. - ---- gcc/gthr-posix.h (revision 111211) -+++ gcc/gthr-posix.h (revision 111212) -@@ -36,7 +36,7 @@ Software Foundation, 51 Franklin Street, - #define __GTHREADS 1 - - /* Some implementations of require this to be defined. */ --#ifndef _REENTRANT -+#if !defined(_REENTRANT) && defined(__osf__) - #define _REENTRANT 1 - #endif - ---- gcc/config/s390/linux.h (revision 111211) -+++ gcc/config/s390/linux.h (revision 111212) -@@ -89,6 +89,7 @@ Software Foundation, 51 Franklin Street, - %{m31:-dynamic-linker /lib/ld.so.1} \ - %{m64:-dynamic-linker /lib64/ld64.so.1}}}}" - -+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" - - #define TARGET_ASM_FILE_END file_end_indicate_exec_stack - ---- gcc/config/ia64/linux.h (revision 111211) -+++ gcc/config/ia64/linux.h (revision 111212) -@@ -48,6 +48,7 @@ do { \ - %{!dynamic-linker:-dynamic-linker /lib/ld-linux-ia64.so.2}} \ - %{static:-static}}" - -+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" - - #define JMP_BUF_SIZE 76 - -2004-05-27 Josef Zlomek - - PR middle-end/14084 - * emit-rtl.c (gen_rtx_REG_offset): Adjust the offset according - to size of decl. - ---- gcc/emit-rtl.c 25 May 2004 12:04:15 -0000 1.391 -+++ gcc/emit-rtl.c 27 May 2004 04:28:12 -0000 1.392 -@@ -746,13 +746,96 @@ gen_reg_rtx (enum machine_mode mode) - return val; - } - --/* Generate a register with same attributes as REG, -- but offsetted by OFFSET. */ -+/* Generate a register with same attributes as REG, but offsetted by OFFSET. -+ Do the big endian correction if needed. */ - - rtx - gen_rtx_REG_offset (rtx reg, enum machine_mode mode, unsigned int regno, int offset) - { - rtx new = gen_rtx_REG (mode, regno); -+ tree decl; -+ HOST_WIDE_INT var_size; -+ -+ /* PR middle-end/14084 -+ The problem appears when a variable is stored in a larger register -+ and later it is used in the original mode or some mode in between -+ or some part of variable is accessed. -+ -+ On little endian machines there is no problem because -+ the REG_OFFSET of the start of the variable is the same when -+ accessed in any mode (it is 0). -+ -+ However, this is not true on big endian machines. -+ The offset of the start of the variable is different when accessed -+ in different modes. -+ When we are taking a part of the REG we have to change the OFFSET -+ from offset WRT size of mode of REG to offset WRT size of variable. -+ -+ If we would not do the big endian correction the resulting REG_OFFSET -+ would be larger than the size of the DECL. -+ -+ Examples of correction, for BYTES_BIG_ENDIAN WORDS_BIG_ENDIAN machine: -+ -+ REG.mode MODE DECL size old offset new offset description -+ DI SI 4 4 0 int32 in SImode -+ DI SI 1 4 0 char in SImode -+ DI QI 1 7 0 char in QImode -+ DI QI 4 5 1 1st element in QImode -+ of char[4] -+ DI HI 4 6 2 1st element in HImode -+ of int16[2] -+ -+ If the size of DECL is equal or greater than the size of REG -+ we can't do this correction because the register holds the -+ whole variable or a part of the variable and thus the REG_OFFSET -+ is already correct. */ -+ -+ decl = REG_EXPR (reg); -+ if ((BYTES_BIG_ENDIAN || WORDS_BIG_ENDIAN) -+ && decl != NULL -+ && offset > 0 -+ && GET_MODE_SIZE (GET_MODE (reg)) > GET_MODE_SIZE (mode) -+ && ((var_size = int_size_in_bytes (TREE_TYPE (decl))) > 0 -+ && var_size < GET_MODE_SIZE (GET_MODE (reg)))) -+ { -+ int offset_le; -+ -+ /* Convert machine endian to little endian WRT size of mode of REG. */ -+ if (WORDS_BIG_ENDIAN) -+ offset_le = ((GET_MODE_SIZE (GET_MODE (reg)) - 1 - offset) -+ / UNITS_PER_WORD) * UNITS_PER_WORD; -+ else -+ offset_le = (offset / UNITS_PER_WORD) * UNITS_PER_WORD; -+ -+ if (BYTES_BIG_ENDIAN) -+ offset_le += ((GET_MODE_SIZE (GET_MODE (reg)) - 1 - offset) -+ % UNITS_PER_WORD); -+ else -+ offset_le += offset % UNITS_PER_WORD; -+ -+ if (offset_le >= var_size) -+ { -+ /* MODE is wider than the variable so the new reg will cover -+ the whole variable so the resulting OFFSET should be 0. */ -+ offset = 0; -+ } -+ else -+ { -+ /* Convert little endian to machine endian WRT size of variable. */ -+ if (WORDS_BIG_ENDIAN) -+ offset = ((var_size - 1 - offset_le) -+ / UNITS_PER_WORD) * UNITS_PER_WORD; -+ else -+ offset = (offset_le / UNITS_PER_WORD) * UNITS_PER_WORD; -+ -+ if (BYTES_BIG_ENDIAN) -+ offset += ((var_size - 1 - offset_le) -+ % UNITS_PER_WORD); -+ else -+ offset += offset_le % UNITS_PER_WORD; -+ } -+ } -+ - REG_ATTRS (new) = get_reg_attrs (REG_EXPR (reg), - REG_OFFSET (reg) + offset); - return new; -2005-01-13 Jakub Jelinek - - PR rtl-optimization/16104 - * expr.c (convert_move): Handle vector from resp. to if mode - sizes differ. - - * gcc.c-torture/execute/20050113-1.c: New test. - ---- gcc/expr.c.jj 2004-12-27 21:31:08.000000000 +0100 -+++ gcc/expr.c 2005-01-13 15:56:31.229253647 +0100 -@@ -590,7 +590,26 @@ convert_move (rtx to, rtx from, int unsi - if (VECTOR_MODE_P (to_mode) || VECTOR_MODE_P (from_mode)) - { - if (GET_MODE_BITSIZE (from_mode) != GET_MODE_BITSIZE (to_mode)) -- abort (); -+ { -+ if (VECTOR_MODE_P (from_mode)) -+ { -+ enum machine_mode new_mode; -+ -+ new_mode = mode_for_size (GET_MODE_BITSIZE (from_mode), -+ MODE_INT, 0); -+ from = simplify_gen_subreg (new_mode, from, from_mode, 0); -+ } -+ if (VECTOR_MODE_P (to_mode)) -+ { -+ enum machine_mode new_mode; -+ -+ new_mode = mode_for_size (GET_MODE_BITSIZE (to_mode), -+ MODE_INT, 0); -+ to = simplify_gen_subreg (new_mode, to, to_mode, 0); -+ } -+ convert_move (to, from, unsignedp); -+ return; -+ } - - if (VECTOR_MODE_P (to_mode)) - from = simplify_gen_subreg (to_mode, from, GET_MODE (from), 0); ---- gcc/testsuite/gcc.c-torture/execute/20050113-1.c.jj 2005-01-13 15:51:09.194383356 +0100 -+++ gcc/testsuite/gcc.c-torture/execute/20050113-1.c 2005-01-13 15:37:22.000000000 +0100 -@@ -0,0 +1,56 @@ -+/* PR rtl-optimization/16104 */ -+ -+extern void abort (void); -+ -+typedef int V2SI __attribute__ ((vector_size (8))); -+typedef short V2HI __attribute__ ((vector_size (4))); -+ -+int -+test1 (void) -+{ -+ return (long long) (V2SI) 0LL; -+} -+ -+int -+test2 (V2SI x) -+{ -+ return (long long) x; -+} -+ -+V2SI -+test3 (void) -+{ -+ return (V2SI) (long long) (int) (V2HI) 0; -+} -+ -+V2SI -+test4 (V2HI x) -+{ -+ return (V2SI) (long long) (int) x; -+} -+ -+int -+main (void) -+{ -+ if (sizeof (short) != 2 || sizeof (int) != 4 || sizeof (long long) != 8) -+ return 0; -+ -+ if (test1 () != 0) -+ abort (); -+ -+ V2SI x = { 2, 2 }; -+ if (test2 (x) != 2) -+ abort (); -+ -+ union { V2SI x; int y[2]; } u; -+ u.x = test3 (); -+ if (u.y[0] != 0 || u.y[1] != 0) -+ abort (); -+ -+ V2HI y = { 4, 4 }; -+ union { V2SI x; long long y; } v; -+ v.x = test4 (y); -+ if (v.y != 0x40004) -+ abort (); -+ return 0; -+} -2005-09-07 Jakub Jelinek - - PR target/18300 - * config/i386/i386.c (classify_argument): Only use different - iterators for nested loops if nested loops sharing the same - iterator would hang. - -2004-11-13 Zak Kipling - - PR target/18300 - * config/i386/i386.c (classify_argument): Fix infinite loop when - passing object with 3 or more base classes by value. - ---- gcc/config/i386/i386.c.jj 2005-07-21 11:01:36.000000000 +0200 -+++ gcc/config/i386/i386.c 2005-09-07 14:22:19.000000000 +0200 -@@ -2028,8 +2028,17 @@ classify_argument (enum machine_mode mod - { - tree bases = TYPE_BINFO_BASETYPES (type); - int n_bases = TREE_VEC_LENGTH (bases); -- int i; -- -+ int i, basenum; -+ enum x86_64_reg_class saveclasses[MAX_CLASSES]; -+ bool seen[MAX_CLASSES]; -+ -+ /* PR target/18300: The following code mistakenly uses the same -+ iterator variable in both nested for loops. But to preserve -+ binary compatibility, do whatever this code used to do before -+ unless old GCC would hang in an infinite loop. In that case -+ use whatever GCC 4.0+ does. */ -+ memset (seen, 0, sizeof (seen)); -+ memcpy (saveclasses, classes, sizeof (saveclasses)); - for (i = 0; i < n_bases; ++i) - { - tree binfo = TREE_VEC_ELT (bases, i); -@@ -2037,6 +2046,12 @@ classify_argument (enum machine_mode mod - int offset = tree_low_cst (BINFO_OFFSET (binfo), 0) * 8; - tree type = BINFO_TYPE (binfo); - -+ if (i < MAX_CLASSES) -+ { -+ if (seen[i]) -+ break; -+ seen[i] = true; -+ } - num = classify_argument (TYPE_MODE (type), - type, subclasses, - (offset + bit_offset) % 256); -@@ -2049,6 +2064,32 @@ classify_argument (enum machine_mode mod - merge_classes (subclasses[i], classes[i + pos]); - } - } -+ if (i < n_bases) -+ { -+ /* Older GCC 3.[0-4].x would hang in the above loop, so -+ don't worry about backwards compatibility and -+ just DTRT. */ -+ memcpy (classes, saveclasses, sizeof (saveclasses)); -+ for (basenum = 0; basenum < n_bases; ++basenum) -+ { -+ tree binfo = TREE_VEC_ELT (bases, basenum); -+ int num; -+ int offset = tree_low_cst (BINFO_OFFSET (binfo), 0) * 8; -+ tree type = BINFO_TYPE (binfo); -+ -+ num = classify_argument (TYPE_MODE (type), -+ type, subclasses, -+ (offset + bit_offset) % 256); -+ if (!num) -+ return 0; -+ for (i = 0; i < num; i++) -+ { -+ int pos = (offset + (bit_offset % 64)) / 8 / 8; -+ classes[i + pos] = -+ merge_classes (subclasses[i], classes[i + pos]); -+ } -+ } -+ } - } - /* And now merge the fields of structure. */ - for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) -@@ -2116,8 +2157,17 @@ classify_argument (enum machine_mode mod - { - tree bases = TYPE_BINFO_BASETYPES (type); - int n_bases = TREE_VEC_LENGTH (bases); -- int i; -- -+ int i, basenum; -+ enum x86_64_reg_class saveclasses[MAX_CLASSES]; -+ bool seen[MAX_CLASSES]; -+ -+ /* PR target/18300: The following code mistakenly uses the same -+ iterator variable in both nested for loops. But to preserve -+ binary compatibility, do whatever this code used to do before -+ unless old GCC would hang in an infinite loop. In that case -+ use whatever GCC 4.0+ does. */ -+ memset (seen, 0, sizeof (seen)); -+ memcpy (saveclasses, classes, sizeof (saveclasses)); - for (i = 0; i < n_bases; ++i) - { - tree binfo = TREE_VEC_ELT (bases, i); -@@ -2125,6 +2175,12 @@ classify_argument (enum machine_mode mod - int offset = tree_low_cst (BINFO_OFFSET (binfo), 0) * 8; - tree type = BINFO_TYPE (binfo); - -+ if (i < MAX_CLASSES) -+ { -+ if (seen[i]) -+ break; -+ seen[i] = true; -+ } - num = classify_argument (TYPE_MODE (type), - type, subclasses, - (offset + (bit_offset % 64)) % 256); -@@ -2137,6 +2193,32 @@ classify_argument (enum machine_mode mod - merge_classes (subclasses[i], classes[i + pos]); - } - } -+ if (i < n_bases) -+ { -+ /* Older GCC 3.[0-4].x would hang in the above loop, so -+ don't worry about backwards compatibility and -+ just DTRT. */ -+ memcpy (classes, saveclasses, sizeof (saveclasses)); -+ for (basenum = 0; basenum < n_bases; ++basenum) -+ { -+ tree binfo = TREE_VEC_ELT (bases, basenum); -+ int num; -+ int offset = tree_low_cst (BINFO_OFFSET (binfo), 0) * 8; -+ tree type = BINFO_TYPE (binfo); -+ -+ num = classify_argument (TYPE_MODE (type), -+ type, subclasses, -+ (offset + (bit_offset % 64)) % 256); -+ if (!num) -+ return 0; -+ for (i = 0; i < num; i++) -+ { -+ int pos = (offset + (bit_offset % 64)) / 8 / 8; -+ classes[i + pos] = -+ merge_classes (subclasses[i], classes[i + pos]); -+ } -+ } -+ } - } - for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) - { ---- gcc/testsuite/g++.dg/other/infloop-1.C 1 Jan 1970 00:00:00 -0000 -+++ gcc/testsuite/g++.dg/other/infloop-1.C 13 Nov 2004 23:09:08 -0000 1.1 -@@ -0,0 +1,16 @@ -+// PR 18300: This sends old compilers into an infinite loop on x86_64 -+// Testcase and patch contributed by Zak Kipling -+ -+struct base1 { }; -+struct base2 { }; -+struct base3 { }; -+ -+struct derived : base1, base2, base3 { }; -+ -+void foo(derived); -+ -+int main() -+{ -+ foo(derived()); -+} -+ ---- gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C 1 Jan 1970 00:00:00 -0000 -+++ gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C 14 Dec 2004 02:15:55 -0000 1.1 -@@ -0,0 +1,20 @@ -+// PR c++/18925 -+// { dg-do compile { target ia64-*-linux* } } -+// { dg-options "-fPIC -fvisibility=hidden" } -+// { dg-final { scan-assembler-not "gprel" } } -+ -+class __attribute__ ((visibility("default"))) Type -+{ -+ private: -+ static long _staticTypeCount; -+ public: -+ Type() { _staticTypeCount++; } -+ ~Type(); -+}; -+ -+long Type::_staticTypeCount = 0; -+ -+Type::~Type() -+{ -+ _staticTypeCount--; -+} -2005-05-07 Richard Henderson - - PR target/21412 - * config/rs6000/rs6000.c (rs6000_emit_move): Look for tls addresses - with constant offsets. - -2004-07-11 Ulrich Weigand - - * config/s390/s390.c (legitimize_tls_address): Handle constant offsets - added to TLS symbol addresses. - -2004-07-06 Richard Henderson - - * config/i386/i386.c (legitimize_address): Handle CONST with TLS - operand. - (ix86_expand_move): Don't call legitimize_pic_address directly. - -2006-05-05 Jakub Jelinek - - * gcc.dg/tls/opt-12.c: New test. - ---- gcc/config/s390/s390.c (revision 84404) -+++ gcc/config/s390/s390.c (revision 84535) -@@ -2913,6 +2913,18 @@ legitimize_tls_address (rtx addr, rtx re - } - } - -+ else if (GET_CODE (addr) == CONST && GET_CODE (XEXP (addr, 0)) == PLUS -+ && GET_CODE (XEXP (XEXP (addr, 0), 1)) == CONST_INT) -+ { -+ new = XEXP (XEXP (addr, 0), 0); -+ if (GET_CODE (new) != SYMBOL_REF) -+ new = gen_rtx_CONST (Pmode, new); -+ -+ new = legitimize_tls_address (new, reg); -+ new = plus_constant (new, INTVAL (XEXP (XEXP (addr, 0), 1))); -+ new = force_operand (new, 0); -+ } -+ - else - abort (); /* for now ... */ - ---- gcc/config/i386/i386.c 2005-11-21 14:56:49.000000000 +0100 -+++ gcc/config/i386/i386.c 2006-05-05 11:21:54.000000000 +0200 -@@ -6604,6 +6604,13 @@ legitimize_address (rtx x, rtx oldx ATTR - log = tls_symbolic_operand (x, mode); - if (log) - return legitimize_tls_address (x, log, false); -+ if (GET_CODE (x) == CONST -+ && GET_CODE (XEXP (x, 0)) == PLUS -+ && (log = tls_symbolic_operand (XEXP (XEXP (x, 0), 0), Pmode))) -+ { -+ rtx t = legitimize_tls_address (XEXP (XEXP (x, 0), 0), log, false); -+ return gen_rtx_PLUS (Pmode, t, XEXP (XEXP (x, 0), 1)); -+ } - - if (flag_pic && SYMBOLIC_CONST (x)) - return legitimize_pic_address (x, 0); -@@ -8395,6 +8402,10 @@ ix86_expand_move (enum machine_mode mode - #else - if (GET_CODE (op0) == MEM) - op1 = force_reg (Pmode, op1); -+ else if (GET_CODE (op1) == CONST -+ && GET_CODE (XEXP (op1, 0)) == PLUS -+ && tls_symbolic_operand (XEXP (XEXP (op1, 0), 0), Pmode)) -+ op1 = legitimize_address (op1, op1, Pmode); - else - { - rtx temp = op0; ---- gcc/config/rs6000/rs6000.c (revision 99334) -+++ gcc/config/rs6000/rs6000.c (revision 99367) -@@ -4436,11 +4436,31 @@ rs6000_emit_move (rtx dest, rtx source, - - /* Recognize the case where operand[1] is a reference to thread-local - data and load its address to a register. */ -- if (GET_CODE (operands[1]) == SYMBOL_REF) -+ if (rs6000_tls_referenced_p (operands[1])) - { -- enum tls_model model = SYMBOL_REF_TLS_MODEL (operands[1]); -- if (model != 0) -- operands[1] = rs6000_legitimize_tls_address (operands[1], model); -+ enum tls_model model; -+ rtx tmp = operands[1]; -+ rtx addend = NULL; -+ -+ if (GET_CODE (tmp) == CONST && GET_CODE (XEXP (tmp, 0)) == PLUS) -+ { -+ addend = XEXP (XEXP (tmp, 0), 1); -+ tmp = XEXP (XEXP (tmp, 0), 0); -+ } -+ -+ if (GET_CODE (tmp) != SYMBOL_REF) -+ abort (); -+ model = SYMBOL_REF_TLS_MODEL (tmp); -+ if (model == 0) -+ abort (); -+ -+ tmp = rs6000_legitimize_tls_address (tmp, model); -+ if (addend) -+ { -+ tmp = gen_rtx_PLUS (mode, tmp, addend); -+ tmp = force_operand (tmp, operands[0]); -+ } -+ operands[1] = tmp; - } - - /* Handle the case where reload calls us with an invalid address. */ ---- gcc/testsuite/gcc.dg/tls/opt-9.c (revision 0) -+++ gcc/testsuite/gcc.dg/tls/opt-9.c (revision 99367) -@@ -0,0 +1,7 @@ -+/* PR 21412 */ -+/* { dg-do compile */ -+/* { dg-options "-O2 -fPIC" } */ -+ -+struct S { int x[10]; }; -+extern __thread struct S s; -+int *foo() { return &s.x[2]; } ---- gcc/testsuite/gcc.dg/tls/opt-12.c 2006-04-19 19:21:31.748476000 +0200 -+++ gcc/testsuite/gcc.dg/tls/opt-12.c 2006-05-05 11:01:33.000000000 +0200 -@@ -0,0 +1,16 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2" } */ -+/* { XXdgXX-require-effective-target tls } */ -+ -+__thread struct -+{ -+ int a; -+ char b[32]; -+} thr; -+ -+int -+main () -+{ -+ __builtin_strcpy (thr.b, "abcd"); -+ return 0; -+} -2005-07-22 Jakub Jelinek - - * src/sstream-inst.cc: Add .hidden directive for - streamsize basic_stringbuf<{char,wchar_t}>::showmanyc(). - * src/sstream-inst-showmanyc.cc: New file. - * src/Makefile.am (libstdc++_nonshared.la): Add new library. - * src/Makefile.in: Rebuilt. - * testsuite/lib/libstdc++.exp: Append -lstdc++_nonshared for - testsuite executable linking. - -2005-06-08 Benjamin Kosnik - - PR libstdc++/21955 - * include/std/std_sstream.h (basic_stringbuf::showmanyc): Add. - * testsuite/27_io/basic_streambuf/in_avail/char/1.cc: New, test - base class behavior. - * testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc: Same. - * testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc: New. - * testsuite/27_io/basic_stringbuf/in_avail/char/1.cc: Match - filebuf behavior. - * testsuite/27_io/basic_stringbuf/str/char/1.cc: Same. - ---- libstdc++-v3/src/sstream-inst.cc.jj 2003-07-11 10:28:13.000000000 +0200 -+++ libstdc++-v3/src/sstream-inst.cc 2005-07-21 17:46:08.000000000 +0200 -@@ -60,3 +60,8 @@ namespace std - template class basic_stringstream; - #endif - } // namespace std -+ -+#ifdef PIC -+__asm (".hidden _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv"); -+__asm (".hidden _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv"); -+#endif ---- libstdc++-v3/src/sstream-inst-showmanyc.cc.jj 2005-07-21 21:27:40.000000000 +0200 -+++ libstdc++-v3/src/sstream-inst-showmanyc.cc 2005-07-22 09:16:58.000000000 +0200 -@@ -0,0 +1,39 @@ -+// Explicit instantiation file. -+ -+// Copyright (C) 2005 -+// Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library 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. -+ -+// This library 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 library; see the file COPYING. If not, write to the Free -+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -+// USA. -+ -+// As a special exception, you may use this file as part of a free software -+// library without restriction. Specifically, if other files instantiate -+// templates or use macros or inline functions from this file, or you compile -+// this file and link it with other files to produce an executable, this -+// file 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 General Public License. -+ -+#include -+ -+namespace std -+{ -+ // These symbols are hidden in libstdc++.so, as it is undesirable to export -+ // @@GLIBCXX_3.4.6 -+ template streamsize basic_stringbuf, allocator >::showmanyc(); -+ template streamsize basic_stringbuf, allocator >::showmanyc(); -+} // namespace std ---- libstdc++-v3/src/Makefile.am.jj 2004-04-20 15:55:47.000000000 +0200 -+++ libstdc++-v3/src/Makefile.am 2005-07-22 09:00:32.000000000 +0200 -@@ -25,7 +25,7 @@ - include $(top_srcdir)/fragment.am - - # Cross compiler support. --toolexeclib_LTLIBRARIES = libstdc++.la -+toolexeclib_LTLIBRARIES = libstdc++.la libstdc++_nonshared.la - - # Symbol versioning for shared libraries. - if GLIBCXX_BUILD_VERSIONED_SHLIB -@@ -150,6 +150,11 @@ libstdc___la_DEPENDENCIES = ${version_de - libstdc___la_LDFLAGS = \ - -version-info $(libtool_VERSION) ${version_arg} -lm - -+libstdc___nonshared_la_SOURCES = \ -+ sstream-inst-showmanyc.cc -+libstdc___nonshared_la_LIBADD = -+libstdc___nonshared_la_DEPENDENCIES = $(libstdc___nonshared_la_LIBADD) -+libstdc___nonshared_la_LDFLAGS = -static - - # Use special rules for the deprecated source files so that they find - # deprecated include files. -@@ -159,6 +164,14 @@ strstream.lo: strstream.cc - strstream.o: strstream.cc - $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $< - -+# Use special rules for libstdc++_nonshared.la files, as -prefer-pic -+# doesn't seem to work for some reason. -+sstream-inst-showmanyc.lo: sstream-inst-showmanyc.cc -+ $(LTCXXCOMPILE) -c $< \ -+ && cp -f .libs/sstream-inst-showmanyc.o sstream-inst-showmanyc.o -+sstream-inst-showmanyc.o: sstream-inst-showmanyc.cc -+ $(CXXCOMPILE) -fPIC -DPIC -c $< -+ - # Use special rules for the concept-checking instantiations so that all - # the generated template functions are also instantiated. Force the checks - # to be on so that the instantiations are actually seen. ---- libstdc++-v3/src/Makefile.in.jj 2004-04-20 15:55:47.000000000 +0200 -+++ libstdc++-v3/src/Makefile.in 2005-07-22 09:06:15.000000000 +0200 -@@ -221,7 +221,7 @@ WARN_CXXFLAGS = \ - AM_CPPFLAGS = $(GLIBCXX_INCLUDES) - - # Cross compiler support. --toolexeclib_LTLIBRARIES = libstdc++.la -+toolexeclib_LTLIBRARIES = libstdc++.la libstdc++_nonshared.la - - # Symbol versioning for shared libraries. - @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@version_arg = -Wl,--version-script=libstdc++-symbol.ver -@@ -308,6 +308,13 @@ libstdc___la_LDFLAGS = \ - -version-info $(libtool_VERSION) ${version_arg} -lm - - -+libstdc___nonshared_la_SOURCES = \ -+ sstream-inst-showmanyc.cc -+ -+libstdc___nonshared_la_LIBADD = -+libstdc___nonshared_la_DEPENDENCIES = $(libstdc___nonshared_la_LIBADD) -+libstdc___nonshared_la_LDFLAGS = -static -+ - # Use special rules for the deprecated source files so that they find - # deprecated include files. - GLIBCXX_INCLUDE_DIR = $(glibcxx_builddir)/include -@@ -379,6 +386,8 @@ am__objects_3 = allocator.lo codecvt.lo - $(am__objects_1) $(am__objects_2) - am_libstdc___la_OBJECTS = $(am__objects_3) - libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS) -+am_libstdc___nonshared_la_OBJECTS = sstream-inst-showmanyc.lo -+libstdc___nonshared_la_OBJECTS = $(am_libstdc___nonshared_la_OBJECTS) - - DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) - depcomp = -@@ -386,10 +395,10 @@ am__depfiles_maybe = - CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) - CXXLD = $(CXX) --DIST_SOURCES = $(libstdc___la_SOURCES) -+DIST_SOURCES = $(libstdc___la_SOURCES) $(libstdc___nonshared_la_SOURCES) - DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/fragment.am \ - Makefile.am --SOURCES = $(libstdc___la_SOURCES) -+SOURCES = $(libstdc___la_SOURCES) $(libstdc___nonshared_la_SOURCES) - - all: all-am - -@@ -430,6 +439,8 @@ clean-toolexeclibLTLIBRARIES: - done - libstdc++.la: $(libstdc___la_OBJECTS) $(libstdc___la_DEPENDENCIES) - $(CXXLINK) -rpath $(toolexeclibdir) $(libstdc___la_LDFLAGS) $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD) $(LIBS) -+libstdc++_nonshared.la: $(libstdc___nonshared_la_OBJECTS) $(libstdc___nonshared_la_DEPENDENCIES) -+ $(CXXLINK) -rpath $(toolexeclibdir) $(libstdc___nonshared_la_LDFLAGS) $(libstdc___nonshared_la_OBJECTS) $(libstdc___nonshared_la_LIBADD) $(LIBS) - - mostlyclean-compile: - -rm -f *.$(OBJEXT) core *.core -@@ -674,6 +685,14 @@ strstream.lo: strstream.cc - strstream.o: strstream.cc - $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $< - -+# Use special rules for libstdc++_nonshared.la files, as -prefer-pic -+# doesn't seem to work for some reason. -+sstream-inst-showmanyc.lo: sstream-inst-showmanyc.cc -+ $(LTCXXCOMPILE) -c $< \ -+ && cp -f .libs/sstream-inst-showmanyc.o sstream-inst-showmanyc.o -+sstream-inst-showmanyc.o: sstream-inst-showmanyc.cc -+ $(CXXCOMPILE) -fPIC -DPIC -c $< -+ - # Use special rules for the concept-checking instantiations so that all - # the generated template functions are also instantiated. Force the checks - # to be on so that the instantiations are actually seen. ---- libstdc++-v3/include/std/std_sstream.h.jj 2004-10-04 14:58:25.000000000 +0200 -+++ libstdc++-v3/include/std/std_sstream.h 2005-07-21 17:17:16.000000000 +0200 -@@ -185,6 +185,18 @@ namespace std - _M_sync(const_cast(_M_string.data()), 0, __len); - } - -+ virtual streamsize -+ showmanyc() -+ { -+ streamsize __ret = -1; -+ if (_M_mode & ios_base::in) -+ { -+ _M_update_egptr(); -+ __ret = this->egptr() - this->gptr(); -+ } -+ return __ret; -+ } -+ - // [documentation is inherited] - virtual int_type - underflow(); ---- libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc.jj 2003-10-01 12:12:11.000000000 +0200 -+++ libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc 2005-07-22 01:22:15.000000000 +0200 -@@ -45,7 +45,7 @@ void test03() - std::streamsize d1 = strb_01.in_avail(); - std::streamsize d2 = strb_03.in_avail(); - VERIFY( d1 ); // non-zero -- VERIFY( !d2 ); // zero, cuz ios_base::out -+ VERIFY( d2 == -1 ); // -1, cuz ios_base::out - VERIFY( d1 != d2 ); //these should be the same - VERIFY( static_cast(str_01.length()) == d1 ); - VERIFY( strb_01.str() == strb_03.str() ); //ditto ---- libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/1.cc.jj 2003-10-01 12:12:10.000000000 +0200 -+++ libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/1.cc 2005-07-22 01:22:04.000000000 +0200 -@@ -49,8 +49,8 @@ void test04() - VERIFY( strmof_1 == static_cast(str_01.length()) ); - VERIFY( strmof_2 == static_cast(str_02.length()) ); - strmof_1 = strb_03.in_avail(); -- // zero cuz write-only, or eof()? zero, from showmany -- VERIFY( strmof_1 == 0 ); -+ // zero cuz write-only, or eof() to match basic_filebuf -+ VERIFY( strmof_1 == -1 ); - } - - int main() ---- libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc.jj 2005-07-22 01:22:04.000000000 +0200 -+++ libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc 2005-07-22 01:22:04.000000000 +0200 -@@ -0,0 +1,54 @@ -+// 2005-06-07 Benjamin Kosnik -+ -+// Copyright (C) 2005 -+// Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library 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. -+ -+// This library 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 library; see the file COPYING. If not, write to the Free -+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -+// USA. -+ -+#include -+#include -+#include -+ -+double -+test_stringstream() -+{ -+ double result; -+ char* source = "1918"; -+ std::stringstream s; -+ s << source; -+ -+ std::string tmp = s.str(); -+ std::streambuf* sb = s.rdbuf(); -+ int i = sb->in_avail(); -+ -+ if (i) -+ { -+ s >> result; -+ } -+ else -+ { -+ throw std::runtime_error("conversion failed"); -+ } -+ return result; -+} -+ -+ -+int main () -+{ -+ test_stringstream(); -+ return 0; -+} ---- libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/char/1.cc.jj 2005-07-22 01:21:41.000000000 +0200 -+++ libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/char/1.cc 2005-07-22 01:21:41.000000000 +0200 -@@ -0,0 +1,54 @@ -+// 2005-06-07 Benjamin Kosnik -+ -+// Copyright (C) 2005 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library 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. -+ -+// This library 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 library; see the file COPYING. If not, write to the Free -+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -+// USA. -+ -+// 27.8.1.4 Overridden virtual functions -+ -+#include -+#include -+ -+typedef std::basic_streambuf streambuf_type; -+ -+struct testbuf : streambuf_type -+{ -+ testbuf() { } -+}; -+ -+void test05() -+{ -+ typedef streambuf_type::int_type int_type; -+ typedef streambuf_type::traits_type traits_type; -+ typedef streambuf_type::pos_type pos_type; -+ typedef streambuf_type::off_type off_type; -+ typedef size_t size_type; -+ -+ bool test __attribute__((unused)) = true; -+ std::streamoff strmof_1, strmof_2; -+ testbuf sb01; -+ -+ // int in_avail() -+ strmof_1 = sb01.in_avail(); -+ VERIFY( strmof_1 == 0 ); -+} -+ -+int main() -+{ -+ test05(); -+ return 0; -+} ---- libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc.jj 2005-07-22 01:21:41.000000000 +0200 -+++ libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc 2005-07-22 01:21:41.000000000 +0200 -@@ -0,0 +1,54 @@ -+// 2005-06-07 Benjamin Kosnik -+ -+// Copyright (C) 2005 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library 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. -+ -+// This library 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 library; see the file COPYING. If not, write to the Free -+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -+// USA. -+ -+// 27.8.1.4 Overridden virtual functions -+ -+#include -+#include -+ -+typedef std::basic_streambuf streambuf_type; -+ -+struct testbuf : streambuf_type -+{ -+ testbuf() { } -+}; -+ -+void test05() -+{ -+ typedef streambuf_type::int_type int_type; -+ typedef streambuf_type::traits_type traits_type; -+ typedef streambuf_type::pos_type pos_type; -+ typedef streambuf_type::off_type off_type; -+ typedef size_t size_type; -+ -+ bool test __attribute__((unused)) = true; -+ std::streamoff strmof_1, strmof_2; -+ testbuf sb01; -+ -+ // int in_avail() -+ strmof_1 = sb01.in_avail(); -+ VERIFY( strmof_1 == 0 ); -+} -+ -+int main() -+{ -+ test05(); -+ return 0; -+} ---- libstdc++-v3/libsupc++/eh_globals.cc.jj 2005-11-21 14:43:32.000000000 +0100 -+++ libstdc++-v3/libsupc++/eh_globals.cc 2006-04-21 15:38:55.000000000 +0200 -@@ -36,6 +36,26 @@ - - using namespace __cxxabiv1; - -+#if 1 -+namespace __gnu_internal -+{ -+ __cxxabiv1::__cxa_eh_globals* -+ get_global() throw() -+ { -+ static __thread __cxxabiv1::__cxa_eh_globals global __attribute__((tls_model ("initial-exec"))); -+ return &global; -+ } -+} -+ -+extern "C" __cxa_eh_globals* -+__cxxabiv1::__cxa_get_globals_fast() throw() -+{ return __gnu_internal::get_global(); } -+ -+extern "C" __cxa_eh_globals* -+__cxxabiv1::__cxa_get_globals() throw() -+{ return __gnu_internal::get_global(); } -+ -+#else - - // Single-threaded fallback buffer. - static __cxa_eh_globals globals_static; -@@ -125,3 +145,4 @@ __cxa_get_globals () throw() - return &globals_static; - #endif - } -+#endif -2005-11-23 Paolo Carlini - - PR libstdc++/24975 (basic_string) - * include/bits/basic_string.h (_Rep::_S_empty_rep): Avoid - strict-aliasing warnings. - -2005-11-22 Paolo Carlini - - PR libstdc++/24975 - * include/bits/stl_set.h (insert(iterator, const value_type&), - erase(iterator), erase(iterator, iterator)): Don't break aliasing - rules casting to _Rep_iterator&, forward to _Rb_tree facilities. - * include/bits/stl_multiset.h (insert(iterator, const value_type&), - erase(iterator), erase(iterator, iterator)): Likewise. - * include/bits/stl_tree.h (_Rb_tree<>::_M_insert(_Const_Base_ptr, - _Const_Base_ptr, const value_type&), insert_unique(const_iterator, - const value_type&), insert_equal(const_iterator, const value_type&), - erase(const_iterator), erase(const_iterator, const_iterator)): New, - _Rb_tree<>::const_iterator counterparts of existing facilities. - ---- libstdc++-v3/include/bits/basic_string.h.jj 2007-02-23 21:29:15.000000000 +0100 -+++ libstdc++-v3/include/bits/basic_string.h 2007-07-19 12:11:40.000000000 +0200 -@@ -175,7 +175,16 @@ namespace std - - static _Rep& - _S_empty_rep() -- { return *reinterpret_cast<_Rep*>(&_S_empty_rep_storage); } -+ { -+#if __GNUC__ >= 4 -+ // Work around type-punning warning in g++4. _S_empty_rep_storage -+ // is never modified, so type-punning is ok. -+ void* __p = reinterpret_cast(&_S_empty_rep_storage); -+ return *reinterpret_cast<_Rep*>(__p); -+#else -+ return *reinterpret_cast<_Rep*>(&_S_empty_rep_storage); -+#endif -+ } - - bool - _M_is_leaked() const ---- libstdc++-v3/include/bits/stl_tree.h.jj 2007-02-23 21:29:15.000000000 +0100 -+++ libstdc++-v3/include/bits/stl_tree.h 2007-07-19 13:18:28.000000000 +0200 -@@ -532,6 +532,12 @@ namespace std - iterator - _M_insert(_Base_ptr __x, _Base_ptr __y, const value_type& __v); - -+#if __GNUC__ >= 4 -+ const_iterator -+ _M_insert(_Const_Base_ptr __x, _Const_Base_ptr __y, -+ const value_type& __v); -+#endif -+ - _Link_type - _M_copy(_Const_Link_type __x, _Link_type __p); - -@@ -631,9 +637,19 @@ namespace std - iterator - insert_unique(iterator __position, const value_type& __x); - -+#if __GNUC__ >= 4 -+ const_iterator -+ insert_unique(const_iterator __position, const value_type& __x); -+#endif -+ - iterator - insert_equal(iterator __position, const value_type& __x); - -+#if __GNUC__ >= 4 -+ const_iterator -+ insert_equal(const_iterator __position, const value_type& __x); -+#endif -+ - template - void - insert_unique(_InputIterator __first, _InputIterator __last); -@@ -645,12 +661,22 @@ namespace std - void - erase(iterator __position); - -+#if __GNUC__ >= 4 -+ void -+ erase(const_iterator __position); -+#endif -+ - size_type - erase(const key_type& __x); - - void - erase(iterator __first, iterator __last); - -+#if __GNUC__ >= 4 -+ void -+ erase(const_iterator __first, const_iterator __last); -+#endif -+ - void - erase(const key_type* __first, const key_type* __last); - -@@ -793,6 +819,28 @@ namespace std - return iterator(__z); - } - -+#if __GNUC__ >= 4 -+ template -+ typename _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::const_iterator -+ _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>:: -+ _M_insert(_Const_Base_ptr __x, _Const_Base_ptr __p, const _Val& __v) -+ { -+ _Link_type __z = _M_create_node(__v); -+ bool __insert_left; -+ -+ __insert_left = __x != 0 || __p == _M_end() -+ || _M_impl._M_key_compare(_KeyOfValue()(__v), -+ _S_key(__p)); -+ -+ _Rb_tree_insert_and_rebalance(__insert_left, __z, -+ const_cast<_Base_ptr>(__p), -+ this->_M_impl._M_header); -+ ++_M_impl._M_node_count; -+ return const_iterator(__z); -+ } -+#endif -+ - template - typename _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::iterator -@@ -928,6 +976,54 @@ namespace std - } - } - -+#if __GNUC__ >= 4 -+ template -+ typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator -+ _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -+ insert_unique(const_iterator __position, const _Val& __v) -+ { -+ if (__position._M_node == _M_leftmost()) -+ { -+ // begin() -+ if (size() > 0 -+ && _M_impl._M_key_compare(_KeyOfValue()(__v), -+ _S_key(__position._M_node))) -+ return _M_insert(__position._M_node, __position._M_node, __v); -+ // First argument just needs to be non-null. -+ else -+ return const_iterator(insert_unique(__v).first); -+ } -+ else if (__position._M_node == _M_end()) -+ { -+ // end() -+ if (_M_impl._M_key_compare(_S_key(_M_rightmost()), -+ _KeyOfValue()(__v))) -+ return _M_insert(0, _M_rightmost(), __v); -+ else -+ return const_iterator(insert_unique(__v).first); -+ } -+ else -+ { -+ const_iterator __before = __position; -+ --__before; -+ if (_M_impl._M_key_compare(_S_key(__before._M_node), -+ _KeyOfValue()(__v)) -+ && _M_impl._M_key_compare(_KeyOfValue()(__v), -+ _S_key(__position._M_node))) -+ { -+ if (_S_right(__before._M_node) == 0) -+ return _M_insert(0, __before._M_node, __v); -+ else -+ return _M_insert(__position._M_node, __position._M_node, __v); -+ // First argument just needs to be non-null. -+ } -+ else -+ return const_iterator(insert_unique(__v).first); -+ } -+ } -+#endif -+ - template - typename _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::iterator -@@ -974,6 +1070,54 @@ namespace std - } - } - -+#if __GNUC__ >= 4 -+ template -+ typename _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::const_iterator -+ _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>:: -+ insert_equal(const_iterator __position, const _Val& __v) -+ { -+ if (__position._M_node == _M_leftmost()) -+ { -+ // begin() -+ if (size() > 0 -+ && !_M_impl._M_key_compare(_S_key(__position._M_node), -+ _KeyOfValue()(__v))) -+ return _M_insert(__position._M_node, __position._M_node, __v); -+ // first argument just needs to be non-null -+ else -+ return const_iterator(insert_equal(__v)); -+ } -+ else if (__position._M_node == _M_end()) -+ { -+ // end() -+ if (!_M_impl._M_key_compare(_KeyOfValue()(__v), -+ _S_key(_M_rightmost()))) -+ return _M_insert(0, _M_rightmost(), __v); -+ else -+ return const_iterator(insert_equal(__v)); -+ } -+ else -+ { -+ const_iterator __before = __position; -+ --__before; -+ if (!_M_impl._M_key_compare(_KeyOfValue()(__v), -+ _S_key(__before._M_node)) -+ && !_M_impl._M_key_compare(_S_key(__position._M_node), -+ _KeyOfValue()(__v))) -+ { -+ if (_S_right(__before._M_node) == 0) -+ return _M_insert(0, __before._M_node, __v); -+ else -+ return _M_insert(__position._M_node, __position._M_node, __v); -+ // First argument just needs to be non-null. -+ } -+ else -+ return const_iterator(insert_equal(__v)); -+ } -+ } -+#endif -+ - template - template -@@ -1008,6 +1152,20 @@ namespace std - --_M_impl._M_node_count; - } - -+#if __GNUC__ >= 4 -+ template -+ inline void -+ _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::erase(const_iterator __position) -+ { -+ _Link_type __y = -+ static_cast<_Link_type>(_Rb_tree_rebalance_for_erase(const_cast<_Base_ptr>(__position._M_node), -+ this->_M_impl._M_header)); -+ destroy_node(__y); -+ --_M_impl._M_node_count; -+ } -+#endif -+ - template - typename _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::size_type -@@ -1082,6 +1240,20 @@ namespace std - while (__first != __last) erase(__first++); - } - -+#if __GNUC__ >= 4 -+ template -+ void -+ _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>:: -+ erase(const_iterator __first, const_iterator __last) -+ { -+ if (__first == begin() && __last == end()) -+ clear(); -+ else -+ while (__first != __last) erase(__first++); -+ } -+#endif -+ - template - void ---- libstdc++-v3/include/bits/stl_multiset.h.jj 2007-02-23 21:29:15.000000000 +0100 -+++ libstdc++-v3/include/bits/stl_multiset.h 2007-07-19 12:30:47.000000000 +0200 -@@ -328,8 +328,12 @@ namespace _GLIBCXX_STD - iterator - insert(iterator __position, const value_type& __x) - { -+#if __GNUC__ >= 4 -+ return _M_t.insert_equal(__position, __x); -+#else - typedef typename _Rep_type::iterator _Rep_iterator; - return _M_t.insert_equal((_Rep_iterator&)__position, __x); -+#endif - } - - /** -@@ -358,8 +362,12 @@ namespace _GLIBCXX_STD - void - erase(iterator __position) - { -+#if __GNUC__ >= 4 -+ _M_t.erase(__position); -+#else - typedef typename _Rep_type::iterator _Rep_iterator; - _M_t.erase((_Rep_iterator&)__position); -+#endif - } - - /** -@@ -391,8 +399,12 @@ namespace _GLIBCXX_STD - void - erase(iterator __first, iterator __last) - { -+#if __GNUC__ >= 4 -+ _M_t.erase(__first, __last); -+#else - typedef typename _Rep_type::iterator _Rep_iterator; - _M_t.erase((_Rep_iterator&)__first, (_Rep_iterator&)__last); -+#endif - } - - /** ---- libstdc++-v3/include/bits/stl_set.h.jj 2007-02-23 21:29:15.000000000 +0100 -+++ libstdc++-v3/include/bits/stl_set.h 2007-07-19 12:23:57.000000000 +0200 -@@ -337,8 +337,12 @@ namespace _GLIBCXX_STD - iterator - insert(iterator __position, const value_type& __x) - { -+#if __GNUC__ >= 4 -+ return _M_t.insert_unique(__position, __x); -+#else - typedef typename _Rep_type::iterator _Rep_iterator; - return _M_t.insert_unique((_Rep_iterator&)__position, __x); -+#endif - } - - /** -@@ -366,8 +370,12 @@ namespace _GLIBCXX_STD - void - erase(iterator __position) - { -+#if __GNUC__ >= 4 -+ _M_t.erase(__position); -+#else - typedef typename _Rep_type::iterator _Rep_iterator; - _M_t.erase((_Rep_iterator&)__position); -+#endif - } - - /** -@@ -398,8 +406,12 @@ namespace _GLIBCXX_STD - void - erase(iterator __first, iterator __last) - { -+#if __GNUC__ >= 4 -+ _M_t.erase(__first, __last); -+#else - typedef typename _Rep_type::iterator _Rep_iterator; - _M_t.erase((_Rep_iterator&)__first, (_Rep_iterator&)__last); -+#endif - } - - /** -2006-02-27 Jakub Jelinek - - PR other/26208 - * unwind-dw2.c (struct _Unwind_Context): Add signal_frame field. - (_Unwind_FrameState): Add signal_frame field. - (extract_cie_info): Handle S flag in augmentation string. - (execute_cfa_program): If context->signal_frame, execute also - fs->pc == context->ra instructions. - (uw_frame_state_for): If context->signal_frame, don't subtract one - from context->ra to find FDE. - (uw_update_context_1): Set context->signal_frame to - fs->signal_frame. - (_Unwind_GetIPInfo): New function. - * unwind-c.c (PERSONALITY_FUNCTION): Use _Unwind_GetIPInfo instead - of _Unwind_GetIP. - * unwind-sjlj.c (_Unwind_GetIPInfo): New function. - * unwind.h (_Unwind_GetIPInfo): New prototype. - * unwind-compat.c (_Unwind_GetIPInfo): New function. - * libgcc-std.ver (_Unwind_GetIPInfo): Export @@GCC_4.2.0. - * config/ia64/unwind-ia64.c (_Unwind_GetIPInfo): New function. - * config/i386/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Set - (FS)->signal_frame. - * config/i386/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Likewise. - * config/rs6000/linux-unwind.h (MD_FALLBACK_FRAME_STATE_FOR): Likewise. - * config/s390/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Likewise. - - * libsupc++/eh_personality.cc (PERSONALITY_FUNCTION): Use - _Unwind_GetIPInfo instead of _Unwind_GetIP. - - * exception.cc (PERSONALITY_FUNCTION): Use _Unwind_GetIPInfo instead - of _Unwind_GetIP. - * include/i386-signal.h (MAKE_THROW_FRAME): Change into empty macro. - (HANDLE_DIVIDE_OVERFLOW): Don't adjust _res->eip if falling through - to throw. - * include/x86_64-signal.h (MAKE_THROW_FRAME): Change into empty - macro. - * include/powerpc-signal.h (MAKE_THROW_FRAME): Change into empty - macro. - ---- libjava/exception.cc.jj 2005-11-21 14:47:25.000000000 +0100 -+++ libjava/exception.cc 2006-04-21 14:00:19.000000000 +0200 -@@ -199,6 +199,7 @@ PERSONALITY_FUNCTION (int version, - int handler_switch_value; - bool saw_cleanup; - bool saw_handler; -+ int ip_before_insn = 0; - - - // Interface version check. -@@ -214,10 +215,10 @@ PERSONALITY_FUNCTION (int version, - goto install_context; - } - -- // FIXME: In Phase 1, record _Unwind_GetIP in xh->obj as a part of -+ // FIXME: In Phase 1, record _Unwind_GetIPInfo in xh->obj as a part of - // the stack trace for this exception. This will only collect Java - // frames, but perhaps that is acceptable. -- // FIXME2: _Unwind_GetIP is nonsensical for SJLJ, being a call-site -+ // FIXME2: _Unwind_GetIPInfo is nonsensical for SJLJ, being a call-site - // index instead of a PC value. We could perhaps arrange for - // _Unwind_GetRegionStart to return context->fc->jbuf[1], which - // is the address of the handler label for __builtin_longjmp, but -@@ -232,7 +233,9 @@ PERSONALITY_FUNCTION (int version, - - // Parse the LSDA header. - p = parse_lsda_header (context, language_specific_data, &info); -- ip = _Unwind_GetIP (context) - 1; -+ ip = _Unwind_GetIPInfo (context, &ip_before_insn); -+ if (! ip_before_insn) -+ --ip; - landing_pad = 0; - action_record = 0; - handler_switch_value = 0; ---- libjava/include/i386-signal.h.jj 2005-11-21 14:47:15.000000000 +0100 -+++ libjava/include/i386-signal.h 2006-04-21 14:57:55.000000000 +0200 -@@ -22,19 +22,7 @@ details. */ - #define SIGNAL_HANDLER(_name) \ - static void _name (int _dummy) - --#define MAKE_THROW_FRAME(_exception) \ --do \ --{ \ -- void **_p = (void **)&_dummy; \ -- struct sigcontext_struct *_regs = (struct sigcontext_struct *)++_p; \ -- \ -- /* Advance the program counter so that it is after the start of the \ -- instruction: the x86 exception handler expects \ -- the PC to point to the instruction after a call. */ \ -- _regs->eip += 2; \ -- \ --} \ --while (0) -+#define MAKE_THROW_FRAME(_exception) - - #define HANDLE_DIVIDE_OVERFLOW \ - do \ -@@ -84,14 +72,6 @@ do \ - _regs->eip = (unsigned long)_eip; \ - return; \ - } \ -- else \ -- { \ -- /* Advance the program counter so that it is after the start \ -- of the instruction: this is because the x86 exception \ -- handler expects the PC to point to the instruction after a \ -- call. */ \ -- _regs->eip += 2; \ -- } \ - } \ - } \ - while (0) ---- libjava/include/x86_64-signal.h.jj 2006-04-20 17:02:27.000000000 +0200 -+++ libjava/include/x86_64-signal.h 2006-04-21 14:00:19.000000000 +0200 -@@ -34,17 +34,7 @@ extern "C" - }; - } - --#define MAKE_THROW_FRAME(_exception) \ --do \ --{ \ -- /* Advance the program counter so that it is after the start of the \ -- instruction: the x86_64 exception handler expects \ -- the PC to point to the instruction after a call. */ \ -- struct ucontext *_uc = (struct ucontext *)_p; \ -- volatile struct sigcontext *_sc = (struct sigcontext *) &_uc->uc_mcontext; \ -- _sc->rip += 2; \ --} \ --while (0) -+#define MAKE_THROW_FRAME(_exception) - - #define RESTORE(name, syscall) RESTORE2 (name, syscall) - #define RESTORE2(name, syscall) \ ---- libjava/include/powerpc-signal.h.jj 2005-11-21 14:47:15.000000000 +0100 -+++ libjava/include/powerpc-signal.h 2006-04-21 14:00:19.000000000 +0200 -@@ -22,18 +22,12 @@ details. */ - #define SIGNAL_HANDLER(_name) \ - static void _name (int /* _signal */, struct sigcontext *_sc) - --/* PPC either leaves PC pointing at a faulting instruction or the -- following instruction, depending on the signal. SEGV always does -- the former, so we adjust the saved PC to point to the following -- instruction. This is what the handler in libgcc expects. */ -+/* MD_FALBACK_FRAME_STATE_FOR takes care of special casing PC -+ before the faulting instruction, so we don't need to do anything -+ here. */ -+ -+#define MAKE_THROW_FRAME(_exception) - --#define MAKE_THROW_FRAME(_exception) \ --do \ -- { \ -- _sc->regs->nip += 4; \ -- } \ --while (0) -- - /* For an explanation why we cannot simply use sigaction to - install the handlers, see i386-signal.h. */ - ---- libstdc++-v3/libsupc++/eh_personality.cc.jj 2005-11-21 14:43:32.000000000 +0100 -+++ libstdc++-v3/libsupc++/eh_personality.cc 2006-04-21 14:24:34.000000000 +0200 -@@ -201,6 +201,7 @@ PERSONALITY_FUNCTION (int version, - _Unwind_Ptr landing_pad, ip; - int handler_switch_value; - void *thrown_ptr = xh + 1; -+ int ip_before_insn = 0; - - // Interface version check. - if (version != 1) -@@ -227,7 +228,9 @@ PERSONALITY_FUNCTION (int version, - // Parse the LSDA header. - p = parse_lsda_header (context, language_specific_data, &info); - info.ttype_base = base_of_encoded_value (info.ttype_encoding, context); -- ip = _Unwind_GetIP (context) - 1; -+ ip = _Unwind_GetIPInfo (context, &ip_before_insn); -+ if (! ip_before_insn) -+ --ip; - landing_pad = 0; - action_record = 0; - handler_switch_value = 0; ---- gcc/libgcc-std.ver.jj 2005-11-21 14:43:21.000000000 +0100 -+++ gcc/libgcc-std.ver 2006-04-21 14:02:13.000000000 +0200 -@@ -234,3 +234,8 @@ GCC_3.4.4 { - __negvti2 - __subvti3 - } -+ -+%inherit GCC_4.2.0 GCC_3.4.4 -+GCC_4.2.0 { -+ _Unwind_GetIPInfo -+} ---- gcc/unwind-c.c.jj 2005-11-21 14:43:20.000000000 +0100 -+++ gcc/unwind-c.c 2006-04-21 14:00:08.000000000 +0200 -@@ -102,6 +102,7 @@ PERSONALITY_FUNCTION (int version, - lsda_header_info info; - const unsigned char *language_specific_data, *p, *action_record; - _Unwind_Ptr landing_pad, ip; -+ int ip_before_insn = 0; - - if (version != 1) - return _URC_FATAL_PHASE1_ERROR; -@@ -119,7 +120,9 @@ PERSONALITY_FUNCTION (int version, - - /* Parse the LSDA header. */ - p = parse_lsda_header (context, language_specific_data, &info); -- ip = _Unwind_GetIP (context) - 1; -+ ip = _Unwind_GetIPInfo (context, &ip_before_insn); -+ if (! ip_before_insn) -+ --ip; - landing_pad = 0; - - #ifdef __USING_SJLJ_EXCEPTIONS__ ---- gcc/config/s390/linux.h.jj 2005-11-21 14:40:55.000000000 +0100 -+++ gcc/config/s390/linux.h 2006-04-21 14:15:46.000000000 +0200 -@@ -113,6 +113,7 @@ Software Foundation, 59 Temple Place - S - } __attribute__ ((__aligned__ (8))) sigregs_; \ - \ - sigregs_ *regs_; \ -+ int *signo_ = NULL; \ - \ - /* svc $__NR_sigreturn or svc $__NR_rt_sigreturn */ \ - if (pc_[0] != 0x0a || (pc_[1] != 119 && pc_[1] != 173)) \ -@@ -133,6 +134,7 @@ Software Foundation, 59 Temple Place - S - } *uc_ = (CONTEXT)->cfa + 8 + 128; \ - \ - regs_ = &uc_->uc_mcontext; \ -+ signo_ = (CONTEXT)->cfa + sizeof(long); \ - } \ - \ - /* Old-style RT frame and all non-RT frames: \ -@@ -141,6 +143,11 @@ Software Foundation, 59 Temple Place - S - else \ - { \ - regs_ = *(sigregs_ **)((CONTEXT)->cfa + 8); \ -+ /* Recent kernels store the signal number immediately after \ -+ the sigregs; old kernels have the return trampoline at \ -+ this location. */ \ -+ if ((void *)(regs_ + 1) != (CONTEXT)->ra) \ -+ signo_ = (int *)(regs_ + 1); \ - } \ - \ - new_cfa_ = regs_->gprs[15] + 16*sizeof(long) + 32; \ -@@ -167,6 +174,12 @@ Software Foundation, 59 Temple Place - S - (FS)->regs.reg[32].loc.offset = (long)®s_->psw_addr - new_cfa_; \ - (FS)->retaddr_column = 32; \ - \ -+ /* SIGILL, SIGFPE and SIGTRAP are delivered with psw_addr \ -+ after the faulting instruction rather than before it. \ -+ Don't set FS->signal_frame in that case. */ \ -+ if (!signo_ || (*signo_ != 4 && *signo_ != 5 && *signo_ != 8)) \ -+ (FS)->signal_frame = 1; \ -+ \ - goto SUCCESS; \ - } while (0) - ---- gcc/config/i386/linux.h.jj 2005-11-21 14:41:07.000000000 +0100 -+++ gcc/config/i386/linux.h 2006-04-21 14:18:05.000000000 +0200 -@@ -268,6 +268,7 @@ Boston, MA 02111-1307, USA. */ - (FS)->regs.reg[8].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[8].loc.offset = (long)&sc_->eip - new_cfa_; \ - (FS)->retaddr_column = 8; \ -+ (FS)->signal_frame = 1; \ - goto SUCCESS; \ - } while (0) - #endif /* not USE_GNULIBC_1 */ ---- gcc/config/i386/linux64.h.jj 2005-11-21 14:41:07.000000000 +0100 -+++ gcc/config/i386/linux64.h 2006-04-21 14:18:45.000000000 +0200 -@@ -136,6 +136,7 @@ Boston, MA 02111-1307, USA. */ - (FS)->regs.reg[16].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[16].loc.offset = (long)&sc_->rip - new_cfa_; \ - (FS)->retaddr_column = 16; \ -+ (FS)->signal_frame = 1; \ - goto SUCCESS; \ - } while (0) - #else /* ifdef __x86_64__ */ -@@ -190,6 +191,7 @@ Boston, MA 02111-1307, USA. */ - (FS)->regs.reg[8].how = REG_SAVED_OFFSET; \ - (FS)->regs.reg[8].loc.offset = (long)&sc_->eip - new_cfa_; \ - (FS)->retaddr_column = 8; \ -+ (FS)->signal_frame = 1; \ - goto SUCCESS; \ - } while (0) - #endif /* ifdef __x86_64__ */ ---- gcc/config/ia64/unwind-ia64.c.jj 2005-11-21 14:40:57.000000000 +0100 -+++ gcc/config/ia64/unwind-ia64.c 2006-04-21 14:00:11.000000000 +0200 -@@ -1748,6 +1748,13 @@ _Unwind_GetIP (struct _Unwind_Context *c - return context->rp; - } - -+inline _Unwind_Ptr -+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) -+{ -+ *ip_before_insn = 0; -+ return context->rp; -+} -+ - /* Overwrite the return address for CONTEXT with VAL. */ - - inline void ---- gcc/unwind-compat.c.jj 2005-11-21 14:43:20.000000000 +0100 -+++ gcc/unwind-compat.c 2006-04-21 13:59:59.000000000 +0200 -@@ -134,6 +134,13 @@ _Unwind_GetIP (struct _Unwind_Context *c - } - symver (_Unwind_GetIP, GCC_3.0); - -+_Unwind_Ptr -+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) -+{ -+ *ip_before_insn = 0; -+ return __libunwind_Unwind_GetIP (context); -+} -+ - extern void *__libunwind_Unwind_GetLanguageSpecificData - (struct _Unwind_Context *); - ---- gcc/unwind-sjlj.c.jj 2005-11-21 14:43:21.000000000 +0100 -+++ gcc/unwind-sjlj.c 2006-04-21 14:00:08.000000000 +0200 -@@ -202,6 +202,13 @@ _Unwind_GetIP (struct _Unwind_Context *c - return context->fc->call_site + 1; - } - -+_Unwind_Ptr -+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) -+{ -+ *ip_before_insn = 0; -+ return context->fc->call_site + 1; -+} -+ - /* Set the return landing pad index in CONTEXT. */ - - void ---- gcc/unwind.h.jj 2005-11-21 14:43:20.000000000 +0100 -+++ gcc/unwind.h 2006-04-21 14:08:51.000000000 +0200 -@@ -151,6 +151,7 @@ extern _Unwind_Word _Unwind_GetGR (struc - extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word); - - extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *); -+extern _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *, int *); - extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr); - - /* @@@ Retrieve the CFA of the given context. */ ---- gcc/unwind-dw2.c.jj 2005-11-21 14:43:21.000000000 +0100 -+++ gcc/unwind-dw2.c 2006-04-21 14:05:32.000000000 +0200 -@@ -82,6 +82,7 @@ struct _Unwind_Context - void *lsda; - struct dwarf_eh_bases bases; - _Unwind_Word args_size; -+ char signal_frame; - }; - - /* Byte size of every register managed by these routines. */ -@@ -137,6 +138,7 @@ typedef struct - unsigned char fde_encoding; - unsigned char lsda_encoding; - unsigned char saw_z; -+ unsigned char signal_frame; - void *eh_ptr; - } _Unwind_FrameState; - -@@ -271,6 +273,16 @@ _Unwind_GetIP (struct _Unwind_Context *c - return (_Unwind_Ptr) context->ra; - } - -+/* Retrieve the return address and flag whether that IP is before -+ or after first not yet fully executed instruction. */ -+ -+inline _Unwind_Ptr -+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) -+{ -+ *ip_before_insn = context->signal_frame != 0; -+ return (_Unwind_Ptr) context->ra; -+} -+ - /* Overwrite the return address for CONTEXT with VAL. */ - - inline void -@@ -382,6 +394,13 @@ extract_cie_info (const struct dwarf_cie - aug += 1; - } - -+ /* "S" indicates a signal frame. */ -+ else if (aug[0] == 'S') -+ { -+ fs->signal_frame = 1; -+ aug += 1; -+ } -+ - /* Otherwise we have an unknown augmentation string. - Bail unless we saw a 'z' prefix. */ - else -@@ -818,8 +837,10 @@ execute_cfa_program (const unsigned char - a different stack configuration that we are not interested in. We - assume that the call itself is unwind info-neutral; if not, or if - there are delay instructions that adjust the stack, these must be -- reflected at the point immediately before the call insn. */ -- while (insn_ptr < insn_end && fs->pc < context->ra) -+ reflected at the point immediately before the call insn. -+ In signal frames, return address is after last completed instruction, -+ so we add 1 to return address to make the comparison <=. */ -+ while (insn_ptr < insn_end && fs->pc < context->ra + context->signal_frame) - { - unsigned char insn = *insn_ptr++; - _Unwind_Word reg, utmp; -@@ -1021,7 +1042,8 @@ uw_frame_state_for (struct _Unwind_Conte - if (context->ra == 0) - return _URC_END_OF_STACK; - -- fde = _Unwind_Find_FDE (context->ra - 1, &context->bases); -+ fde = _Unwind_Find_FDE (context->ra + context->signal_frame - 1, -+ &context->bases); - if (fde == NULL) - { - /* Couldn't find frame unwind info for this function. Try a -@@ -1376,6 +1398,8 @@ uw_update_context_1 (struct _Unwind_Cont - break; - } - -+ context->signal_frame = fs->signal_frame; -+ - MD_FROB_UPDATE_CONTEXT (context, fs); - } - ---- gcc/unwind-dw2.c.jj 2006-05-22 13:39:48.000000000 -0400 -+++ gcc/unwind-dw2.c 2006-05-22 13:48:20.000000000 -0400 -@@ -40,6 +40,7 @@ - #include "unwind-pe.h" - #include "unwind-dw2-fde.h" - #include "gthr.h" -+#include - - - #ifndef __USING_SJLJ_EXCEPTIONS__ -@@ -81,8 +82,15 @@ struct _Unwind_Context - void *ra; - void *lsda; - struct dwarf_eh_bases bases; -- _Unwind_Word args_size; -- char signal_frame; -+#if __BYTE_ORDER == __BIG_ENDIAN -+ _Unwind_Word signal_frame : 1; -+ _Unwind_Word args_size : sizeof (_Unwind_Word) * 8 - 1; -+#elif __BYTE_ORDER == __LITTLE_ENDIAN -+ _Unwind_Word args_size : sizeof (_Unwind_Word) * 8 - 1; -+ _Unwind_Word signal_frame : 1; -+#else -+#error Unknown endianity -+#endif - }; - - /* Byte size of every register managed by these routines. */ -@@ -1003,7 +1011,13 @@ execute_cfa_program (const unsigned char - break; - - case DW_CFA_GNU_args_size: -- insn_ptr = read_uleb128 (insn_ptr, &context->args_size); -+ { -+ _Unwind_Word args_size; -+ insn_ptr = read_uleb128 (insn_ptr, &args_size); -+ context->args_size = args_size; -+ if (context->args_size != args_size) -+ abort (); -+ } - break; - - case DW_CFA_GNU_negative_offset_extended: ---- libjava/exception.cc.jj 2006-05-22 13:39:48.000000000 -0400 -+++ libjava/exception.cc 2006-05-22 14:48:30.000000000 -0400 -@@ -31,6 +31,153 @@ namespace std - } - #include "unwind.h" - -+#if defined PIC && !defined __ia64__ -+ -+#include -+ -+extern "C" { -+ -+static void *libgcc_s_handle; -+ -+_Unwind_Reason_Code __attribute__((visibility ("hidden"))) -+_Unwind_RaiseException (struct _Unwind_Exception *exc) -+{ -+ static _Unwind_Reason_Code (*RaiseException) (struct _Unwind_Exception *); -+ -+ if (RaiseException == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ RaiseException = (__typeof (RaiseException)) -+ dlsym (libgcc_s_handle, "_Unwind_RaiseException"); -+ } -+ return RaiseException (exc); -+} -+ -+void __attribute__((visibility ("hidden"))) -+_Unwind_Resume (struct _Unwind_Exception *exc) -+{ -+ static void (*Resume) (struct _Unwind_Exception *); -+ -+ if (Resume == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ Resume = (__typeof (Resume)) -+ dlsym (libgcc_s_handle, "_Unwind_Resume"); -+ } -+ Resume (exc); -+} -+ -+__attribute__((visibility ("hidden"))) void * -+_Unwind_GetLanguageSpecificData (struct _Unwind_Context *ctx) -+{ -+ static void * (*GetLanguageSpecificData) (struct _Unwind_Context *); -+ -+ if (GetLanguageSpecificData == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ GetLanguageSpecificData = (__typeof (GetLanguageSpecificData)) -+ dlsym (libgcc_s_handle, "_Unwind_GetLanguageSpecificData"); -+ } -+ return GetLanguageSpecificData (ctx); -+} -+ -+_Unwind_Ptr __attribute__((visibility ("hidden"))) -+_Unwind_GetRegionStart (struct _Unwind_Context *ctx) -+{ -+ static _Unwind_Ptr (*GetRegionStart) (struct _Unwind_Context *); -+ -+ if (GetRegionStart == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ GetRegionStart = (__typeof (GetRegionStart)) -+ dlsym (libgcc_s_handle, "_Unwind_GetRegionStart"); -+ } -+ return GetRegionStart (ctx); -+} -+ -+_Unwind_Ptr __attribute__((visibility ("hidden"))) -+_Unwind_GetDataRelBase (struct _Unwind_Context *ctx) -+{ -+ static _Unwind_Ptr (*GetDataRelBase) (struct _Unwind_Context *); -+ -+ if (GetDataRelBase == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ GetDataRelBase = (__typeof (GetDataRelBase)) -+ dlsym (libgcc_s_handle, "_Unwind_GetDataRelBase"); -+ } -+ return GetDataRelBase (ctx); -+} -+ -+_Unwind_Ptr __attribute__((visibility ("hidden"))) -+_Unwind_GetTextRelBase (struct _Unwind_Context *ctx) -+{ -+ static _Unwind_Ptr (*GetTextRelBase) (struct _Unwind_Context *); -+ -+ if (GetTextRelBase == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ GetTextRelBase = (__typeof (GetTextRelBase)) -+ dlsym (libgcc_s_handle, "_Unwind_GetTextRelBase"); -+ } -+ return GetTextRelBase (ctx); -+} -+ -+_Unwind_Ptr __attribute__((visibility ("hidden"))) -+_Unwind_GetIPInfo (struct _Unwind_Context *ctx, int *ip) -+{ -+ static _Unwind_Ptr (*GetIPInfo) (struct _Unwind_Context *, int *ip); -+ -+ if (GetIPInfo == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ GetIPInfo = (__typeof (GetIPInfo)) -+ dlsym (libgcc_s_handle, "_Unwind_GetIPInfo"); -+ } -+ return GetIPInfo (ctx, ip); -+} -+ -+void __attribute__((visibility ("hidden"))) -+_Unwind_SetIP (struct _Unwind_Context *ctx, _Unwind_Ptr ip) -+{ -+ static void (*SetIP) (struct _Unwind_Context *, _Unwind_Ptr ip); -+ -+ if (SetIP == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ SetIP = (__typeof (SetIP)) -+ dlsym (libgcc_s_handle, "_Unwind_SetIP"); -+ } -+ SetIP (ctx, ip); -+} -+ -+void __attribute__((visibility ("hidden"))) -+_Unwind_SetGR (struct _Unwind_Context *ctx, int num, _Unwind_Ptr gr) -+{ -+ static void (*SetGR) (struct _Unwind_Context *, int num, _Unwind_Ptr gr); -+ -+ if (SetGR == NULL) -+ { -+ if (libgcc_s_handle == NULL) -+ libgcc_s_handle = dlopen ("libgcc_s.so.1", RTLD_LAZY); -+ SetGR = (__typeof (SetGR)) -+ dlsym (libgcc_s_handle, "_Unwind_SetGR"); -+ } -+ SetGR (ctx, num, gr); -+} -+ -+} -+ -+#endif -+ - struct alignment_test_struct - { - char space; -2005-05-08 Roger Sayle - - PR inline-asm/8788 - * stmt.c (expand_asm_operands): Avoid calling force_reg on BLKmode - operands. - - * gcc.dg/pr8788-1.c: New testcase. - ---- gcc/stmt.c (revision 99421) -+++ gcc/stmt.c (revision 99422) -@@ -877,7 +877,7 @@ expand_asm_operands (tree string, tree o - - if (asm_operand_ok (op, constraint) <= 0) - { -- if (allows_reg) -+ if (allows_reg && TYPE_MODE (type) != BLKmode) - op = force_reg (TYPE_MODE (type), op); - else if (!allows_mem) - warning (0, "asm operand %d probably doesn%'t match constraints", ---- gcc/testsuite/gcc.dg/pr8788-1.c (revision 0) -+++ gcc/testsuite/gcc.dg/pr8788-1.c (revision 99422) -@@ -0,0 +1,20 @@ -+/* PR inline-asm/8788 */ -+/* { dg-do compile } */ -+/* { dg-options "-O2" } */ -+ -+typedef struct { -+ long x[6]; -+} myjmp_buf; -+ -+typedef struct { -+ myjmp_buf regs; -+} my_stack; -+ -+void switch_to_stack (my_stack *stack){ -+ asm ( /* { dg-error "impossible constraint" } */ -+/* { dg-warning "asm operand 1" "asm operand 1" { target *-*-* } 14 } */ -+ "\n" -+ : "+r" (stack->regs) -+ ); -+} -+ -2005-11-30 Alexandre Oliva - - * gcc.c (find_a_file): Use update_path before access tests. - Mostly from Thomas Walker - * prefix.c (update_path): Move dir/../-stripping code to... - (maybe_strip_dotdots): New function. Reorganize. - ---- gcc/gcc.c.orig 2005-12-01 18:38:38.000000000 -0200 -+++ gcc/gcc.c 2005-12-01 18:41:01.000000000 -0200 -@@ -2371,7 +2371,7 @@ - find_a_file (struct path_prefix *pprefix, const char *name, int mode, - int multilib) - { -- char *temp; -+ char *temp, *temp2; - const char *const file_suffix = - ((mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : ""); - struct prefix_list *pl; -@@ -2407,19 +2407,18 @@ - NULL)); - } - -- temp = xmalloc (len); -- - /* Determine the filename to execute (special case for absolute paths). */ - - if (IS_ABSOLUTE_PATH (name)) - { -- if (access (name, mode) == 0) -- { -- strcpy (temp, name); -- return temp; -- } -+ /* IS_ABSOLUTE_PATHNAME lets anything through that starts with '/' */ -+ temp = update_path (name, NULL); -+ if (access (temp, mode) == 0) -+ return temp; - } - else -+ { -+ temp = xmalloc (len); - for (pl = pprefix->plist; pl; pl = pl->next) - { - const char *this_name -@@ -2435,24 +2434,30 @@ - strcat (temp, machine_suffix); - strcat (temp, multilib_name); - strcat (temp, file_suffix); -- if (access_check (temp, mode) == 0) -+ temp2 = update_path (temp, NULL); -+ if (access_check (temp2, mode) == 0) - { - if (pl->used_flag_ptr != 0) - *pl->used_flag_ptr = 1; -- return temp; -+ free (temp); -+ return temp2; - } -+ free (temp2); - } - - /* Now try just the multilib_name. */ - strcpy (temp, pl->prefix); - strcat (temp, machine_suffix); - strcat (temp, multilib_name); -- if (access_check (temp, mode) == 0) -+ temp2 = update_path (temp, NULL); -+ if (access_check (temp2, mode) == 0) - { - if (pl->used_flag_ptr != 0) - *pl->used_flag_ptr = 1; -- return temp; -+ free (temp); -+ return temp2; - } -+ free (temp2); - } - - /* Certain prefixes are tried with just the machine type, -@@ -2467,23 +2472,29 @@ - strcat (temp, just_machine_suffix); - strcat (temp, multilib_name); - strcat (temp, file_suffix); -- if (access_check (temp, mode) == 0) -+ temp2 = update_path (temp, NULL); -+ if (access_check (temp2, mode) == 0) - { - if (pl->used_flag_ptr != 0) - *pl->used_flag_ptr = 1; -- return temp; -+ free (temp); -+ return temp2; - } -+ free (temp2); - } - - strcpy (temp, pl->prefix); - strcat (temp, just_machine_suffix); - strcat (temp, multilib_name); -- if (access_check (temp, mode) == 0) -+ temp2 = update_path (temp, NULL); -+ if (access_check (temp2, mode) == 0) - { - if (pl->used_flag_ptr != 0) - *pl->used_flag_ptr = 1; -- return temp; -+ free (temp); -+ return temp2; - } -+ free (temp2); - } - - /* Certain prefixes can't be used without the machine suffix -@@ -2497,24 +2508,31 @@ - strcpy (temp, pl->prefix); - strcat (temp, this_name); - strcat (temp, file_suffix); -- if (access_check (temp, mode) == 0) -+ temp2 = update_path (temp, NULL); -+ if (access_check (temp2, mode) == 0) - { - if (pl->used_flag_ptr != 0) - *pl->used_flag_ptr = 1; -- return temp; -+ free (temp); -+ return temp2; - } -+ free (temp2); - } - - strcpy (temp, pl->prefix); - strcat (temp, this_name); -- if (access_check (temp, mode) == 0) -+ temp2 = update_path (temp, NULL); -+ if (access_check (temp2, mode) == 0) - { - if (pl->used_flag_ptr != 0) - *pl->used_flag_ptr = 1; -- return temp; -+ free (temp); -+ return temp2; - } -+ free (temp2); - } - } -+ } - - free (temp); - return 0; ---- gcc/prefix.c.orig 2005-12-01 18:38:38.000000000 -0200 -+++ gcc/prefix.c 2005-12-01 18:46:37.000000000 -0200 -@@ -238,6 +238,105 @@ - while (*string++); - } - -+/* Strip dir/.. from a pathname when it makes sense, e.g., when this -+ would turn an inaccessible pathname into an accessible one. -+ -+ We short-circuit dir/.. when dir does not exist, and when -+ some/dir/../thing does not exist but some/thing does. In case -+ there are multiple possible dir/../ stripping possibilities that -+ would turn an inaccessible pathname into an accessible one, the one -+ closer to the end of the pathname is preferred. -+ -+ RESULT is the pathname that might contain such dotdot sequences to -+ be stripped. P points into RESULT, and indicates the location -+ where we should start looking for ../ sequences. -+ -+ Even though RESULT is const, P is not, and that's because -+ characters in it may be temporarily overwritten, so RESULT must not -+ be in read-only storage. -+ -+ The returned value is either a newly-allocated memory area, holding -+ a string that is the result of dotdot-stripping from the original -+ input strip, or RESULT itself, in which case any modifications made -+ to the string will have been undone. */ -+ -+static const char * -+maybe_strip_dotdots (const char *result, char *p) -+{ -+ char *temp; -+ const char *path, *before, *after; -+ size_t len; -+ -+ while (1) -+ { -+ p = strchr (p, '.'); -+ if (p == NULL) -+ return result; -+ /* Look for `/../' */ -+ if (p[1] == '.' -+ && IS_DIR_SEPARATOR (p[2]) -+ && (p != result && IS_DIR_SEPARATOR (p[-1]))) -+ break; -+ else -+ ++p; -+ } -+ -+ *p = 0; -+ if (access (result, X_OK) == 0) -+ { -+ *p = '.'; -+ -+ path = maybe_strip_dotdots (result, p + 3); -+ if (access (path, F_OK) == 0) -+ return path; -+ if (path != result) -+ free ((char *) path); -+ } -+ else -+ *p = '.'; -+ -+ /* If we couldn't access the dir, or if recursion resulted in a -+ non-accessible pathname, we try stripping out dir/../. If `dir' -+ turns out to be `.', strip one more path component. */ -+ before = p; -+ do -+ { -+ --before; -+ while (before != result && IS_DIR_SEPARATOR (*before)) -+ --before; -+ while (before != result && !IS_DIR_SEPARATOR (before[-1])) -+ --before; -+ } -+ while (before != result && *before == '.' -+ && IS_DIR_SEPARATOR (*(before + 1))); -+ /* If we have something like `./..' or `/..', don't -+ strip anything more. */ -+ if (*before == '.' || IS_DIR_SEPARATOR (*before)) -+ return result; -+ -+ after = p + 3; -+ while (IS_DIR_SEPARATOR (*after)) -+ ++after; -+ -+ len = (after - result) + strlen (after); -+ -+ temp = xmalloc (len + 1 - (after - before)); -+ memcpy (temp, result, before - result); -+ memcpy (temp + (before - result), after, len + 1 - (after - result)); -+ -+ path = maybe_strip_dotdots (temp, temp + (before - result)); -+ -+ if (path != temp) -+ free (temp); -+ -+ if (access (path, F_OK) == 0) -+ result = path; -+ else if (path != result) -+ free ((char *) path); -+ -+ return result; -+} -+ - /* Update PATH using KEY if PATH starts with PREFIX. The returned - string is always malloc-ed, and the caller is responsible for - freeing it. */ -@@ -245,7 +344,7 @@ - char * - update_path (const char *path, const char *key) - { -- char *result, *p; -+ char *result, *temp; - - if (! strncmp (path, std_prefix, strlen (std_prefix)) && key != 0) - { -@@ -265,62 +364,11 @@ - else - result = xstrdup (path); - --#ifndef ALWAYS_STRIP_DOTDOT --#define ALWAYS_STRIP_DOTDOT 0 --#endif -+ temp = result; -+ result = (char *) maybe_strip_dotdots (temp, temp); - -- p = result; -- while (1) -- { -- char *src, *dest; -- -- p = strchr (p, '.'); -- if (p == NULL) -- break; -- /* Look for `/../' */ -- if (p[1] == '.' -- && IS_DIR_SEPARATOR (p[2]) -- && (p != result && IS_DIR_SEPARATOR (p[-1]))) -- { -- *p = 0; -- if (!ALWAYS_STRIP_DOTDOT && access (result, X_OK) == 0) -- { -- *p = '.'; -- break; -- } -- else -- { -- /* We can't access the dir, so we won't be able to -- access dir/.. either. Strip out `dir/../'. If `dir' -- turns out to be `.', strip one more path component. */ -- dest = p; -- do -- { -- --dest; -- while (dest != result && IS_DIR_SEPARATOR (*dest)) -- --dest; -- while (dest != result && !IS_DIR_SEPARATOR (dest[-1])) -- --dest; -- } -- while (dest != result && *dest == '.'); -- /* If we have something like `./..' or `/..', don't -- strip anything more. */ -- if (*dest == '.' || IS_DIR_SEPARATOR (*dest)) -- { -- *p = '.'; -- break; -- } -- src = p + 3; -- while (IS_DIR_SEPARATOR (*src)) -- ++src; -- p = dest; -- while ((*dest++ = *src++) != 0) -- ; -- } -- } -- else -- ++p; -- } -+ if (result != temp) -+ free (temp); - - #ifdef UPDATE_PATH_HOST_CANONICALIZE - /* Perform host dependent canonicalization when needed. */ -2005-09-29 Alexandre Oliva - - * error.c (dump_type) : Print reworded message. - - * g++.dg/overload/unknown1.C: New. - ---- gcc/cp/error.c.orig 2004-11-07 11:22:11.000000000 -0200 -+++ gcc/cp/error.c 2005-09-29 16:13:20.000000000 -0300 -@@ -302,7 +302,7 @@ - switch (TREE_CODE (t)) - { - case UNKNOWN_TYPE: -- pp_identifier (cxx_pp, ""); -+ pp_identifier (cxx_pp, ""); - break; - - case TREE_LIST: ---- gcc/testsuite/g++.dg/overload/unknown1.C 1970-01-01 00:00:00.000000000 +0000 -+++ gcc/testsuite/g++.dg/overload/unknown1.C 2005-09-29 16:12:49.000000000 -0300 -@@ -0,0 +1,9 @@ -+// { dg-do compile } -+ -+void foo(void); -+int foo(int); -+template void bar(T f); -+ -+void baz() { -+ bar(foo); // { dg-error "" } -+} -2005-12-18 Alexandre Oliva - - * optabs.c (expand_vector_binop): Do not use a SUBREG to modify - a subword in the output if it matches any of the inputs. - -2006-04-20 Jakub Jelinek - - * gcc.c-torture/execute/20060420-1.c: New test. - ---- gcc/optabs.c.orig 2005-11-21 11:43:20.000000000 -0200 -+++ gcc/optabs.c 2005-12-18 18:35:14.000000000 -0200 -@@ -1933,16 +1933,19 @@ - - for (i = 0; i < elts; ++i) - { -- /* If this is part of a register, and not the first item in the -- word, we can't store using a SUBREG - that would clobber -- previous results. -+ /* If this is part of a register, and not the first item in -+ the word, we can't store using a SUBREG - that would -+ clobber previous results, or even the input operands, if -+ target matches any of them. - And storing with a SUBREG is only possible for the least - significant part, hence we can't do it for big endian - (unless we want to permute the evaluation order. */ - if (GET_CODE (target) == REG - && (BYTES_BIG_ENDIAN - ? subsize < UNITS_PER_WORD -- : ((i * subsize) % UNITS_PER_WORD) != 0)) -+ : (((i * subsize) % UNITS_PER_WORD) != 0 -+ || (subsize < UNITS_PER_WORD -+ && (target == op0 || target == op1))))) - t = NULL_RTX; - else - t = simplify_gen_subreg (submode, target, mode, i * subsize); ---- gcc/testsuite/gcc.c-torture/execute/20060420-1.c.jj 2006-04-20 18:47:19.000000000 +0200 -+++ gcc/testsuite/gcc.c-torture/execute/20060420-1.c 2006-04-20 19:07:20.000000000 +0200 -@@ -0,0 +1,71 @@ -+extern void abort (void); -+ -+typedef float v4flt __attribute__ ((vector_size (16))); -+ -+void __attribute__ ((noinline)) foo (float *dst, float **src, int a, int n) -+{ -+ int i, j; -+ int z = sizeof (v4flt) / sizeof (float); -+ unsigned m = sizeof (v4flt) - 1; -+ -+ for (j = 0; j < n && (((unsigned long) dst + j) & m); ++j) -+ { -+ float t = src[0][j]; -+ for (i = 1; i < a; ++i) -+ t += src[i][j]; -+ dst[j] = t; -+ } -+ -+ for (; j < (n - (4 * z - 1)); j += 4 * z) -+ { -+ v4flt t0 = *(v4flt *) (src[0] + j + 0 * z); -+ v4flt t1 = *(v4flt *) (src[0] + j + 1 * z); -+ v4flt t2 = *(v4flt *) (src[0] + j + 2 * z); -+ v4flt t3 = *(v4flt *) (src[0] + j + 3 * z); -+ for (i = 1; i < a; ++i) -+ { -+ t0 += *(v4flt *) (src[i] + j + 0 * z); -+ t1 += *(v4flt *) (src[i] + j + 1 * z); -+ t2 += *(v4flt *) (src[i] + j + 2 * z); -+ t3 += *(v4flt *) (src[i] + j + 3 * z); -+ } -+ *(v4flt *) (dst + j + 0 * z) = t0; -+ *(v4flt *) (dst + j + 1 * z) = t1; -+ *(v4flt *) (dst + j + 2 * z) = t2; -+ *(v4flt *) (dst + j + 3 * z) = t3; -+ } -+ for (; j < n; ++j) -+ { -+ float t = src[0][j]; -+ for (i = 1; i < a; ++i) -+ t += src[i][j]; -+ dst[j] = t; -+ } -+} -+ -+float buffer[64]; -+ -+int -+main (void) -+{ -+ int i; -+ float *dst, *src[2]; -+ -+ dst = buffer; -+ dst += (-(long int) buffer & (16 * sizeof (float) - 1)) / sizeof (float); -+ src[0] = dst + 16; -+ src[1] = dst + 32; -+ for (i = 0; i < 16; ++i) -+ { -+ src[0][i] = (float) i + 11 * (float) i; -+ src[1][i] = (float) i + 12 * (float) i; -+ } -+ foo (dst, src, 2, 16); -+ for (i = 0; i < 16; ++i) -+ { -+ float e = (float) i + 11 * (float) i + (float) i + 12 * (float) i; -+ if (dst[i] != e) -+ abort (); -+ } -+ return 0; -+} -2006-03-01 Alexandre Oliva - - * dwarf2out.c (dwarf2out_stack_adjust): Always track the stack - pointer, instead of assuming it is possible to derive the - correct args size from a call insn. - ---- gcc/dwarf2out.c.orig 2006-03-01 05:13:50.000000000 -0300 -+++ gcc/dwarf2out.c 2006-03-01 05:41:38.000000000 -0300 -@@ -1069,26 +1069,6 @@ dwarf2out_stack_adjust (rtx insn) - if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn)) - return; - -- if (!flag_asynchronous_unwind_tables && GET_CODE (insn) == CALL_INSN) -- { -- /* Extract the size of the args from the CALL rtx itself. */ -- insn = PATTERN (insn); -- if (GET_CODE (insn) == PARALLEL) -- insn = XVECEXP (insn, 0, 0); -- if (GET_CODE (insn) == SET) -- insn = SET_SRC (insn); -- if (GET_CODE (insn) != CALL) -- abort (); -- -- dwarf2out_args_size ("", INTVAL (XEXP (insn, 1))); -- return; -- } -- -- /* If only calls can throw, and we have a frame pointer, -- save up adjustments until we see the CALL_INSN. */ -- else if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM) -- return; -- - if (GET_CODE (insn) == BARRIER) - { - /* When we see a BARRIER, we know to reset args_size to 0. Usually -@@ -1111,9 +1091,20 @@ dwarf2out_stack_adjust (rtx insn) - if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET) - offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i)); - } -+ else if (GET_CODE (insn) == CALL_INSN) -+ offset = 0; - else - return; - -+ /* We handle this separately because we want stack adjustments in a -+ CALL_INSN to be handled. */; -+ if (GET_CODE (insn) == CALL_INSN) -+ { -+ /* If only calls can throw, adjust args_size only at call sites. */ -+ if (!flag_asynchronous_unwind_tables) -+ dwarf2out_args_size ("", args_size); -+ } -+ - if (offset == 0) - return; - -@@ -1128,6 +1119,16 @@ dwarf2out_stack_adjust (rtx insn) - if (args_size < 0) - args_size = 0; - -+ /* If only calls can throw and we have a frame pointer, we'll save -+ up adjustments until we see the CALL_INSN. We used to return -+ early and derive args_size from NARGS in the CALL_INSN itself, -+ but that doesn't compute the right value if we have nested call -+ expansions, e.g., stack adjustments for a call have already been -+ emitted, and then we issue another call to compute an argument -+ for the enclosing call (i.e., bar (foo ())). */ -+ if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM) -+ return; -+ - label = dwarf2out_cfi_label (); - def_cfa_1 (label, &cfa); - dwarf2out_args_size (label, args_size); -2006-02-25 Alexandre Oliva - - * varasm.c (copy_constant): Handle VECTOR_CST. - - * gcc.dg/altivec-23.c: New test. - ---- gcc/varasm.c 2006-02-25 03:52:54.000000000 -0300 -+++ gcc/varasm.c 2006-02-25 03:54:56.000000000 -0300 -@@ -2464,6 +2464,19 @@ copy_constant (tree exp) - return copy; - } - -+ case VECTOR_CST: -+ { -+ tree copy = copy_node (exp); -+ tree list = copy_list (TREE_VECTOR_CST_ELTS (exp)); -+ tree tail; -+ -+ TREE_VECTOR_CST_ELTS (copy) = list; -+ for (tail = list; tail; tail = TREE_CHAIN (tail)) -+ TREE_VALUE (tail) = copy_constant (TREE_VALUE (tail)); -+ -+ return copy; -+ } -+ - default: - { - tree t; ---- gcc/testsuite/gcc.dg/altivec-23.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc/testsuite/gcc.dg/altivec-23.c 2006-02-25 04:10:36.000000000 -0300 -@@ -0,0 +1,25 @@ -+/* Verify that it is possible to define variables of composite types -+ containing vector types. We used to crash handling the -+ initializer of automatic ones. */ -+ -+/* { dg-do compile { target powerpc*-*-* } } */ -+/* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "-maltivec" } { "" } } */ -+/* { dg-options "-maltivec -mabi=altivec" } */ -+ -+#include -+ -+typedef int bt; -+typedef vector bt vt; -+typedef struct { vt x; bt y[sizeof(vt) / sizeof (bt)]; } st; -+#define INIT { 1, 2, 3, 4 } -+ -+void f () -+{ -+ vt x = INIT; -+ vt y[1] = { INIT }; -+ st s = { INIT, INIT }; -+} -+ -+vt x = INIT; -+vt y[1] = { INIT }; -+st s = { INIT, INIT }; -2006-12-08 Alexandre Oliva - - * g++.dg/template/array17.C: New test. - -2006-10-27 Alexandre Oliva - - * typeck.c (non_reference): Don't dereference NULL type. - ---- gcc/cp/typeck.c.orig 2005-11-21 11:56:03.000000000 -0200 -+++ gcc/cp/typeck.c 2006-10-27 03:28:04.000000000 -0300 -@@ -6443,7 +6443,7 @@ casts_away_constness (tree t1, tree t2) - tree - non_reference (tree t) - { -- if (TREE_CODE (t) == REFERENCE_TYPE) -+ if (t != NULL_TREE && TREE_CODE (t) == REFERENCE_TYPE) - t = TREE_TYPE (t); - return t; - } ---- gcc/testsuite/g++.dg/template/array17.C 2006-10-04 16:28:56.502613000 +0200 -+++ gcc/testsuite/g++.dg/template/array17.C 2006-12-08 12:38:27.000000000 +0100 -@@ -0,0 +1,23 @@ -+// { dg-do compile } -+ -+template -+struct V { -+ T& operator[](int); -+}; -+ -+struct S { -+ S operator +(int); -+ template T value(); -+}; -+ -+template -+void R (T v) -+{ -+ v[(S() + 0).template value()][0] = 0; -+} -+ -+int -+main () -+{ -+ R(V >()); -+} -2006-12-08 Jakub Jelinek - - * g++.dg/opt/ifcvt1.C: New test. - -2005-11-09 Eric Botcazou - - * ifcvt.c (noce_get_alt_condition): Use prev_nonnote_insn. - (noce_try_abs): Negate if the comparison is reversed. - Look only one instruction backwards for a REG_EQUAL note. - - * gcc.dg/ifcvt-fabs-1.c: New test. - ---- gcc/ifcvt.c.orig 2005-11-21 11:43:21.000000000 -0200 -+++ gcc/ifcvt.c 2006-10-26 02:21:07.000000000 -0300 -@@ -1406,7 +1406,7 @@ noce_get_alt_condition (struct noce_if_i - rtx prev_insn; - - /* First, look to see if we put a constant in a register. */ -- prev_insn = PREV_INSN (if_info->cond_earliest); -+ prev_insn = prev_nonnote_insn (if_info->cond_earliest); - if (prev_insn - && INSN_P (prev_insn) - && GET_CODE (PATTERN (prev_insn)) == SET) -@@ -1642,25 +1642,30 @@ noce_try_abs (struct noce_if_info *if_in - if (rtx_equal_p (XEXP (cond, 0), b)) - c = XEXP (cond, 1); - else if (rtx_equal_p (XEXP (cond, 1), b)) -- c = XEXP (cond, 0); -+ { -+ c = XEXP (cond, 0); -+ negate = !negate; -+ } - else - return FALSE; - -- /* Verify that C is zero. Search backward through the block for -- a REG_EQUAL note if necessary. */ -+ /* Verify that C is zero. Search one step backward for a -+ REG_EQUAL note or a simple source if necessary. */ - if (REG_P (c)) - { -- rtx insn, note = NULL; -- for (insn = earliest; -- insn != BB_HEAD (if_info->test_bb); -- insn = PREV_INSN (insn)) -- if (INSN_P (insn) -- && ((note = find_reg_note (insn, REG_EQUAL, c)) -- || (note = find_reg_note (insn, REG_EQUIV, c)))) -- break; -- if (! note) -+ rtx set, insn = prev_nonnote_insn (earliest); -+ if (insn -+ && (set = single_set (insn)) -+ && rtx_equal_p (SET_DEST (set), c)) -+ { -+ rtx note = find_reg_equal_equiv_note (insn); -+ if (note) -+ c = XEXP (note, 0); -+ else -+ c = SET_SRC (set); -+ } -+ else - return FALSE; -- c = XEXP (note, 0); - } - if (GET_CODE (c) == MEM - && GET_CODE (XEXP (c, 0)) == SYMBOL_REF ---- gcc/testsuite/gcc.dg/ifcvt-fabs-1.c 1970-01-01 00:00:00.000000000 +0000 -+++ gcc/testsuite/gcc.dg/ifcvt-fabs-1.c 2006-10-26 02:20:24.000000000 -0300 -@@ -0,0 +1,21 @@ -+/* { dg-do run } */ -+/* { dg-options "-O" } */ -+/* { dg-options "-O -march=i686" { target i686-*-* } } */ -+ -+extern void abort(void); -+ -+float foo(float f) -+{ -+ if (f < 0.0f) -+ f = -f; -+ -+ return f; -+} -+ -+int main(void) -+{ -+ if (foo (-1.0f) != 1.0f) -+ abort (); -+ -+ return 0; -+} ---- gcc/testsuite/g++.dg/opt/ifcvt1.C 2006-10-04 16:28:56.502613000 +0200 -+++ gcc/testsuite/g++.dg/opt/ifcvt1.C 2006-12-08 12:23:23.000000000 +0100 -@@ -0,0 +1,17 @@ -+// { dg-do compile } -+// { dg-options "-O2 -fnon-call-exceptions" } -+ -+struct S { ~S () throw () {} }; -+double bar (); -+ -+int -+foo () -+{ -+ S a; -+ int i = 0; -+ double c = bar (); -+ c = c < 0 ? -c : c; -+ if (c <= 1.e-8) -+ i += 24; -+ return i; -+} -2007-04-02 Jakub Jelinek - - * expr.c (expand_expr_real) : Force op1 - into register if target overlaps with op1. - - * g77.f-torture/execute/20070402.f: New test. - ---- gcc/expr.c.jj 2006-10-05 00:37:01.000000000 +0200 -+++ gcc/expr.c 2007-04-02 13:28:52.000000000 +0200 -@@ -8949,6 +8949,9 @@ expand_expr_real (tree exp, rtx target, - - if (! target) - target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp))); -+ else if (GET_CODE (target) == MEM -+ && reg_overlap_mentioned_p (target, op1)) -+ op1 = force_reg (mode, op1); - - start_sequence (); - ---- gcc/testsuite/g77.f-torture/execute/20070402.f.jj 2007-04-02 13:29:51.000000000 +0200 -+++ gcc/testsuite/g77.f-torture/execute/20070402.f 2007-04-02 12:11:00.000000000 +0200 -@@ -0,0 +1,21 @@ -+ program rh233941 -+ implicit none -+ complex*16 z -+ z = dcmplx(1.0, 2.0) -+ call sub(z) -+ stop -+ end program rh233941 -+ -+ subroutine sub(z) -+ implicit none -+ complex*16 z -+ z = dcmplx(-dimag(z), dreal(z)) -+ call sub2(z) -+ return -+ end subroutine sub -+ -+ subroutine sub2(z) -+ implicit none -+ complex*16 z -+ if (dreal(z).ne.-2.0.or.dimag(z).ne.1.0) call abort -+ end subroutine sub2 -2007-01-24 Steve LoBasso - Paolo Carlini - - * include/bits/deque.tcc (deque<>::erase(iterator, iterator)): - Fix condition. - * testsuite/23_containers/deque/modifiers/erase/3.cc: New. - ---- libstdc++-v3/include/bits/deque.tcc (revision 121146) -+++ libstdc++-v3/include/bits/deque.tcc (revision 121147) -@@ -140,7 +140,7 @@ namespace _GLIBCXX_STD - { - const difference_type __n = __last - __first; - const difference_type __elems_before = __first - this->_M_impl._M_start; -- if (static_cast(__elems_before) < (size() - __n) / 2) -+ if (static_cast(__elems_before) <= (size() - __n) / 2) - { - std::copy_backward(this->_M_impl._M_start, __first, __last); - iterator __new_start = this->_M_impl._M_start + __n; ---- libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/3.cc (revision 0) -+++ libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/3.cc (revision 121147) -@@ -0,0 +1,52 @@ -+// Copyright (C) 2007 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library 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. -+ -+// This library 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 library; see the file COPYING. If not, write to the Free -+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -+// USA. -+ -+// 23.2.1.3 deque modifiers -+ -+#include -+#include -+ -+void erase(size_t num_elm, size_t elm_strt, size_t elm_end) -+{ -+ bool test __attribute__((unused)) = true; -+ using __gnu_test::copy_tracker; -+ using __gnu_test::assignment_operator; -+ -+ std::deque x(num_elm); -+ copy_tracker::reset(); -+ -+ x.erase(x.begin() + elm_strt, x.begin() + elm_end); -+ -+ const size_t min_num_cpy = std::min(elm_strt, num_elm - elm_end); -+ VERIFY( assignment_operator::count() == min_num_cpy ); -+} -+ -+// http://gcc.gnu.org/ml/libstdc++/2007-01/msg00098.html -+void test01() -+{ -+ for (size_t num_elm = 0; num_elm <= 10; ++num_elm) -+ for (size_t elm_strt = 0; elm_strt <= num_elm; ++elm_strt) -+ for (size_t elm_end = elm_strt; elm_end <= num_elm; ++elm_end) -+ erase(num_elm, elm_strt, elm_end); -+} -+ -+int main() -+{ -+ test01(); -+ return 0; -+} -2007-04-12 Jakub Jelinek - - * fr.po: Use %s rather than %S. - * rw.po: Comment out translations with bogus format - strings. - ---- gcc/po/fr.po.jj 2006-10-05 00:33:36.000000000 +0200 -+++ gcc/po/fr.po 2007-04-13 00:23:29.000000000 +0200 -@@ -17100,7 +17100,7 @@ msgstr "%s liste d'expressions traitée c - - #: cp/typeck.c:4490 - msgid "%s from type `%T' to type `%T' casts away constness" --msgstr "%S à partir du « %T » vers le type « %T » provoque un transtypage sans constante" -+msgstr "%s à partir du « %T » vers le type « %T » provoque un transtypage sans constante" - - #: cp/typeck.c:4692 - msgid "invalid static_cast from type `%T' to type `%T'" -2007-04-21 Alexandre Oliva - - * gcse.c (store_killed_in_insn): Handle PARALLELs. - (store_killed_in_pat): New. - - * gcc.dg/movsi-sm-1.c: New. - ---- gcc/gcse.c.jj 2007-02-23 21:29:12.000000000 +0100 -+++ gcc/gcse.c 2007-07-18 20:41:08.000000000 +0200 -@@ -7427,6 +7427,40 @@ find_loads (rtx x, rtx store_pattern, in - return ret; - } - -+static inline bool -+store_killed_in_pat (rtx x, rtx pat, int after) -+{ -+ if (GET_CODE (pat) == SET) -+ { -+ rtx dest = SET_DEST (pat); -+ -+ if (GET_CODE (dest) == SIGN_EXTRACT -+ || GET_CODE (dest) == ZERO_EXTRACT) -+ dest = XEXP (dest, 0); -+ -+ /* Check for memory stores to aliased objects. */ -+ if (GET_CODE (dest) == MEM -+ && !expr_equiv_p (dest, x)) -+ { -+ if (after) -+ { -+ if (output_dependence (dest, x)) -+ return true; -+ } -+ else -+ { -+ if (output_dependence (x, dest)) -+ return true; -+ } -+ } -+ } -+ -+ if (find_loads (pat, x, after)) -+ return true; -+ -+ return false; -+} -+ - /* Check if INSN kills the store pattern X (is aliased with it). - AFTER is true if we are checking the case when store X occurs - after the insn. Return true if it it does. */ -@@ -7434,7 +7468,7 @@ find_loads (rtx x, rtx store_pattern, in - static bool - store_killed_in_insn (rtx x, rtx x_regs, rtx insn, int after) - { -- rtx reg, base, note; -+ rtx reg, base, note, pat; - - if (!INSN_P (insn)) - return false; -@@ -7461,33 +7495,20 @@ store_killed_in_insn (rtx x, rtx x_regs, - return false; - } - -- if (GET_CODE (PATTERN (insn)) == SET) -+ pat = PATTERN (insn); -+ if (GET_CODE (pat) == SET) - { -- rtx pat = PATTERN (insn); -- rtx dest = SET_DEST (pat); -- -- if (GET_CODE (dest) == SIGN_EXTRACT -- || GET_CODE (dest) == ZERO_EXTRACT) -- dest = XEXP (dest, 0); -- -- /* Check for memory stores to aliased objects. */ -- if (GET_CODE (dest) == MEM -- && !expr_equiv_p (dest, x)) -- { -- if (after) -- { -- if (output_dependence (dest, x)) -- return true; -- } -- else -- { -- if (output_dependence (x, dest)) -- return true; -- } -- } -- if (find_loads (SET_SRC (pat), x, after)) -+ if (store_killed_in_pat (x, pat, after)) - return true; - } -+ else if (GET_CODE (pat) == PARALLEL) -+ { -+ int i; -+ -+ for (i = 0; i < XVECLEN (pat, 0); i++) -+ if (store_killed_in_pat (x, XVECEXP (pat, 0, i), after)) -+ return true; -+ } - else if (find_loads (PATTERN (insn), x, after)) - return true; - ---- gcc/testsuite/gcc.dg/movsi-sm-1.c.jj 2007-07-18 20:58:08.000000000 +0200 -+++ gcc/testsuite/gcc.dg/movsi-sm-1.c 2007-07-18 21:01:52.000000000 +0200 -@@ -0,0 +1,35 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2" } */ -+/* { dg-options "-O2 -mtune=i386" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ -+ -+int ret = 1; -+char buf[128]; -+ -+void -+__attribute__((noinline)) -+bug (int arg) -+{ -+ char str[28]; -+ -+ __builtin_memcpy (str, "Bugged!", 8); -+ -+ if (arg & 0200) -+ { -+ __builtin_memcpy (str, "This is what we should get!", 28); -+ ret = 0; -+ } -+ -+ if (arg & 0100) -+ __builtin_memcpy (str, "Broken!", 8); -+ -+ __builtin_sprintf (buf, "%s\n", str); -+} -+ -+int -+main () -+{ -+ bug (0200); -+ if (ret) -+ return ret; -+ return __builtin_strcmp (buf, "This is what we should get!\n") != 0; -+} -2007-06-08 Jatin Nansi - - * config/locale/ieee_1003.1-2001/codecvt_specializations.h: Make sure - _M_int_enc and _M_ext_enc are '\0' terminated. - ---- libstdc++-v3/config/locale/ieee_1003.1-2001/codecvt_specializations.h.jj 2007-02-23 21:29:34.000000000 +0100 -+++ libstdc++-v3/config/locale/ieee_1003.1-2001/codecvt_specializations.h 2007-07-19 14:20:20.000000000 +0200 -@@ -83,8 +83,10 @@ - int __ibom = 0, int __ebom = 0) - : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(__ebom), _M_int_bom(__ibom) - { -- strncpy(_M_int_enc, __int, _S_max_size); -- strncpy(_M_ext_enc, __ext, _S_max_size); -+ strncpy(_M_int_enc, __int, _S_max_size - 1); -+ strncpy(_M_ext_enc, __ext, _S_max_size - 1); -+ _M_int_enc[_S_max_size - 1] = '\0'; -+ _M_ext_enc[_S_max_size - 1] = '\0'; - _M_init(); - } - -@@ -98,8 +100,10 @@ - // information. - __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0) - { -- strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size); -- strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size); -+ strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size - 1); -+ strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size - 1); -+ _M_int_enc[_S_max_size - 1] = '\0'; -+ _M_ext_enc[_S_max_size - 1] = '\0'; - _M_ext_bom = __obj._M_ext_bom; - _M_int_bom = __obj._M_int_bom; - _M_destroy(); -@@ -110,8 +114,10 @@ - __enc_traits& - operator=(const __enc_traits& __obj) - { -- strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size); -- strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size); -+ strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size - 1); -+ strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size - 1); -+ _M_int_enc[_S_max_size - 1] = '\0'; -+ _M_ext_enc[_S_max_size - 1] = '\0'; - _M_ext_bom = __obj._M_ext_bom; - _M_int_bom = __obj._M_int_bom; - _M_destroy(); diff --git a/gcc3-pr15666.patch b/gcc3-pr15666.patch deleted file mode 100644 index 376fa9d..0000000 --- a/gcc3-pr15666.patch +++ /dev/null @@ -1,23 +0,0 @@ -Index: gcc/ChangeLog -from Alexandre Oliva - - PR middle-end/15666 - * c-decl.c (finish_decl): Use change_decl_assembler_name for the - builtin decl as well. - -Index: gcc/c-decl.c -=================================================================== -RCS file: /cvs/gcc/gcc/gcc/c-decl.c,v -retrieving revision 1.504 -diff -u -p -r1.504 c-decl.c ---- gcc/c-decl.c 31 May 2004 22:06:27 -0000 1.504 -+++ gcc/c-decl.c 1 Jun 2004 04:03:41 -0000 -@@ -2886,7 +2886,7 @@ finish_decl (tree decl, tree init, tree - { - tree builtin = built_in_decls [DECL_FUNCTION_CODE (decl)]; - SET_DECL_RTL (builtin, NULL_RTX); -- SET_DECL_ASSEMBLER_NAME (builtin, get_identifier (starred)); -+ change_decl_assembler_name (builtin, get_identifier (starred)); - #ifdef TARGET_MEM_FUNCTIONS - if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY) - init_block_move_fn (starred); diff --git a/gcc3-ssp.patch b/gcc3-ssp.patch deleted file mode 100644 index 3aae640..0000000 --- a/gcc3-ssp.patch +++ /dev/null @@ -1,4202 +0,0 @@ -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 Emit declaration information into -@@ -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; -+ - - /* 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; - }; - - /* 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 */ - -+ -+#ifdef L_stack_smash_handler -+#ifndef _LIBC_PROVIDES_SSP_ -+#include -+#include -+#include -+#include -+ -+#ifdef _POSIX_SOURCE -+#include -+#endif -+ -+#if defined(HAVE_SYSLOG) -+#include -+#include -+#include -+ -+#include -+#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 diff --git a/gcc3-visibility.patch b/gcc3-visibility.patch deleted file mode 100644 index 877ff53..0000000 --- a/gcc3-visibility.patch +++ /dev/null @@ -1,702 +0,0 @@ -diff -aur gcc-3.4.0orig/gcc/c-common.c gcc-3.4.0/gcc/c-common.c ---- gcc-3.4.0orig/gcc/c-common.c 2004-03-19 01:32:59.000000000 +0000 -+++ gcc-3.4.0/gcc/c-common.c 2004-05-10 21:05:33.000000000 +0100 -@@ -833,7 +833,7 @@ - handle_deprecated_attribute }, - { "vector_size", 1, 1, false, true, false, - handle_vector_size_attribute }, -- { "visibility", 1, 1, true, false, false, -+ { "visibility", 1, 1, false, false, false, - handle_visibility_attribute }, - { "tls_model", 1, 1, true, false, false, - handle_tls_model_attribute }, -@@ -4886,7 +4886,16 @@ - - *no_add_attrs = true; - -- if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl)) -+ if (TYPE_P (*node)) -+ { -+ if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE) -+ { -+ warning ("`%s' attribute ignored on non-class types", -+ IDENTIFIER_POINTER (name)); -+ return NULL_TREE; -+ } -+ } -+ else if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl)) - { - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - return NULL_TREE; -@@ -4897,6 +4906,14 @@ - error ("visibility arg not a string"); - return NULL_TREE; - } -+ -+ /* If this is a type, set the visibility on the type decl. */ -+ if (TYPE_P (decl)) -+ { -+ decl = TYPE_NAME (decl); -+ if (! decl) -+ return NULL_TREE; -+ } - - if (strcmp (TREE_STRING_POINTER (id), "default") == 0) - DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT; -@@ -4908,6 +4925,14 @@ - DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED; - else - error ("visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\""); -+ DECL_VISIBILITYSPECIFIED (decl) = 1; -+ -+ /* For decls only, go ahead and attach the attribute to the node as well. -+ This is needed so we can determine whether we have VISIBILITY_DEFAULT -+ because the visibility was not specified, or because it was explicitly -+ overridden from the class visibility. */ -+ if (DECL_P (*node)) -+ *no_add_attrs = false; - - return NULL_TREE; - } - -diff -aur gcc-3.4.0orig/gcc/c-decl.c gcc-3.4.0/gcc/c-decl.c ---- gcc-3.4.0orig/gcc/c-decl.c 2004-03-22 17:58:18.000000000 +0000 -+++ gcc-3.4.0/gcc/c-decl.c 2004-05-10 15:16:27.000000000 +0100 -@@ -1164,9 +1164,8 @@ - } - - /* warnings */ -- /* All decls must agree on a non-default visibility. */ -- if (DECL_VISIBILITY (newdecl) != VISIBILITY_DEFAULT -- && DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT -+ /* All decls must agree on a visibility. */ -+ if (DECL_VISIBILITYSPECIFIED (newdecl) && DECL_VISIBILITYSPECIFIED (olddecl) - && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl)) - { - warning ("%Jredeclaration of '%D' with different visibility " -@@ -1361,9 +1360,12 @@ - Currently, it can only be defined in the prototype. */ - COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl); - -- /* If either declaration has a nondefault visibility, use it. */ -- if (DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT) -- DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl); -+ /* Use visibility of whichever declaration had it specified */ -+ if (DECL_VISIBILITYSPECIFIED (olddecl)) -+ { -+ DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl); -+ DECL_VISIBILITYSPECIFIED (newdecl) = 1; -+ } - - if (TREE_CODE (newdecl) == FUNCTION_DECL) - { - -diff -aur gcc-3.4.0orig/gcc/common.opt gcc-3.4.0/gcc/common.opt ---- gcc-3.4.0orig/gcc/common.opt 2004-02-18 00:09:04.000000000 +0000 -+++ gcc-3.4.0/gcc/common.opt 2004-05-09 08:10:50.000000000 +0100 -@@ -718,6 +718,11 @@ - Common - Add extra commentary to assembler output - -+fvisibility= -+Common Joined RejectNegative -+-fvisibility=[default|internal|hidden|protected] Set the default symbol visibility -+ -+ - fvpt - Common - Use expression value profiles in optimizations - -diff -aur gcc-3.4.0orig/gcc/c.opt gcc-3.4.0/gcc/c.opt ---- gcc-3.4.0orig/gcc/c.opt 2004-02-18 00:09:03.000000000 +0000 -+++ gcc-3.4.0/gcc/c.opt 2004-05-09 08:10:50.000000000 +0100 -@@ -656,6 +656,10 @@ - C++ ObjC++ - Use __cxa_atexit to register destructors - -+fvisibility-inlines-hidden -+C++ -+Marks all inlined methods as having hidden visibility -+ - fvtable-gc - C++ ObjC++ - Discard unused virtual functions -diff -aur gcc-3.4.0orig/gcc/c-opts.c gcc-3.4.0/gcc/c-opts.c ---- gcc-3.4.0orig/gcc/c-opts.c 2004-02-18 00:09:03.000000000 +0000 -+++ gcc-3.4.0/gcc/c-opts.c 2004-05-09 08:10:50.000000000 +0100 -@@ -912,6 +912,10 @@ - case OPT_fuse_cxa_atexit: - flag_use_cxa_atexit = value; - break; -+ -+ case OPT_fvisibility_inlines_hidden: -+ visibility_options.inlineshidden = value; -+ break; - - case OPT_fweak: - flag_weak = value; - -diff -aur gcc-3.4.0orig/gcc/cp/class.c gcc-3.4.0/gcc/cp/class.c ---- gcc-3.4.0orig/gcc/cp/class.c 2004-03-09 07:27:23.000000000 +0000 -+++ gcc-3.4.0/gcc/cp/class.c 2004-05-10 21:06:50.000000000 +0100 -@@ -524,6 +524,10 @@ - DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node), - DECL_ALIGN (decl)); - -+ /* The vtable's visibility is the class visibility. There is no way -+ to override the visibility for just the vtable. */ -+ DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type); -+ DECL_VISIBILITYSPECIFIED (decl) = CLASSTYPE_VISIBILITYSPECIFIED (class_type); - import_export_vtable (decl, class_type, 0); - - return decl; -@@ -2971,7 +2975,25 @@ - continue; - - if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL) -- continue; -+ { -+ /* Apply the class's visibility attribute to static members -+ which do not have a visibility attribute. */ -+ if (! lookup_attribute ("visibility", DECL_ATTRIBUTES (x))) -+ { -+ if (visibility_options.inlineshidden && DECL_INLINE (x)) -+ { -+ DECL_VISIBILITY (x) = VISIBILITY_HIDDEN; -+ DECL_VISIBILITYSPECIFIED (x) = 1; -+ } -+ else -+ { -+ DECL_VISIBILITY (x) = CLASSTYPE_VISIBILITY (current_class_type); -+ DECL_VISIBILITYSPECIFIED (x) = CLASSTYPE_VISIBILITYSPECIFIED (current_class_type); -+ } -+ } -+ -+ continue; -+ } - - /* Now it can only be a FIELD_DECL. */ - -@@ -3708,6 +3730,22 @@ - check_for_override (x, t); - if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x)) - cp_error_at ("initializer specified for non-virtual method `%D'", x); -+ -+ /* Apply the class's visibility attribute to methods which do -+ not have a visibility attribute. */ -+ if (! lookup_attribute ("visibility", DECL_ATTRIBUTES (x))) -+ { -+ if (visibility_options.inlineshidden && DECL_INLINE (x)) -+ { -+ DECL_VISIBILITY (x) = VISIBILITY_HIDDEN; -+ DECL_VISIBILITYSPECIFIED (x) = 1; -+ } -+ else -+ { -+ DECL_VISIBILITY (x) = CLASSTYPE_VISIBILITY (current_class_type); -+ DECL_VISIBILITYSPECIFIED (x) = CLASSTYPE_VISIBILITYSPECIFIED (current_class_type); -+ } -+ } - - /* The name of the field is the original field name - Save this in auxiliary field for later overloading. */ -@@ -7830,3 +7868,4 @@ - *vid->last_init = build_tree_list (NULL_TREE, init); - vid->last_init = &TREE_CHAIN (*vid->last_init); - } -+ - -diff -aur gcc-3.4.0orig/gcc/cp/cp-tree.h gcc-3.4.0/gcc/cp/cp-tree.h ---- gcc-3.4.0orig/gcc/cp/cp-tree.h 2004-03-20 00:13:08.000000000 +0000 -+++ gcc-3.4.0/gcc/cp/cp-tree.h 2004-05-10 20:56:56.000000000 +0100 -@@ -1008,7 +1008,12 @@ - #define PUBLICLY_UNIQUELY_DERIVED_P(PARENT, TYPE) \ - (lookup_base ((TYPE), (PARENT), ba_not_special | ba_quiet, NULL) \ - != NULL_TREE) -- -+ -+/* Gives the visibility specification for a class type. */ -+#define CLASSTYPE_VISIBILITY(TYPE) DECL_VISIBILITY (TYPE_NAME (TYPE)) -+#define CLASSTYPE_VISIBILITYSPECIFIED(TYPE) DECL_VISIBILITYSPECIFIED (TYPE_NAME (TYPE)) -+ -+ - /* This is a few header flags for 'struct lang_type'. Actually, - all but the first are used only for lang_type_class; they - are put in this structure to save space. */ - -diff -aur gcc-3.4.0orig/gcc/cp/decl.c gcc-3.4.0/gcc/cp/decl.c ---- gcc-3.4.0orig/gcc/cp/decl.c 2004-04-01 21:47:21.000000000 +0100 -+++ gcc-3.4.0/gcc/cp/decl.c 2004-05-28 21:16:11.000000000 +0100 -@@ -1869,17 +1869,34 @@ - DECL_COMMON (newdecl) = DECL_COMMON (olddecl); - COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl); - -- /* If either declaration has a nondefault visibility, use it. */ -- if (DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT) -+ /* Warn about conflicting visibility specifications. */ -+ if (DECL_VISIBILITYSPECIFIED (olddecl) && DECL_VISIBILITYSPECIFIED (newdecl) -+ && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl)) -+ { -+ warning ("%J'%D': visibility attribute ignored because it", -+ newdecl, newdecl); -+ warning ("%Jconflicts with previous declaration here", olddecl); -+ } -+ /* Choose the declaration which specified visibility. */ -+ if (DECL_VISIBILITYSPECIFIED (olddecl)) - { -- if (DECL_VISIBILITY (newdecl) != VISIBILITY_DEFAULT -- && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl)) -- { -- warning ("%J'%D': visibility attribute ignored because it", -- newdecl, newdecl); -- warning ("%Jconflicts with previous declaration here", olddecl); -- } - DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl); -+ DECL_VISIBILITYSPECIFIED (newdecl) = 1; -+ } -+ /* If it's a definition of a global operator new or operator -+ delete, it must be default visibility. */ -+ if (NEW_DELETE_OPNAME_P (DECL_NAME (newdecl)) && DECL_INITIAL (newdecl) != NULL_TREE) -+ { -+ if (!DECL_FUNCTION_MEMBER_P (newdecl) && VISIBILITY_DEFAULT != DECL_VISIBILITY (newdecl)) -+ { -+ warning ("%J`%D': ignoring non-default symbol", -+ newdecl, newdecl); -+ warning ("%Jvisibility on global operator new or delete", newdecl); -+ DECL_VISIBILITY (olddecl) = VISIBILITY_DEFAULT; -+ DECL_VISIBILITYSPECIFIED (olddecl) = 1; -+ DECL_VISIBILITY (newdecl) = VISIBILITY_DEFAULT; -+ DECL_VISIBILITYSPECIFIED (newdecl) = 1; -+ } - } - - if (TREE_CODE (newdecl) == FUNCTION_DECL) - -diff -aur gcc-3.4.0orig/gcc/cp/method.c gcc-3.4.0/gcc/cp/method.c ---- gcc-3.4.0orig/gcc/cp/method.c 2004-04-08 23:15:58.000000000 +0100 -+++ gcc-3.4.0/gcc/cp/method.c 2004-05-09 08:10:52.000000000 +0100 -@@ -394,6 +394,7 @@ - rewrite. */ - TREE_PUBLIC (thunk_fndecl) = TREE_PUBLIC (function); - DECL_VISIBILITY (thunk_fndecl) = DECL_VISIBILITY (function); -+ DECL_VISIBILITYSPECIFIED (thunk_fndecl) = DECL_VISIBILITYSPECIFIED (function); - - if (flag_syntax_only) - { - -diff -aur gcc-3.4.0orig/gcc/cp/optimize.c gcc-3.4.0/gcc/cp/optimize.c ---- gcc-3.4.0orig/gcc/cp/optimize.c 2004-02-08 01:52:50.000000000 +0000 -+++ gcc-3.4.0/gcc/cp/optimize.c 2004-05-09 08:10:52.000000000 +0100 -@@ -155,6 +155,7 @@ - DECL_NOT_REALLY_EXTERN (clone) = DECL_NOT_REALLY_EXTERN (fn); - TREE_PUBLIC (clone) = TREE_PUBLIC (fn); - DECL_VISIBILITY (clone) = DECL_VISIBILITY (fn); -+ DECL_VISIBILITYSPECIFIED (clone) = DECL_VISIBILITYSPECIFIED (fn); - - /* Adjust the parameter names and locations. */ - parm = DECL_ARGUMENTS (fn); - -diff -aur gcc-3.4.0orig/gcc/cp/rtti.c gcc-3.4.0/gcc/cp/rtti.c ---- gcc-3.4.0orig/gcc/cp/rtti.c 2004-03-08 23:00:26.000000000 +0000 -+++ gcc-3.4.0/gcc/cp/rtti.c 2004-05-10 21:09:21.000000000 +0100 -@@ -361,7 +361,11 @@ - pushdecl_top_level_and_finish (d, NULL_TREE); - - if (CLASS_TYPE_P (type)) -- CLASSTYPE_TYPEINFO_VAR (TYPE_MAIN_VARIANT (type)) = d; -+ { -+ CLASSTYPE_TYPEINFO_VAR (TYPE_MAIN_VARIANT (type)) = d; -+ DECL_VISIBILITY (d) = CLASSTYPE_VISIBILITY (type); -+ DECL_VISIBILITYSPECIFIED (d) = CLASSTYPE_VISIBILITYSPECIFIED (type); -+ } - - /* Remember the type it is for. */ - TREE_TYPE (name) = type; -@@ -759,6 +763,11 @@ - TREE_STATIC (name_decl) = 1; - DECL_EXTERNAL (name_decl) = 0; - TREE_PUBLIC (name_decl) = 1; -+ if (CLASS_TYPE_P (target)) -+ { -+ DECL_VISIBILITY (name_decl) = CLASSTYPE_VISIBILITY (target); -+ DECL_VISIBILITYSPECIFIED (name_decl) = CLASSTYPE_VISIBILITYSPECIFIED (target); -+ } - import_export_tinfo (name_decl, target, typeinfo_in_lib_p (target)); - /* External name of the string containing the type's name has a - special name. */ - -diff -aur gcc-3.4.0orig/gcc/c-pragma.c gcc-3.4.0/gcc/c-pragma.c ---- gcc-3.4.0orig/gcc/c-pragma.c 2004-01-23 23:35:53.000000000 +0000 -+++ gcc-3.4.0/gcc/c-pragma.c 2004-05-09 08:10:52.000000000 +0100 -@@ -480,6 +480,86 @@ - return asmname; - } - -+ -+#ifdef HANDLE_PRAGMA_VISIBILITY -+static void handle_pragma_visibility (cpp_reader *); -+ -+/* Sets the default visibility for symbols to something other than that -+ specified on the command line. */ -+static void -+handle_pragma_visibility (cpp_reader *dummy ATTRIBUTE_UNUSED) -+{ /* Form is #pragma GCC visibility push(hidden)|pop */ -+ static int visstack [16], visidx; -+ tree x; -+ enum cpp_ttype token; -+ enum { bad, push, pop } action = bad; -+ -+ token = c_lex (&x); -+ if (token == CPP_NAME) -+ { -+ const char *op = IDENTIFIER_POINTER (x); -+ if (!strcmp (op, "push")) -+ action = push; -+ else if (!strcmp (op, "pop")) -+ action = pop; -+ } -+ if (bad == action) -+ GCC_BAD ("#pragma GCC visibility must be followed by push or pop"); -+ else -+ { -+ if (pop == action) -+ { -+ if (!visidx) -+ { -+ GCC_BAD ("No matching push for '#pragma GCC visibility pop'"); -+ } -+ else -+ { -+ default_visibility = visstack[--visidx]; -+ visibility_options.inpragma = (visidx>0); -+ } -+ } -+ else -+ { -+ if (c_lex (&x) != CPP_OPEN_PAREN) -+ GCC_BAD ("missing '(' after '#pragma GCC visibility push' - ignored"); -+ token = c_lex (&x); -+ if (token != CPP_NAME) -+ { -+ GCC_BAD ("malformed #pragma GCC visibility push"); -+ } -+ else if (visidx >= 16) -+ { -+ GCC_BAD ("No more than sixteen #pragma GCC visibility pushes allowed at once"); -+ } -+ else -+ { -+ const char *str = IDENTIFIER_POINTER (x); -+ visstack[visidx++] = default_visibility; -+ if (!strcmp (str, "default")) -+ default_visibility = VISIBILITY_DEFAULT; -+ else if (!strcmp (str, "internal")) -+ default_visibility = VISIBILITY_INTERNAL; -+ else if (!strcmp (str, "hidden")) -+ default_visibility = VISIBILITY_HIDDEN; -+ else if (!strcmp (str, "protected")) -+ default_visibility = VISIBILITY_PROTECTED; -+ else -+ { -+ GCC_BAD ("#pragma GCC visibility push() must specify default, internal, hidden or protected"); -+ } -+ visibility_options.inpragma = 1; -+ } -+ if (c_lex (&x) != CPP_CLOSE_PAREN) -+ GCC_BAD ("missing '(' after '#pragma GCC visibility push' - ignored"); -+ } -+ } -+ if (c_lex (&x) != CPP_EOF) -+ warning ("junk at end of '#pragma GCC visibility'"); -+} -+ -+#endif -+ - /* Front-end wrapper for pragma registration to avoid dragging - cpplib.h in almost everywhere. */ - void -@@ -505,6 +585,9 @@ - #ifdef HANDLE_PRAGMA_EXTERN_PREFIX - c_register_pragma (0, "extern_prefix", handle_pragma_extern_prefix); - #endif -+#ifdef HANDLE_PRAGMA_VISIBILITY -+ c_register_pragma ("GCC", "visibility", handle_pragma_visibility); -+#endif - - #ifdef REGISTER_TARGET_PRAGMAS - REGISTER_TARGET_PRAGMAS (); -diff -aur gcc-3.4.0orig/gcc/c-pragma.h gcc-3.4.0/gcc/c-pragma.h ---- gcc-3.4.0orig/gcc/c-pragma.h 2004-01-31 06:18:05.000000000 +0000 -+++ gcc-3.4.0/gcc/c-pragma.h 2004-05-09 08:10:53.000000000 +0100 -@@ -44,6 +44,11 @@ - #define HANDLE_PRAGMA_PACK 1 - #endif /* HANDLE_PRAGMA_PACK_PUSH_POP */ - -+/* It's safe to always leave visibility pragma enabled as if -+ visibility is not supported on the host OS platform the -+ statements are ignored. */ -+#define HANDLE_PRAGMA_VISIBILITY 1 -+ - extern void init_pragma (void); - - /* Front-end wrapper for pragma registration to avoid dragging - - -diff -aur gcc-3.4.0orig/gcc/doc/invoke.texi gcc-3.4.0/gcc/doc/invoke.texi ---- gcc-3.4.0orig/gcc/doc/invoke.texi 2004-04-19 00:05:36.000000000 +0100 -+++ gcc-3.4.0/gcc/doc/invoke.texi 2004-05-28 21:29:36.000000000 +0100 -@@ -183,7 +183,8 @@ - -fno-optional-diags -fpermissive @gol - -frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol - -fuse-cxa-atexit -fno-weak -nostdinc++ @gol ---fno-default-inline -Wabi -Wctor-dtor-privacy @gol -+-fno-default-inline -fvisibility-inlines-hidden @gol -+-Wabi -Wctor-dtor-privacy @gol - -Wnon-virtual-dtor -Wreorder @gol - -Weffc++ -Wno-deprecated @gol - -Wno-non-template-friend -Wold-style-cast @gol -@@ -674,7 +675,8 @@ - -fargument-alias -fargument-noalias @gol - -fargument-noalias-global -fleading-underscore @gol - -ftls-model=@var{model} @gol ---ftrapv -fwrapv -fbounds-check} -+-ftrapv -fwrapv -fbounds-check @gol -+-fvisibility} - @end table - - @menu -@@ -1433,6 +1435,20 @@ - destructors, but will only work if your C library supports - @code{__cxa_atexit}. - -+@item -fvisibility-inlines-hidden -+@opindex fvisibility-inlines-hidden -+Causes all inlined methods to be marked with -+@code{__attribute__ ((visibility ("hidden")))} so that they do not -+appear in the export table of a DSO and do not require a PLT indirection -+when used within the DSO. Enabling this option can have a dramatic effect -+on load and link times of a DSO as it massively reduces the size of the -+dynamic export table when the library makes heavy use of templates. While -+it can cause bloating through duplication of code within each DSO where -+it is used, often the wastage is less than the considerable space occupied -+by a long symbol name in the export table which is typical when using -+templates and namespaces. For even more savings, combine with the -+@code{-fvisibility=hidden} switch. -+ - @item -fno-weak - @opindex fno-weak - Do not use weak symbol support, even if it is provided by the linker. -@@ -11198,6 +11214,54 @@ - - The default without @option{-fpic} is @code{initial-exec}; with - @option{-fpic} the default is @code{global-dynamic}. -+ -+@item -fvisibility=@var{default|internal|hidden|protected} -+@opindex fvisibility -+Set the default ELF image symbol visibility to the specified option - all -+symbols will be marked with this unless overrided within the code. -+Using this feature can very substantially improve linking and -+load times of shared object libraries, produce more optimised -+code, provide near-perfect API export and prevent symbol clashes. -+It is @strong{strongly} recommended that you use this in any shared objects -+you distribute. -+ -+Despite the nomenclature, @code{default} always means public ie; -+available to be linked against from outside the shared object. -+@code{protected} and @code{internal} are pretty useless in real-world -+usage so the only other commonly used option will be @code{hidden}. -+The default if -fvisibility isn't specified is @code{default} ie; make every -+symbol public - this causes the same behaviour as previous versions of -+GCC. -+ -+A good explanation of the benefits offered by ensuring ELF -+symbols have the correct visibility is given by ``How To Write -+Shared Libraries'' by Ulrich Drepper (which can be found at -+@w{@uref{http://people.redhat.com/~drepper/}}) - however a superior -+solution made possible by this option to marking things hidden when -+the default is public is to make the default hidden and mark things -+public. This is the norm with DLL's on Windows and with @option{-fvisibility=hidden} -+and @code{__attribute__ ((visibility("default")))} instead of -+@code{__declspec(dllexport)} you get almost identical semantics with -+identical syntax. This is a great boon to those working with -+cross-platform projects. -+ -+For those adding visibility support to existing code, you may find -+@samp{#pragma GCC visibility} of use. This works by you enclosing -+the declarations you wish to set visibility for with (for example) -+@samp{#pragma GCC visibility push(hidden)} and -+@samp{#pragma GCC visibility pop}. These can be nested up to sixteen -+times. Bear in mind that symbol visibility should be viewed @strong{as -+part of the API interface contract} and thus all new code should -+always specify visibility when it is not the default ie; declarations -+only for use within the local DSO should @strong{always} be marked explicitly -+as hidden as so to avoid PLT indirection overheads - making this -+abundantly clear also aids readability and self-documentation of the code. -+Note that due to ISO C++ specification requirements, operator new and -+operator delete must always be of default visibility. -+ -+An overview of these techniques, their benefits and how to use them -+is at @w{@uref{http://www.nedprod.com/programs/gccvisibility.html}}. -+ - @end table - - @c man end - -diff -aur gcc-3.4.0orig/gcc/flags.h gcc-3.4.0/gcc/flags.h ---- gcc-3.4.0orig/gcc/flags.h 2004-02-18 00:09:04.000000000 +0000 -+++ gcc-3.4.0/gcc/flags.h 2004-05-09 08:10:53.000000000 +0100 -@@ -60,6 +60,30 @@ - /* Nonzero means emit debugging information only for symbols which are used. */ - extern int flag_debug_only_used_symbols; - -+/* Enumerate visibility settings. */ -+#ifndef SYMBOL_VISIBILITY_DEFINED -+#define SYMBOL_VISIBILITY_DEFINED -+enum symbol_visibility -+{ -+ VISIBILITY_DEFAULT, -+ VISIBILITY_INTERNAL, -+ VISIBILITY_HIDDEN, -+ VISIBILITY_PROTECTED -+}; -+#endif -+ -+/* The default visibility for all symbols (unless overridden). */ -+extern enum symbol_visibility default_visibility; -+ -+struct visibility_flags -+{ -+ unsigned inpragma : 1; /* True when in #pragma GCC visibility. */ -+ unsigned inlineshidden : 1; /* True when -finlineshidden in effect. */ -+}; -+ -+/* Global visibility options. */ -+extern struct visibility_flags visibility_options; -+ - /* Nonzero means do optimizations. -opt. */ - - extern int optimize; - -diff -aur gcc-3.4.0orig/gcc/opts.c gcc-3.4.0/gcc/opts.c ---- gcc-3.4.0orig/gcc/opts.c 2004-02-18 00:09:04.000000000 +0000 -+++ gcc-3.4.0/gcc/opts.c 2004-05-09 08:10:53.000000000 +0100 -@@ -142,6 +142,12 @@ - write_symbols is set to DBX_DEBUG, XCOFF_DEBUG, or DWARF_DEBUG. */ - bool use_gnu_debug_info_extensions; - -+/* The default visibility for all symbols (unless overridden) */ -+enum symbol_visibility default_visibility = VISIBILITY_DEFAULT; -+ -+/* Global visibility options. */ -+struct visibility_flags visibility_options; -+ - /* Columns of --help display. */ - static unsigned int columns = 80; - -@@ -1440,6 +1446,21 @@ - flag_verbose_asm = value; - break; - -+ case OPT_fvisibility_: -+ { -+ if(!strcmp(arg, "default")) -+ default_visibility=VISIBILITY_DEFAULT; -+ else if(!strcmp(arg, "internal")) -+ default_visibility=VISIBILITY_INTERNAL; -+ else if(!strcmp(arg, "hidden")) -+ default_visibility=VISIBILITY_HIDDEN; -+ else if(!strcmp(arg, "protected")) -+ default_visibility=VISIBILITY_PROTECTED; -+ else -+ error("unrecognised visibility value \"%s\"", arg); -+ } -+ break; -+ - case OPT_fweb: - flag_web = value; - break; - -diff -aur gcc-3.4.0orig/gcc/tree.c gcc-3.4.0/gcc/tree.c ---- gcc-3.4.0orig/gcc/tree.c 2004-02-05 22:01:35.000000000 +0000 -+++ gcc-3.4.0/gcc/tree.c 2004-05-10 15:22:52.000000000 +0100 -@@ -2563,6 +2563,11 @@ - layout_decl (t, 0); - else if (code == FUNCTION_DECL) - DECL_MODE (t) = FUNCTION_MODE; -+ -+ /* Set default visibility to whatever the user supplied with -+ visibility_specified depending on #pragma GCC visibility. */ -+ DECL_VISIBILITY (t) = default_visibility; -+ DECL_VISIBILITYSPECIFIED (t) = visibility_options.inpragma; - - return t; - } - -diff -aur gcc-3.4.0orig/gcc/tree.h gcc-3.4.0/gcc/tree.h ---- gcc-3.4.0orig/gcc/tree.h 2004-02-08 01:52:43.000000000 +0000 -+++ gcc-3.4.0/gcc/tree.h 2004-05-09 08:10:54.000000000 +0100 -@@ -1499,6 +1499,10 @@ - /* Value of the decls's visibility attribute */ - #define DECL_VISIBILITY(NODE) (DECL_CHECK (NODE)->decl.visibility) - -+/* Nonzero means that the decl had its visibility specified rather than -+ being inferred. */ -+#define DECL_VISIBILITYSPECIFIED(NODE) (DECL_CHECK (NODE)->decl.visibility_specified) -+ - /* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */ - #define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable) - -@@ -1633,7 +1637,8 @@ - || TREE_CODE (DECL_CONTEXT (EXP)) == TRANSLATION_UNIT_DECL) - - /* Enumerate visibility settings. */ -- -+#ifndef SYMBOL_VISIBILITY_DEFINED -+#define SYMBOL_VISIBILITY_DEFINED - enum symbol_visibility - { - VISIBILITY_DEFAULT, -@@ -1641,6 +1646,7 @@ - VISIBILITY_HIDDEN, - VISIBILITY_PROTECTED - }; -+#endif - - struct function; - -@@ -1684,8 +1690,7 @@ - unsigned thread_local_flag : 1; - unsigned declared_inline_flag : 1; - ENUM_BITFIELD(symbol_visibility) visibility : 2; -- unsigned unused : 1; -- /* one unused bit. */ -+ unsigned visibility_specified : 1; - - unsigned lang_flag_0 : 1; - unsigned lang_flag_1 : 1; - -diff -aur gcc-3.4.0orig/gcc/varasm.c gcc-3.4.0/gcc/varasm.c ---- gcc-3.4.0orig/gcc/varasm.c 2004-04-14 22:14:08.000000000 +0100 -+++ gcc-3.4.0/gcc/varasm.c 2004-05-09 08:10:54.000000000 +0100 -@@ -5150,8 +5150,8 @@ - /* Static variables are always local. */ - else if (! TREE_PUBLIC (exp)) - local_p = true; -- /* A variable is local if the user tells us so. */ -- else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT) -+ /* A variable is local if the user explicitly tells us so. */ -+ else if (DECL_VISIBILITYSPECIFIED (exp) && DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT) - local_p = true; - /* Otherwise, variables defined outside this object may not be local. */ - else if (DECL_EXTERNAL (exp)) -@@ -5159,6 +5159,9 @@ - /* Linkonce and weak data are never local. */ - else if (DECL_ONE_ONLY (exp) || DECL_WEAK (exp)) - local_p = false; -+ /* If none of the above and visibility is not default, make local. */ -+ else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT) -+ local_p = true; - /* If PIC, then assume that any global name can be overridden by - symbols resolved from other modules. */ - else if (shlib) - -- 2.43.0