Sprout from master 2004-10-12 20:50:53 UTC undefine <undefine@pld-linux.org> '- patch from'
Delete:
c++filt.1
gcc-O2-bug.patch
gcc-ada-bootstrap.patch
gcc-ada-link.patch
gcc-alpha-complex-float.patch
gcc-bootstrap.patch
gcc-builtin-apply.patch
gcc-cpp-dos-newlines.patch
gcc-cpp-macro-doc.patch
gcc-crtendS.patch
gcc-default-arch.patch
gcc-disableshared.patch
gcc-gcc-page.c.patch
gcc-gcj-vs-iconv.patch
gcc-gpc.patch
gcc-libobjc.patch
gcc-libstdc++-bastring.patch
gcc-libstdc++-out-of-mem.patch
gcc-libstdc++-wstring.patch
gcc-libstdc++.patch
gcc-m68k-pic.patch
gcc-manpage.patch
gcc-march-i686-fix.patch
gcc-pld-linux.patch
gcc-pointer-arith.patch
gcc-ppc-ada-hack.patch
gcc-ppc-descriptions.patch
gcc-ppc-ice.patch
gcc-pr15666.patch
gcc-sparc32-rfi.patch
gcc-visibility.patch
gcc32-attr-visibility.patch
gcc32-attr-visibility2.patch
gcc32-attr-visibility3.patch
gcc32-attr-visibility4.patch
gcc32-attr-visibility5.patch
gcc32-c++-pretty_function.patch
gcc32-cfg-eh.patch
gcc32-doc-gcov.patch
gcc32-hard-reg-sharing.patch
gcc32-hard-reg-sharing2.patch
gcc32-i386-default-momit-leaf-frame-pointer.patch
gcc32-i386-no-default-momit-leaf-frame-pointer.patch
gcc32-i386-pic-label-thunk.patch
gcc32-i386-profile-olfp.patch
gcc32-libstdc++-glibc.patch
gcc32-locale_in_ctype_members.patch
gcc32-locale_in_ctype_members_header.patch
gcc32-locale_in_monetary_members.patch
gcc32-pr6842.patch
gcc32-sparc-sll1.patch
gcc32-tls-dwarf2.patch
gcc32-tls.patch
gcc32-tls2.patch
gcc32-tls3.patch
gcc32-tls4.patch
gcc32-tls5.patch
gcov.1
+++ /dev/null
-.\" Automatically generated by Pod::Man version 1.15
-.\" Tue Sep 18 12:11:39 2001
-.\"
-.\" Standard preamble:
-.\" ======================================================================
-.de Sh \" Subsection heading
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb \" Begin verbatim text
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve \" End verbatim text
-.ft R
-
-.fi
-..
-.\" Set up some character translations and predefined strings. \*(-- will
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
-.\" double quote, and \*(R" will give a right double quote. | will give a
-.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used
-.\" to do unbreakable dashes and therefore won't be available. \*(C` and
-.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
-.tr \(*W-|\(bv\*(Tr
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.ie n \{\
-. ds -- \(*W-
-. ds PI pi
-. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-. ds L" ""
-. ds R" ""
-. ds C` ""
-. ds C' ""
-'br\}
-.el\{\
-. ds -- \|\(em\|
-. ds PI \(*p
-. ds L" ``
-. ds R" ''
-'br\}
-.\"
-.\" If the F register is turned on, we'll generate index entries on stderr
-.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
-.\" index entries marked with X<> in POD. Of course, you'll have to process
-.\" the output yourself in some meaningful fashion.
-.if \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
-..
-. nr % 0
-. rr F
-.\}
-.\"
-.\" For nroff, turn off justification. Always turn off hyphenation; it
-.\" makes way too many mistakes in technical documents.
-.hy 0
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear. Run. Save yourself. No user-serviceable parts.
-.bd B 3
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds /
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
-.\" ======================================================================
-.\"
-.IX Title "C++FILT 1"
-.TH C++FILT 1 "binutils-2.11.90.0.27" "2001-09-18" "GNU"
-.UC
-.SH "NAME"
-c++filt \- Demangle \*(C+ and Java symbols.
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-c++filt [\fB\-_\fR|\fB\*(--strip-underscores\fR]
- [\fB\-j\fR|\fB\*(--java\fR]
- [\fB\-n\fR|\fB\*(--no-strip-underscores\fR]
- [\fB\-s\fR \fIformat\fR|\fB\*(--format=\fR\fIformat\fR]
- [\fB\*(--help\fR] [\fB\*(--version\fR] [\fIsymbol\fR...]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-The \*(C+ and Java languages provides function overloading, which means
-that you can write many functions with the same name (providing each
-takes parameters of different types). All \*(C+ and Java function names
-are encoded into a low-level assembly label (this process is known as
-\&\fImangling\fR). The \fBc++filt\fR
-[1]
-program does the inverse mapping: it decodes (\fIdemangles\fR) low-level
-names into user-level names so that the linker can keep these overloaded
-functions from clashing.
-.PP
-Every alphanumeric word (consisting of letters, digits, underscores,
-dollars, or periods) seen in the input is a potential label. If the
-label decodes into a \*(C+ name, the \*(C+ name replaces the low-level
-name in the output.
-.PP
-You can use \fBc++filt\fR to decipher individual symbols:
-.PP
-.Vb 1
-\& c++filt I<symbol>
-.Ve
-If no \fIsymbol\fR arguments are given, \fBc++filt\fR reads symbol
-names from the standard input and writes the demangled names to the
-standard output. All results are printed on the standard output.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.Ip "\fB\-_\fR" 4
-.IX Item "-_"
-.PD 0
-.Ip "\fB\*(--strip-underscores\fR" 4
-.IX Item "strip-underscores"
-.PD
-On some systems, both the C and \*(C+ compilers put an underscore in front
-of every name. For example, the C name \f(CW\*(C`foo\*(C'\fR gets the low-level
-name \f(CW\*(C`_foo\*(C'\fR. This option removes the initial underscore. Whether
-\&\fBc++filt\fR removes the underscore by default is target dependent.
-.Ip "\fB\-j\fR" 4
-.IX Item "-j"
-.PD 0
-.Ip "\fB\*(--java\fR" 4
-.IX Item "java"
-.PD
-Prints demangled names using Java syntax. The default is to use \*(C+
-syntax.
-.Ip "\fB\-n\fR" 4
-.IX Item "-n"
-.PD 0
-.Ip "\fB\*(--no-strip-underscores\fR" 4
-.IX Item "no-strip-underscores"
-.PD
-Do not remove the initial underscore.
-.Ip "\fB\-s\fR \fIformat\fR" 4
-.IX Item "-s format"
-.PD 0
-.Ip "\fB\*(--format=\fR\fIformat\fR" 4
-.IX Item "format=format"
-.PD
-\&\s-1GNU\s0 \fBnm\fR can decode three different methods of mangling, used by
-different \*(C+ compilers. The argument to this option selects which
-method it uses:
-.RS 4
-.if n .Ip "\f(CW""""gnu""""\fR" 4
-.el .Ip "\f(CWgnu\fR" 4
-.IX Item "gnu"
-the one used by the \s-1GNU\s0 compiler (the default method)
-.if n .Ip "\f(CW""""lucid""""\fR" 4
-.el .Ip "\f(CWlucid\fR" 4
-.IX Item "lucid"
-the one used by the Lucid compiler
-.if n .Ip "\f(CW""""arm""""\fR" 4
-.el .Ip "\f(CWarm\fR" 4
-.IX Item "arm"
-the one specified by the \*(C+ Annotated Reference Manual
-.if n .Ip "\f(CW""""hp""""\fR" 4
-.el .Ip "\f(CWhp\fR" 4
-.IX Item "hp"
-the one used by the \s-1HP\s0 compiler
-.if n .Ip "\f(CW""""edg""""\fR" 4
-.el .Ip "\f(CWedg\fR" 4
-.IX Item "edg"
-the one used by the \s-1EDG\s0 compiler
-.if n .Ip "\f(CW""""gnu\-new\-abi""""\fR" 4
-.el .Ip "\f(CWgnu\-new\-abi\fR" 4
-.IX Item "gnu-new-abi"
-the one used by the \s-1GNU\s0 compiler with the new \s-1ABI\s0.
-.RE
-.RS 4
-.RE
-.Ip "\fB\*(--help\fR" 4
-.IX Item "help"
-Print a summary of the options to \fBc++filt\fR and exit.
-.Ip "\fB\*(--version\fR" 4
-.IX Item "version"
-Print the version number of \fBc++filt\fR and exit.
-.SH "FOOTNOTES"
-.IX Header "FOOTNOTES"
-.Ip "1." 4
-\&\s-1MS-DOS\s0 does not allow \f(CW\*(C`+\*(C'\fR characters in file names, so on
-\&\s-1MS-DOS\s0 this program is named \fBc++filt\fR.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-the Info entries for \fIbinutils\fR.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc.
-.PP
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1
-or any later version published by the Free Software Foundation;
-with no Invariant Sections, with no Front-Cover Texts, and with no
-Back-Cover Texts. A copy of the license is included in the
-section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
+++ /dev/null
-diff -urN gcc-2.95.2.org/gcc/reload1.c gcc-2.95.2/gcc/reload1.c
---- gcc-2.95.2.org/gcc/reload1.c Sat Nov 25 01:48:15 2000
-+++ gcc-2.95.2/gcc/reload1.c Sat Nov 25 01:52:07 2000
-@@ -423,6 +423,7 @@
- static int reload_reg_reaches_end_p PROTO((int, int, enum reload_type));
- static int allocate_reload_reg PROTO((struct insn_chain *, int, int,
- int));
-+static int conflicts_with_override PROTO((rtx));
- static void choose_reload_regs PROTO((struct insn_chain *));
- static void merge_assigned_reloads PROTO((rtx));
- static void emit_reload_insns PROTO((struct insn_chain *));
-@@ -5594,6 +5595,21 @@
-
- return 1;
- }
-+
-+/* Determine whether the reload reg X overlaps any rtx'es used for
-+ overriding inheritance. Return nonzero if so. */
-+
-+static int
-+conflicts_with_override (x)
-+ rtx x;
-+{
-+ int i;
-+ for (i = 0; i < n_reloads; i++)
-+ if (reload_override_in[i]
-+ && reg_overlap_mentioned_p (x, reload_override_in[i]))
-+ return 1;
-+ return 0;
-+}
- \f
- /* Assign hard reg targets for the pseudo-registers we must reload
- into hard regs for this insn.
-@@ -6791,6 +6807,7 @@
- && dead_or_set_p (insn, old)
- /* This is unsafe if some other reload
- uses the same reg first. */
-+ && ! conflicts_with_override (reloadreg)
- && reload_reg_free_for_value_p (REGNO (reloadreg),
- reload_opnum[j],
- reload_when_needed[j],
-
+++ /dev/null
---- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/sinfo.h.orig 1970-01-01 01:00:00.000000000 +0100
-+++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/sinfo.h 2004-06-02 00:54:16.000000000 +0200
-@@ -0,0 +1,847 @@
-+/*--------------------------------------------------------------------------*/
-+/* */
-+/* GNAT COMPILER COMPONENTS */
-+/* */
-+/* S I N F O */
-+/* */
-+/* C Header File */
-+/* */
-+/* Copyright (C) 1992-2004, Free Software Foundation, Inc. */
-+/* */
-+/* GNAT is free software; you can redistribute it and/or modify it under */
-+/* terms of the GNU General Public License as published by the Free Soft- */
-+/* ware Foundation; either version 2, or (at your option) any later ver- */
-+/* sion. GNAT is distributed in the hope that it will be useful, but WITH- */
-+/* OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY */
-+/* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License */
-+/* for more details. You should have received a copy of the GNU General */
-+/* Public License distributed with GNAT; see file COPYING. If not, write */
-+/* to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, */
-+/* MA 02111-1307, USA. */
-+/* */
-+/* As a special exception, if other files instantiate generics from this */
-+/* unit, or you link this unit with other files to produce an executable, */
-+/* this unit does not by itself cause the resulting executable to be */
-+/* covered by the GNU General Public License. This exception does not */
-+/* however invalidate any other reasons why the executable file might be */
-+/* covered by the GNU Public License. */
-+/* */
-+/* GNAT was originally developed by the GNAT team at New York University. */
-+/* Extensive contributions were provided by Ada Core Technologies Inc. */
-+/* */
-+/*--------------------------------------------------------------------------*/
-+
-+ #define N_Unused_At_Start 0
-+ #define N_At_Clause 1
-+ #define N_Component_Clause 2
-+ #define N_Enumeration_Representation_Clause 3
-+ #define N_Mod_Clause 4
-+ #define N_Record_Representation_Clause 5
-+ #define N_Attribute_Definition_Clause 6
-+ #define N_Empty 7
-+ #define N_Pragma 8
-+ #define N_Pragma_Argument_Association 9
-+ #define N_Error 10
-+ #define N_Defining_Character_Literal 11
-+ #define N_Defining_Identifier 12
-+ #define N_Defining_Operator_Symbol 13
-+ #define N_Expanded_Name 14
-+ #define N_Identifier 15
-+ #define N_Operator_Symbol 16
-+ #define N_Character_Literal 17
-+ #define N_Op_Add 18
-+ #define N_Op_Concat 19
-+ #define N_Op_Expon 20
-+ #define N_Op_Subtract 21
-+ #define N_Op_Divide 22
-+ #define N_Op_Mod 23
-+ #define N_Op_Multiply 24
-+ #define N_Op_Rem 25
-+ #define N_Op_And 26
-+ #define N_Op_Eq 27
-+ #define N_Op_Ge 28
-+ #define N_Op_Gt 29
-+ #define N_Op_Le 30
-+ #define N_Op_Lt 31
-+ #define N_Op_Ne 32
-+ #define N_Op_Or 33
-+ #define N_Op_Xor 34
-+ #define N_Op_Rotate_Left 35
-+ #define N_Op_Rotate_Right 36
-+ #define N_Op_Shift_Left 37
-+ #define N_Op_Shift_Right 38
-+ #define N_Op_Shift_Right_Arithmetic 39
-+ #define N_Op_Abs 40
-+ #define N_Op_Minus 41
-+ #define N_Op_Not 42
-+ #define N_Op_Plus 43
-+ #define N_Attribute_Reference 44
-+ #define N_And_Then 45
-+ #define N_Conditional_Expression 46
-+ #define N_Explicit_Dereference 47
-+ #define N_Function_Call 48
-+ #define N_In 49
-+ #define N_Indexed_Component 50
-+ #define N_Integer_Literal 51
-+ #define N_Not_In 52
-+ #define N_Null 53
-+ #define N_Or_Else 54
-+ #define N_Procedure_Call_Statement 55
-+ #define N_Qualified_Expression 56
-+ #define N_Raise_Constraint_Error 57
-+ #define N_Raise_Program_Error 58
-+ #define N_Raise_Storage_Error 59
-+ #define N_Aggregate 60
-+ #define N_Allocator 61
-+ #define N_Extension_Aggregate 62
-+ #define N_Range 63
-+ #define N_Real_Literal 64
-+ #define N_Reference 65
-+ #define N_Selected_Component 66
-+ #define N_Slice 67
-+ #define N_String_Literal 68
-+ #define N_Subprogram_Info 69
-+ #define N_Type_Conversion 70
-+ #define N_Unchecked_Expression 71
-+ #define N_Unchecked_Type_Conversion 72
-+ #define N_Subtype_Indication 73
-+ #define N_Component_Declaration 74
-+ #define N_Entry_Declaration 75
-+ #define N_Formal_Object_Declaration 76
-+ #define N_Formal_Type_Declaration 77
-+ #define N_Full_Type_Declaration 78
-+ #define N_Incomplete_Type_Declaration 79
-+ #define N_Loop_Parameter_Specification 80
-+ #define N_Object_Declaration 81
-+ #define N_Protected_Type_Declaration 82
-+ #define N_Private_Extension_Declaration 83
-+ #define N_Private_Type_Declaration 84
-+ #define N_Subtype_Declaration 85
-+ #define N_Function_Specification 86
-+ #define N_Procedure_Specification 87
-+ #define N_Entry_Index_Specification 88
-+ #define N_Freeze_Entity 89
-+ #define N_Access_Function_Definition 90
-+ #define N_Access_Procedure_Definition 91
-+ #define N_Task_Type_Declaration 92
-+ #define N_Package_Body_Stub 93
-+ #define N_Protected_Body_Stub 94
-+ #define N_Subprogram_Body_Stub 95
-+ #define N_Task_Body_Stub 96
-+ #define N_Function_Instantiation 97
-+ #define N_Package_Instantiation 98
-+ #define N_Procedure_Instantiation 99
-+ #define N_Package_Body 100
-+ #define N_Subprogram_Body 101
-+ #define N_Protected_Body 102
-+ #define N_Task_Body 103
-+ #define N_Implicit_Label_Declaration 104
-+ #define N_Package_Declaration 105
-+ #define N_Single_Task_Declaration 106
-+ #define N_Subprogram_Declaration 107
-+ #define N_Use_Package_Clause 108
-+ #define N_Generic_Package_Declaration 109
-+ #define N_Generic_Subprogram_Declaration 110
-+ #define N_Constrained_Array_Definition 111
-+ #define N_Unconstrained_Array_Definition 112
-+ #define N_Exception_Renaming_Declaration 113
-+ #define N_Object_Renaming_Declaration 114
-+ #define N_Package_Renaming_Declaration 115
-+ #define N_Subprogram_Renaming_Declaration 116
-+ #define N_Generic_Function_Renaming_Declaration 117
-+ #define N_Generic_Package_Renaming_Declaration 118
-+ #define N_Generic_Procedure_Renaming_Declaration 119
-+ #define N_Abort_Statement 120
-+ #define N_Accept_Statement 121
-+ #define N_Assignment_Statement 122
-+ #define N_Asynchronous_Select 123
-+ #define N_Block_Statement 124
-+ #define N_Case_Statement 125
-+ #define N_Code_Statement 126
-+ #define N_Conditional_Entry_Call 127
-+ #define N_Delay_Relative_Statement 128
-+ #define N_Delay_Until_Statement 129
-+ #define N_Entry_Call_Statement 130
-+ #define N_Free_Statement 131
-+ #define N_Goto_Statement 132
-+ #define N_Loop_Statement 133
-+ #define N_Null_Statement 134
-+ #define N_Raise_Statement 135
-+ #define N_Requeue_Statement 136
-+ #define N_Return_Statement 137
-+ #define N_Selective_Accept 138
-+ #define N_Timed_Entry_Call 139
-+ #define N_Exit_Statement 140
-+ #define N_If_Statement 141
-+ #define N_Accept_Alternative 142
-+ #define N_Delay_Alternative 143
-+ #define N_Elsif_Part 144
-+ #define N_Entry_Body_Formal_Part 145
-+ #define N_Iteration_Scheme 146
-+ #define N_Terminate_Alternative 147
-+ #define N_Abortable_Part 148
-+ #define N_Abstract_Subprogram_Declaration 149
-+ #define N_Access_Definition 150
-+ #define N_Access_To_Object_Definition 151
-+ #define N_Case_Statement_Alternative 152
-+ #define N_Compilation_Unit 153
-+ #define N_Compilation_Unit_Aux 154
-+ #define N_Component_Association 155
-+ #define N_Component_Definition 156
-+ #define N_Component_List 157
-+ #define N_Derived_Type_Definition 158
-+ #define N_Decimal_Fixed_Point_Definition 159
-+ #define N_Defining_Program_Unit_Name 160
-+ #define N_Delta_Constraint 161
-+ #define N_Designator 162
-+ #define N_Digits_Constraint 163
-+ #define N_Discriminant_Association 164
-+ #define N_Discriminant_Specification 165
-+ #define N_Enumeration_Type_Definition 166
-+ #define N_Entry_Body 167
-+ #define N_Entry_Call_Alternative 168
-+ #define N_Exception_Declaration 169
-+ #define N_Exception_Handler 170
-+ #define N_Floating_Point_Definition 171
-+ #define N_Formal_Decimal_Fixed_Point_Definition 172
-+ #define N_Formal_Derived_Type_Definition 173
-+ #define N_Formal_Discrete_Type_Definition 174
-+ #define N_Formal_Floating_Point_Definition 175
-+ #define N_Formal_Modular_Type_Definition 176
-+ #define N_Formal_Ordinary_Fixed_Point_Definition 177
-+ #define N_Formal_Package_Declaration 178
-+ #define N_Formal_Private_Type_Definition 179
-+ #define N_Formal_Signed_Integer_Type_Definition 180
-+ #define N_Formal_Subprogram_Declaration 181
-+ #define N_Generic_Association 182
-+ #define N_Handled_Sequence_Of_Statements 183
-+ #define N_Index_Or_Discriminant_Constraint 184
-+ #define N_Itype_Reference 185
-+ #define N_Label 186
-+ #define N_Modular_Type_Definition 187
-+ #define N_Number_Declaration 188
-+ #define N_Ordinary_Fixed_Point_Definition 189
-+ #define N_Others_Choice 190
-+ #define N_Package_Specification 191
-+ #define N_Parameter_Association 192
-+ #define N_Parameter_Specification 193
-+ #define N_Protected_Definition 194
-+ #define N_Range_Constraint 195
-+ #define N_Real_Range_Specification 196
-+ #define N_Record_Definition 197
-+ #define N_Signed_Integer_Type_Definition 198
-+ #define N_Single_Protected_Declaration 199
-+ #define N_Subunit 200
-+ #define N_Task_Definition 201
-+ #define N_Triggering_Alternative 202
-+ #define N_Use_Type_Clause 203
-+ #define N_Validate_Unchecked_Conversion 204
-+ #define N_Variant 205
-+ #define N_Variant_Part 206
-+ #define N_With_Clause 207
-+ #define N_With_Type_Clause 208
-+ #define N_Unused_At_End 209
-+
-+ #define Number_Node_Kinds 210
-+ SUBTYPE (N_Access_To_Subprogram_Definition, Node_Kind,
-+ N_Access_Function_Definition,
-+ N_Access_Procedure_Definition)
-+ SUBTYPE (N_Array_Type_Definition, Node_Kind,
-+ N_Constrained_Array_Definition,
-+ N_Unconstrained_Array_Definition)
-+ SUBTYPE (N_Binary_Op, Node_Kind,
-+ N_Op_Add,
-+ N_Op_Shift_Right_Arithmetic)
-+ SUBTYPE (N_Body_Stub, Node_Kind,
-+ N_Package_Body_Stub,
-+ N_Task_Body_Stub)
-+ SUBTYPE (N_Declaration, Node_Kind,
-+ N_Component_Declaration,
-+ N_Procedure_Specification)
-+ SUBTYPE (N_Direct_Name, Node_Kind,
-+ N_Identifier,
-+ N_Character_Literal)
-+ SUBTYPE (N_Entity, Node_Kind,
-+ N_Defining_Character_Literal,
-+ N_Defining_Operator_Symbol)
-+ SUBTYPE (N_Generic_Declaration, Node_Kind,
-+ N_Generic_Package_Declaration,
-+ N_Generic_Subprogram_Declaration)
-+ SUBTYPE (N_Generic_Instantiation, Node_Kind,
-+ N_Function_Instantiation,
-+ N_Procedure_Instantiation)
-+ SUBTYPE (N_Generic_Renaming_Declaration, Node_Kind,
-+ N_Generic_Function_Renaming_Declaration,
-+ N_Generic_Procedure_Renaming_Declaration)
-+ SUBTYPE (N_Has_Chars, Node_Kind,
-+ N_Attribute_Definition_Clause,
-+ N_Op_Plus)
-+ SUBTYPE (N_Has_Entity, Node_Kind,
-+ N_Expanded_Name,
-+ N_Attribute_Reference)
-+ SUBTYPE (N_Has_Etype, Node_Kind,
-+ N_Error,
-+ N_Subtype_Indication)
-+ SUBTYPE (N_Has_Treat_Fixed_As_Integer, Node_Kind,
-+ N_Op_Divide,
-+ N_Op_Rem)
-+ SUBTYPE (N_Later_Decl_Item, Node_Kind,
-+ N_Task_Type_Declaration,
-+ N_Generic_Subprogram_Declaration)
-+ SUBTYPE (N_Op, Node_Kind,
-+ N_Op_Add,
-+ N_Op_Plus)
-+ SUBTYPE (N_Op_Boolean, Node_Kind,
-+ N_Op_And,
-+ N_Op_Xor)
-+ SUBTYPE (N_Op_Compare, Node_Kind,
-+ N_Op_Eq,
-+ N_Op_Ne)
-+ SUBTYPE (N_Op_Shift, Node_Kind,
-+ N_Op_Rotate_Left,
-+ N_Op_Shift_Right_Arithmetic)
-+ SUBTYPE (N_Proper_Body, Node_Kind,
-+ N_Package_Body,
-+ N_Task_Body)
-+ SUBTYPE (N_Raise_xxx_Error, Node_Kind,
-+ N_Raise_Constraint_Error,
-+ N_Raise_Storage_Error)
-+ SUBTYPE (N_Renaming_Declaration, Node_Kind,
-+ N_Exception_Renaming_Declaration,
-+ N_Generic_Procedure_Renaming_Declaration)
-+ SUBTYPE (N_Representation_Clause, Node_Kind,
-+ N_At_Clause,
-+ N_Attribute_Definition_Clause)
-+ SUBTYPE (N_Statement_Other_Than_Procedure_Call, Node_Kind,
-+ N_Abort_Statement,
-+ N_If_Statement)
-+ SUBTYPE (N_Has_Condition, Node_Kind,
-+ N_Exit_Statement,
-+ N_Terminate_Alternative)
-+ SUBTYPE (N_Subexpr, Node_Kind,
-+ N_Expanded_Name,
-+ N_Unchecked_Type_Conversion)
-+ SUBTYPE (N_Subprogram_Specification, Node_Kind,
-+ N_Function_Specification,
-+ N_Procedure_Specification)
-+ SUBTYPE (N_Unary_Op, Node_Kind,
-+ N_Op_Abs,
-+ N_Op_Plus)
-+ SUBTYPE (N_Unit_Body, Node_Kind,
-+ N_Package_Body,
-+ N_Subprogram_Body)
-+ INLINE Boolean ABE_Is_Certain (Node_Id N)
-+ { return Flag18 (N); }
-+ INLINE Boolean Abort_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Node_Id Abortable_Part (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Boolean Abstract_Present (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE List_Id Accept_Handler_Records (Node_Id N)
-+ { return List5 (N); }
-+ INLINE Node_Id Accept_Statement (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Elist_Id Access_Types_To_Process (Node_Id N)
-+ { return Elist2 (N); }
-+ INLINE List_Id Actions (Node_Id N)
-+ { return List1 (N); }
-+ INLINE Node_Id Activation_Chain_Entity (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Acts_As_Spec (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE Node_Id Aggregate_Bounds (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Aliased_Present (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE Boolean All_Others (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Boolean All_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE List_Id Alternatives (Node_Id N)
-+ { return List4 (N); }
-+ INLINE Node_Id Ancestor_Part (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Node_Id Array_Aggregate (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Assignment_OK (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Node_Id Associated_Node (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id At_End_Proc (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Name_Id Attribute_Name (Node_Id N)
-+ { return Name2 (N); }
-+ INLINE Node_Id Aux_Decls_Node (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Boolean Backwards_OK (Node_Id N)
-+ { return Flag6 (N); }
-+ INLINE Boolean Bad_Is_Detected (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Boolean By_Ref (Node_Id N)
-+ { return Flag5 (N); }
-+ INLINE Boolean Body_Required (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Node_Id Body_To_Inline (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Box_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Char_Code Char_Literal_Value (Node_Id N)
-+ { return Char_Code2 (N); }
-+ INLINE Name_Id Chars (Node_Id N)
-+ { return Name1 (N); }
-+ INLINE Boolean Check_Address_Alignment (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Node_Id Choice_Parameter (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE List_Id Choices (Node_Id N)
-+ { return List1 (N); }
-+ INLINE Boolean Compile_Time_Known_Aggregate (Node_Id N)
-+ { return Flag18 (N); }
-+ INLINE List_Id Component_Associations (Node_Id N)
-+ { return List2 (N); }
-+ INLINE List_Id Component_Clauses (Node_Id N)
-+ { return List3 (N); }
-+ INLINE Node_Id Component_Definition (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE List_Id Component_Items (Node_Id N)
-+ { return List3 (N); }
-+ INLINE Node_Id Component_List (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Component_Name (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Condition (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE List_Id Condition_Actions (Node_Id N)
-+ { return List3 (N); }
-+ INLINE List_Id Config_Pragmas (Node_Id N)
-+ { return List4 (N); }
-+ INLINE Boolean Constant_Present (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE Node_Id Constraint (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE List_Id Constraints (Node_Id N)
-+ { return List1 (N); }
-+ INLINE Boolean Context_Installed (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE List_Id Context_Items (Node_Id N)
-+ { return List1 (N); }
-+ INLINE Node_Id Controlling_Argument (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Boolean Conversion_OK (Node_Id N)
-+ { return Flag14 (N); }
-+ INLINE Node_Id Corresponding_Body (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Node_Id Corresponding_Generic_Association (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Uint Corresponding_Integer_Value (Node_Id N)
-+ { return Uint4 (N); }
-+ INLINE Node_Id Corresponding_Spec (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Node_Id Corresponding_Stub (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Entity_Id Dcheck_Function (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Node_Id Debug_Statement (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE List_Id Declarations (Node_Id N)
-+ { return List2 (N); }
-+ INLINE Node_Id Default_Expression (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Node_Id Default_Name (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Entity_Id Defining_Identifier (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Defining_Unit_Name (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Delay_Alternative (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Boolean Delay_Finalize_Attach (Node_Id N)
-+ { return Flag14 (N); }
-+ INLINE Node_Id Delay_Statement (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Node_Id Delta_Expression (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Node_Id Digits_Expression (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Boolean Discr_Check_Funcs_Built (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE List_Id Discrete_Choices (Node_Id N)
-+ { return List4 (N); }
-+ INLINE Node_Id Discrete_Range (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Discrete_Subtype_Definition (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE List_Id Discrete_Subtype_Definitions (Node_Id N)
-+ { return List2 (N); }
-+ INLINE List_Id Discriminant_Specifications (Node_Id N)
-+ { return List4 (N); }
-+ INLINE Node_Id Discriminant_Type (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Boolean Do_Accessibility_Check (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Do_Discriminant_Check (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Do_Division_Check (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Do_Length_Check (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE Boolean Do_Overflow_Check (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE Boolean Do_Range_Check (Node_Id N)
-+ { return Flag9 (N); }
-+ INLINE Boolean Do_Storage_Check (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE Boolean Do_Tag_Check (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Elaborate_All_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Boolean Elaborate_Present (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE Node_Id Elaboration_Boolean (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE List_Id Else_Actions (Node_Id N)
-+ { return List3 (N); }
-+ INLINE List_Id Else_Statements (Node_Id N)
-+ { return List4 (N); }
-+ INLINE List_Id Elsif_Parts (Node_Id N)
-+ { return List3 (N); }
-+ INLINE Node_Id Enclosing_Variant (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Node_Id End_Label (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Uint End_Span (Node_Id N)
-+ { return Uint5 (N); }
-+ INLINE Node_Id Entity (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Entity_Or_Associated_Node (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Entry_Body_Formal_Part (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Node_Id Entry_Call_Alternative (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Entry_Call_Statement (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Entry_Direct_Name (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Entry_Index (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Node_Id Entry_Index_Specification (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Etype (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE List_Id Exception_Choices (Node_Id N)
-+ { return List4 (N); }
-+ INLINE List_Id Exception_Handlers (Node_Id N)
-+ { return List5 (N); }
-+ INLINE Boolean Exception_Junk (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Node_Id Explicit_Actual_Parameter (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Expansion_Delayed (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Node_Id Explicit_Generic_Actual_Parameter (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Expression (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE List_Id Expressions (Node_Id N)
-+ { return List1 (N); }
-+ INLINE Node_Id First_Bit (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Entity_Id First_Inlined_Subprogram (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean First_Name (Node_Id N)
-+ { return Flag5 (N); }
-+ INLINE Node_Id First_Named_Actual (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id First_Real_Statement (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Entity_Id First_Subtype_Link (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Boolean Float_Truncate (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Node_Id Formal_Type_Definition (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Forwards_OK (Node_Id N)
-+ { return Flag5 (N); }
-+ INLINE Boolean From_At_Mod (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE List_Id Generic_Associations (Node_Id N)
-+ { return List3 (N); }
-+ INLINE List_Id Generic_Formal_Declarations (Node_Id N)
-+ { return List2 (N); }
-+ INLINE Node_Id Generic_Parent (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Node_Id Generic_Parent_Type (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Handled_Statement_Sequence (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Handler_List_Entry (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Boolean Has_Created_Identifier (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Boolean Has_Dynamic_Length_Check (Node_Id N)
-+ { return Flag10 (N); }
-+ INLINE Boolean Has_Dynamic_Range_Check (Node_Id N)
-+ { return Flag12 (N); }
-+ INLINE Boolean Has_No_Elaboration_Code (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE Boolean Has_Priority_Pragma (Node_Id N)
-+ { return Flag6 (N); }
-+ INLINE Boolean Has_Private_View (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Boolean Has_Storage_Size_Pragma (Node_Id N)
-+ { return Flag5 (N); }
-+ INLINE Boolean Has_Task_Info_Pragma (Node_Id N)
-+ { return Flag7 (N); }
-+ INLINE Boolean Has_Task_Name_Pragma (Node_Id N)
-+ { return Flag8 (N); }
-+ INLINE Boolean Has_Wide_Character (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Elist_Id Hidden_By_Use_Clause (Node_Id N)
-+ { return Elist4 (N); }
-+ INLINE Node_Id High_Bound (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Node_Id Identifier (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Boolean Implicit_With (Node_Id N)
-+ { return Flag16 (N); }
-+ INLINE Boolean In_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Boolean Includes_Infinities (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Node_Id Instance_Spec (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Uint Intval (Node_Id N)
-+ { return Uint3 (N); }
-+ INLINE Boolean Is_Asynchronous_Call_Block (Node_Id N)
-+ { return Flag7 (N); }
-+ INLINE Boolean Is_Component_Left_Opnd (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Is_Component_Right_Opnd (Node_Id N)
-+ { return Flag14 (N); }
-+ INLINE Boolean Is_Controlling_Actual (Node_Id N)
-+ { return Flag16 (N); }
-+ INLINE Boolean Is_In_Discriminant_Check (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Boolean Is_Machine_Number (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Boolean Is_Null_Loop (Node_Id N)
-+ { return Flag16 (N); }
-+ INLINE Boolean Is_Overloaded (Node_Id N)
-+ { return Flag5 (N); }
-+ INLINE Boolean Is_Power_Of_2_For_Shift (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Is_Protected_Subprogram_Body (Node_Id N)
-+ { return Flag7 (N); }
-+ INLINE Boolean Is_Static_Expression (Node_Id N)
-+ { return Flag6 (N); }
-+ INLINE Boolean Is_Subprogram_Descriptor (Node_Id N)
-+ { return Flag16 (N); }
-+ INLINE Boolean Is_Task_Allocation_Block (Node_Id N)
-+ { return Flag6 (N); }
-+ INLINE Boolean Is_Task_Master (Node_Id N)
-+ { return Flag5 (N); }
-+ INLINE Node_Id Iteration_Scheme (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Entity_Id Itype (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Boolean Kill_Range_Check (Node_Id N)
-+ { return Flag11 (N); }
-+ INLINE Node_Id Label_Construct (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Node_Id Left_Opnd (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Node_Id Last_Bit (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Boolean Last_Name (Node_Id N)
-+ { return Flag6 (N); }
-+ INLINE Node_Id Library_Unit (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Boolean Limited_View_Installed (Node_Id N)
-+ { return Flag18 (N); }
-+ INLINE Boolean Limited_Present (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE List_Id Literals (Node_Id N)
-+ { return List1 (N); }
-+ INLINE List_Id Loop_Actions (Node_Id N)
-+ { return List2 (N); }
-+ INLINE Node_Id Loop_Parameter_Specification (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Low_Bound (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Mod_Clause (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Boolean More_Ids (Node_Id N)
-+ { return Flag5 (N); }
-+ INLINE Boolean Must_Be_Byte_Aligned (Node_Id N)
-+ { return Flag14 (N); }
-+ INLINE Boolean Must_Not_Freeze (Node_Id N)
-+ { return Flag8 (N); }
-+ INLINE Node_Id Name (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE List_Id Names (Node_Id N)
-+ { return List2 (N); }
-+ INLINE Node_Id Next_Entity (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Node_Id Next_Named_Actual (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Next_Rep_Item (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Next_Use_Clause (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean No_Ctrl_Actions (Node_Id N)
-+ { return Flag7 (N); }
-+ INLINE Boolean No_Elaboration_Check (Node_Id N)
-+ { return Flag14 (N); }
-+ INLINE Boolean No_Entities_Ref_In_Spec (Node_Id N)
-+ { return Flag8 (N); }
-+ INLINE Boolean No_Initialization (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean No_Truncation (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE Boolean Null_Present (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Null_Record_Present (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE Node_Id Object_Definition (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Boolean OK_For_Stream (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE Node_Id Original_Discriminant (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Entity_Id Original_Entity (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE List_Id Others_Discrete_Choices (Node_Id N)
-+ { return List1 (N); }
-+ INLINE Boolean Out_Present (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE List_Id Parameter_Associations (Node_Id N)
-+ { return List3 (N); }
-+ INLINE Boolean Parameter_List_Truncated (Node_Id N)
-+ { return Flag17 (N); }
-+ INLINE List_Id Parameter_Specifications (Node_Id N)
-+ { return List3 (N); }
-+ INLINE Node_Id Parameter_Type (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Node_Id Parent_Spec (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Position (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE List_Id Pragma_Argument_Associations (Node_Id N)
-+ { return List2 (N); }
-+ INLINE List_Id Pragmas_After (Node_Id N)
-+ { return List5 (N); }
-+ INLINE List_Id Pragmas_Before (Node_Id N)
-+ { return List4 (N); }
-+ INLINE Node_Id Prefix (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Uint Present_Expr (Node_Id N)
-+ { return Uint3 (N); }
-+ INLINE Boolean Prev_Ids (Node_Id N)
-+ { return Flag6 (N); }
-+ INLINE Boolean Print_In_Hex (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE List_Id Private_Declarations (Node_Id N)
-+ { return List3 (N); }
-+ INLINE Boolean Private_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Node_Id Procedure_To_Call (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Proper_Body (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Protected_Definition (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Protected_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Boolean Raises_Constraint_Error (Node_Id N)
-+ { return Flag7 (N); }
-+ INLINE Node_Id Range_Constraint (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Range_Expression (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Node_Id Real_Range_Specification (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE Ureal Realval (Node_Id N)
-+ { return Ureal3 (N); }
-+ INLINE Uint Reason (Node_Id N)
-+ { return Uint3 (N); }
-+ INLINE Node_Id Record_Extension_Part (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Redundant_Use (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Node_Id Return_Type (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Boolean Reverse_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Node_Id Right_Opnd (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Boolean Rounded_Result (Node_Id N)
-+ { return Flag18 (N); }
-+ INLINE Node_Id Scope (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE List_Id Select_Alternatives (Node_Id N)
-+ { return List1 (N); }
-+ INLINE Node_Id Selector_Name (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE List_Id Selector_Names (Node_Id N)
-+ { return List1 (N); }
-+ INLINE Boolean Shift_Count_OK (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE Entity_Id Source_Type (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Specification (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE List_Id Statements (Node_Id N)
-+ { return List3 (N); }
-+ INLINE Boolean Static_Processing_OK (Node_Id N)
-+ { return Flag4 (N); }
-+ INLINE Node_Id Storage_Pool (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE String_Id Strval (Node_Id N)
-+ { return Str3 (N); }
-+ INLINE Node_Id Subtype_Indication (Node_Id N)
-+ { return Node5 (N); }
-+ INLINE Node_Id Subtype_Mark (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE List_Id Subtype_Marks (Node_Id N)
-+ { return List2 (N); }
-+ INLINE Boolean Tagged_Present (Node_Id N)
-+ { return Flag15 (N); }
-+ INLINE Entity_Id Target_Type (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Entity_Id Task_Body_Procedure (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Node_Id Task_Definition (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE List_Id Then_Actions (Node_Id N)
-+ { return List2 (N); }
-+ INLINE List_Id Then_Statements (Node_Id N)
-+ { return List2 (N); }
-+ INLINE Boolean Treat_Fixed_As_Integer (Node_Id N)
-+ { return Flag14 (N); }
-+ INLINE Node_Id Triggering_Alternative (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Node_Id Triggering_Statement (Node_Id N)
-+ { return Node1 (N); }
-+ INLINE Elist_Id TSS_Elist (Node_Id N)
-+ { return Elist3 (N); }
-+ INLINE Node_Id Type_Definition (Node_Id N)
-+ { return Node3 (N); }
-+ INLINE Node_Id Unit (Node_Id N)
-+ { return Node2 (N); }
-+ INLINE Boolean Unknown_Discriminants_Present (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Unreferenced_In_Spec (Node_Id N)
-+ { return Flag7 (N); }
-+ INLINE Node_Id Variant_Part (Node_Id N)
-+ { return Node4 (N); }
-+ INLINE List_Id Variants (Node_Id N)
-+ { return List1 (N); }
-+ INLINE List_Id Visible_Declarations (Node_Id N)
-+ { return List2 (N); }
-+ INLINE Boolean Was_Originally_Stub (Node_Id N)
-+ { return Flag13 (N); }
-+ INLINE Boolean Zero_Cost_Handling (Node_Id N)
-+ { return Flag5 (N); }
-+
---- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/einfo.h.orig 1970-01-01 01:00:00.000000000 +0100
-+++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/einfo.h 2004-06-02 00:54:19.000000000 +0200
-@@ -0,0 +1,1814 @@
-+/*--------------------------------------------------------------------------*/
-+/* */
-+/* GNAT COMPILER COMPONENTS */
-+/* */
-+/* E I N F O */
-+/* */
-+/* C Header File */
-+/* */
-+/* Copyright (C) 1992-2003 Free Software Foundation, Inc. */
-+/* */
-+/* GNAT is free software; you can redistribute it and/or modify it under */
-+/* terms of the GNU General Public License as published by the Free Soft- */
-+/* ware Foundation; either version 2, or (at your option) any later ver- */
-+/* sion. GNAT is distributed in the hope that it will be useful, but WITH- */
-+/* OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY */
-+/* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License */
-+/* for more details. You should have received a copy of the GNU General */
-+/* Public License distributed with GNAT; see file COPYING. If not, write */
-+/* to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, */
-+/* MA 02111-1307, USA. */
-+/* */
-+/* As a special exception, if other files instantiate generics from this */
-+/* unit, or you link this unit with other files to produce an executable, */
-+/* this unit does not by itself cause the resulting executable to be */
-+/* covered by the GNU General Public License. This exception does not */
-+/* however invalidate any other reasons why the executable file might be */
-+/* covered by the GNU Public License. */
-+/* */
-+/* GNAT was originally developed by the GNAT team at New York University. */
-+/* Extensive contributions were provided by Ada Core Technologies Inc. */
-+/* */
-+/*--------------------------------------------------------------------------*/
-+
-+ #define E_Void 0
-+ #define E_Variable 1
-+ #define E_Component 2
-+ #define E_Constant 3
-+ #define E_Discriminant 4
-+ #define E_Loop_Parameter 5
-+ #define E_In_Parameter 6
-+ #define E_Out_Parameter 7
-+ #define E_In_Out_Parameter 8
-+ #define E_Generic_In_Out_Parameter 9
-+ #define E_Generic_In_Parameter 10
-+ #define E_Named_Integer 11
-+ #define E_Named_Real 12
-+ #define E_Enumeration_Type 13
-+ #define E_Enumeration_Subtype 14
-+ #define E_Signed_Integer_Type 15
-+ #define E_Signed_Integer_Subtype 16
-+ #define E_Modular_Integer_Type 17
-+ #define E_Modular_Integer_Subtype 18
-+ #define E_Ordinary_Fixed_Point_Type 19
-+ #define E_Ordinary_Fixed_Point_Subtype 20
-+ #define E_Decimal_Fixed_Point_Type 21
-+ #define E_Decimal_Fixed_Point_Subtype 22
-+ #define E_Floating_Point_Type 23
-+ #define E_Floating_Point_Subtype 24
-+ #define E_Access_Type 25
-+ #define E_Access_Subtype 26
-+ #define E_Access_Attribute_Type 27
-+ #define E_Allocator_Type 28
-+ #define E_General_Access_Type 29
-+ #define E_Access_Subprogram_Type 30
-+ #define E_Access_Protected_Subprogram_Type 31
-+ #define E_Anonymous_Access_Type 32
-+ #define E_Array_Type 33
-+ #define E_Array_Subtype 34
-+ #define E_String_Type 35
-+ #define E_String_Subtype 36
-+ #define E_String_Literal_Subtype 37
-+ #define E_Class_Wide_Type 38
-+ #define E_Class_Wide_Subtype 39
-+ #define E_Record_Type 40
-+ #define E_Record_Subtype 41
-+ #define E_Record_Type_With_Private 42
-+ #define E_Record_Subtype_With_Private 43
-+ #define E_Private_Type 44
-+ #define E_Private_Subtype 45
-+ #define E_Limited_Private_Type 46
-+ #define E_Limited_Private_Subtype 47
-+ #define E_Incomplete_Type 48
-+ #define E_Task_Type 49
-+ #define E_Task_Subtype 50
-+ #define E_Protected_Type 51
-+ #define E_Protected_Subtype 52
-+ #define E_Exception_Type 53
-+ #define E_Subprogram_Type 54
-+ #define E_Enumeration_Literal 55
-+ #define E_Function 56
-+ #define E_Operator 57
-+ #define E_Procedure 58
-+ #define E_Entry 59
-+ #define E_Entry_Family 60
-+ #define E_Block 61
-+ #define E_Entry_Index_Parameter 62
-+ #define E_Exception 63
-+ #define E_Generic_Function 64
-+ #define E_Generic_Procedure 65
-+ #define E_Generic_Package 66
-+ #define E_Label 67
-+ #define E_Loop 68
-+ #define E_Package 69
-+ #define E_Package_Body 70
-+ #define E_Protected_Object 71
-+ #define E_Protected_Body 72
-+ #define E_Task_Body 73
-+ #define E_Subprogram_Body 74
-+
-+ SUBTYPE (Access_Kind, Entity_Kind,
-+ E_Access_Type, E_Anonymous_Access_Type)
-+
-+ SUBTYPE (Array_Kind, Entity_Kind,
-+ E_Array_Type, E_String_Literal_Subtype)
-+
-+ SUBTYPE (Class_Wide_Kind, Entity_Kind,
-+ E_Class_Wide_Type, E_Class_Wide_Subtype)
-+
-+ SUBTYPE (Composite_Kind, Entity_Kind,
-+ E_Array_Type, E_Protected_Subtype)
-+
-+ SUBTYPE (Concurrent_Kind, Entity_Kind,
-+ E_Task_Type, E_Protected_Subtype)
-+
-+ SUBTYPE (Concurrent_Body_Kind, Entity_Kind,
-+ E_Protected_Body, E_Task_Body)
-+
-+ SUBTYPE (Decimal_Fixed_Point_Kind, Entity_Kind,
-+ E_Decimal_Fixed_Point_Type, E_Decimal_Fixed_Point_Subtype)
-+
-+ SUBTYPE (Digits_Kind, Entity_Kind,
-+ E_Decimal_Fixed_Point_Type, E_Floating_Point_Subtype)
-+
-+ SUBTYPE (Discrete_Kind, Entity_Kind,
-+ E_Enumeration_Type, E_Modular_Integer_Subtype)
-+
-+ SUBTYPE (Discrete_Or_Fixed_Point_Kind, Entity_Kind,
-+ E_Enumeration_Type, E_Decimal_Fixed_Point_Subtype)
-+
-+ SUBTYPE (Elementary_Kind, Entity_Kind,
-+ E_Enumeration_Type, E_Anonymous_Access_Type)
-+
-+ SUBTYPE (Enumeration_Kind, Entity_Kind,
-+ E_Enumeration_Type, E_Enumeration_Subtype)
-+
-+ SUBTYPE (Entry_Kind, Entity_Kind,
-+ E_Entry, E_Entry_Family)
-+
-+ SUBTYPE (Fixed_Point_Kind, Entity_Kind,
-+ E_Ordinary_Fixed_Point_Type, E_Decimal_Fixed_Point_Subtype)
-+
-+ SUBTYPE (Float_Kind, Entity_Kind,
-+ E_Floating_Point_Type, E_Floating_Point_Subtype)
-+
-+ SUBTYPE (Formal_Kind, Entity_Kind,
-+ E_In_Parameter, E_In_Out_Parameter)
-+
-+ SUBTYPE (Generic_Subprogram_Kind, Entity_Kind,
-+ E_Generic_Function, E_Generic_Procedure)
-+
-+ SUBTYPE (Generic_Unit_Kind, Entity_Kind,
-+ E_Generic_Function, E_Generic_Package)
-+
-+ SUBTYPE (Incomplete_Or_Private_Kind, Entity_Kind,
-+ E_Record_Type_With_Private, E_Incomplete_Type)
-+
-+ SUBTYPE (Integer_Kind, Entity_Kind,
-+ E_Signed_Integer_Type, E_Modular_Integer_Subtype)
-+
-+ SUBTYPE (Modular_Integer_Kind, Entity_Kind,
-+ E_Modular_Integer_Type, E_Modular_Integer_Subtype)
-+
-+ SUBTYPE (Named_Kind, Entity_Kind,
-+ E_Named_Integer, E_Named_Real)
-+
-+ SUBTYPE (Numeric_Kind, Entity_Kind,
-+ E_Signed_Integer_Type, E_Floating_Point_Subtype)
-+
-+ SUBTYPE (Object_Kind, Entity_Kind,
-+ E_Variable, E_Generic_In_Parameter)
-+
-+ SUBTYPE (Ordinary_Fixed_Point_Kind, Entity_Kind,
-+ E_Ordinary_Fixed_Point_Type, E_Ordinary_Fixed_Point_Subtype)
-+
-+ SUBTYPE (Overloadable_Kind, Entity_Kind,
-+ E_Enumeration_Literal, E_Entry)
-+
-+ SUBTYPE (Private_Kind, Entity_Kind,
-+ E_Record_Type_With_Private, E_Limited_Private_Subtype)
-+
-+ SUBTYPE (Protected_Kind, Entity_Kind,
-+ E_Protected_Type, E_Protected_Subtype)
-+
-+ SUBTYPE (Real_Kind, Entity_Kind,
-+ E_Ordinary_Fixed_Point_Type, E_Floating_Point_Subtype)
-+
-+ SUBTYPE (Record_Kind, Entity_Kind,
-+ E_Class_Wide_Type, E_Record_Subtype_With_Private)
-+
-+ SUBTYPE (Scalar_Kind, Entity_Kind,
-+ E_Enumeration_Type, E_Floating_Point_Subtype)
-+
-+ SUBTYPE (String_Kind, Entity_Kind,
-+ E_String_Type, E_String_Literal_Subtype)
-+
-+ SUBTYPE (Subprogram_Kind, Entity_Kind,
-+ E_Function, E_Procedure)
-+
-+ SUBTYPE (Signed_Integer_Kind, Entity_Kind,
-+ E_Signed_Integer_Type, E_Signed_Integer_Subtype)
-+
-+ SUBTYPE (Task_Kind, Entity_Kind,
-+ E_Task_Type, E_Task_Subtype)
-+
-+ SUBTYPE (Type_Kind, Entity_Kind,
-+ E_Enumeration_Type, E_Subprogram_Type)
-+
-+ typedef char Component_Alignment_Kind;
-+ #define Calign_Default 0
-+ #define Calign_Component_Size 1
-+ #define Calign_Component_Size_4 2
-+ #define Calign_Storage_Unit 3
-+
-+ typedef Boolean B;
-+ typedef Component_Alignment_Kind C;
-+ typedef Entity_Id E;
-+ typedef Mechanism_Type M;
-+ typedef Node_Id N;
-+ typedef Uint U;
-+ typedef Ureal R;
-+ typedef Elist_Id L;
-+ typedef List_Id S;
-+
-+ INLINE L Accept_Address (E Id);
-+ INLINE E Access_Disp_Table (E Id);
-+ INLINE E Actual_Subtype (E Id);
-+ INLINE B Address_Taken (E Id);
-+ INLINE E Alias (E Id);
-+ INLINE U Alignment (E Id);
-+ INLINE E Associated_Final_Chain (E Id);
-+ INLINE E Associated_Formal_Package (E Id);
-+ INLINE N Associated_Node_For_Itype (E Id);
-+ INLINE E Associated_Storage_Pool (E Id);
-+ INLINE N Barrier_Function (E Id);
-+ INLINE N Block_Node (E Id);
-+ INLINE E Body_Entity (E Id);
-+ INLINE B Body_Needed_For_SAL (E Id);
-+ INLINE E CR_Discriminant (E Id);
-+ INLINE B C_Pass_By_Copy (E Id);
-+ INLINE B Can_Never_Be_Null (E Id);
-+ INLINE B Checks_May_Be_Suppressed (E Id);
-+ INLINE E Class_Wide_Type (E Id);
-+ INLINE E Cloned_Subtype (E Id);
-+
-+ #define Component_Alignment einfo__component_alignment
-+ C Component_Alignment (E Id);
-+
-+ INLINE N Component_Clause (E Id);
-+ INLINE U Component_Bit_Offset (E Id);
-+ INLINE U Component_Size (E Id);
-+ INLINE E Component_Type (E Id);
-+ INLINE E Corresponding_Concurrent_Type (E Id);
-+ INLINE E Corresponding_Discriminant (E Id);
-+ INLINE E Corresponding_Equality (E Id);
-+ INLINE E Corresponding_Record_Type (E Id);
-+ INLINE E Corresponding_Remote_Type (E Id);
-+ INLINE N Current_Value (E Id);
-+ INLINE B Debug_Info_Off (E Id);
-+ INLINE E Debug_Renaming_Link (E Id);
-+ INLINE E DTC_Entity (E Id);
-+ INLINE U DT_Entry_Count (E Id);
-+ INLINE U DT_Position (E Id);
-+ INLINE E Default_Expr_Function (E Id);
-+ INLINE B Default_Expressions_Processed (E Id);
-+ INLINE N Default_Value (E Id);
-+ INLINE B Delay_Cleanups (E Id);
-+ INLINE B Delay_Subprogram_Descriptors (E Id);
-+ INLINE R Delta_Value (E Id);
-+ INLINE L Dependent_Instances (E Id);
-+ INLINE B Depends_On_Private (E Id);
-+ INLINE U Digits_Value (E Id);
-+ INLINE E Directly_Designated_Type (E Id);
-+ INLINE B Discard_Names (E Id);
-+ INLINE E Discriminal (E Id);
-+ INLINE E Discriminal_Link (E Id);
-+ INLINE E Discriminant_Checking_Func (E Id);
-+ INLINE L Discriminant_Constraint (E Id);
-+ INLINE N Discriminant_Default_Value (E Id);
-+ INLINE U Discriminant_Number (E Id);
-+ INLINE B Elaborate_All_Desirable (E Id);
-+ INLINE E Elaboration_Entity (E Id);
-+ INLINE B Elaboration_Entity_Required (E Id);
-+ INLINE E Enclosing_Scope (E Id);
-+ INLINE B Entry_Accepted (E Id);
-+ INLINE E Entry_Bodies_Array (E Id);
-+ INLINE E Entry_Cancel_Parameter (E Id);
-+ INLINE E Entry_Component (E Id);
-+ INLINE E Entry_Formal (E Id);
-+ INLINE E Entry_Index_Constant (E Id);
-+ INLINE E Entry_Index_Type (E Id);
-+ INLINE E Entry_Parameters_Type (E Id);
-+ INLINE E Enum_Pos_To_Rep (E Id);
-+ INLINE U Enumeration_Pos (E Id);
-+ INLINE U Enumeration_Rep (E Id);
-+ INLINE N Enumeration_Rep_Expr (E Id);
-+ INLINE E Equivalent_Type (E Id);
-+ INLINE U Esize (E Id);
-+ INLINE U Exception_Code (E Id);
-+ INLINE E Extra_Accessibility (E Id);
-+ INLINE E Extra_Constrained (E Id);
-+ INLINE E Extra_Formal (E Id);
-+ INLINE E Finalization_Chain_Entity (E Id);
-+
-+ #define Finalize_Storage_Only einfo__finalize_storage_only
-+ B Finalize_Storage_Only (E Id);
-+
-+ INLINE E First_Entity (E Id);
-+ INLINE N First_Index (E Id);
-+ INLINE E First_Literal (E Id);
-+ INLINE E First_Optional_Parameter (E Id);
-+ INLINE E First_Private_Entity (E Id);
-+ INLINE N First_Rep_Item (E Id);
-+ INLINE N Freeze_Node (E Id);
-+ INLINE B From_With_Type (E Id);
-+ INLINE E Full_View (E Id);
-+ INLINE B Function_Returns_With_DSP (E Id);
-+ INLINE E Generic_Homonym (E Id);
-+ INLINE L Generic_Renamings (E Id);
-+ INLINE S Handler_Records (E Id);
-+ INLINE B Has_Aliased_Components (E Id);
-+ INLINE B Has_Alignment_Clause (E Id);
-+ INLINE B Has_All_Calls_Remote (E Id);
-+ INLINE B Has_Atomic_Components (E Id);
-+ INLINE B Has_Biased_Representation (E Id);
-+ INLINE B Has_Completion (E Id);
-+ INLINE B Has_Completion_In_Body (E Id);
-+ INLINE B Has_Complex_Representation (E Id);
-+ INLINE B Has_Component_Size_Clause (E Id);
-+ INLINE B Has_Contiguous_Rep (E Id);
-+ INLINE B Has_Controlled_Component (E Id);
-+ INLINE B Has_Controlling_Result (E Id);
-+ INLINE B Has_Convention_Pragma (E Id);
-+ INLINE B Has_Delayed_Freeze (E Id);
-+ INLINE B Has_Discriminants (E Id);
-+ INLINE B Has_Enumeration_Rep_Clause (E Id);
-+ INLINE B Has_Exit (E Id);
-+ INLINE B Has_External_Tag_Rep_Clause (E Id);
-+ INLINE B Has_Fully_Qualified_Name (E Id);
-+ INLINE B Has_Gigi_Rep_Item (E Id);
-+ INLINE B Has_Homonym (E Id);
-+
-+ #define Has_Interrupt_Handler einfo__has_interrupt_handler
-+ B Has_Interrupt_Handler (E Id);
-+
-+ INLINE B Has_Machine_Radix_Clause (E Id);
-+ INLINE B Has_Master_Entity (E Id);
-+ INLINE B Has_Missing_Return (E Id);
-+ INLINE B Has_Nested_Block_With_Handler (E Id);
-+ INLINE B Has_Forward_Instantiation (E Id);
-+ INLINE B Has_Non_Standard_Rep (E Id);
-+ INLINE B Has_Object_Size_Clause (E Id);
-+ INLINE B Has_Per_Object_Constraint (E Id);
-+ INLINE B Has_Pragma_Controlled (E Id);
-+ INLINE B Has_Pragma_Elaborate_Body (E Id);
-+ INLINE B Has_Pragma_Inline (E Id);
-+ INLINE B Has_Pragma_Pack (E Id);
-+ INLINE B Has_Pragma_Pure_Function (E Id);
-+ INLINE B Has_Pragma_Unreferenced (E Id);
-+ INLINE B Has_Primitive_Operations (E Id);
-+ INLINE B Has_Qualified_Name (E Id);
-+ INLINE B Has_Record_Rep_Clause (E Id);
-+ INLINE B Has_Recursive_Call (E Id);
-+ INLINE B Has_Size_Clause (E Id);
-+ INLINE B Has_Small_Clause (E Id);
-+ INLINE B Has_Specified_Layout (E Id);
-+ INLINE B Has_Storage_Size_Clause (E Id);
-+ INLINE B Has_Subprogram_Descriptor (E Id);
-+ INLINE B Has_Task (E Id);
-+ INLINE B Has_Unchecked_Union (E Id);
-+ INLINE B Has_Unknown_Discriminants (E Id);
-+ INLINE B Has_Volatile_Components (E Id);
-+ INLINE B Has_Xref_Entry (E Id);
-+ INLINE E Hiding_Loop_Variable (E Id);
-+ INLINE E Homonym (E Id);
-+ INLINE B In_Package_Body (E Id);
-+ INLINE B In_Private_Part (E Id);
-+ INLINE B In_Use (E Id);
-+ INLINE L Inner_Instances (E Id);
-+ INLINE N Interface_Name (E Id);
-+ INLINE B Is_AST_Entry (E Id);
-+ INLINE B Is_Abstract (E Id);
-+ INLINE B Is_Access_Constant (E Id);
-+ INLINE B Is_Aliased (E Id);
-+ INLINE B Is_Asynchronous (E Id);
-+ INLINE B Is_Atomic (E Id);
-+ INLINE B Is_Bit_Packed_Array (E Id);
-+ INLINE B Is_CPP_Class (E Id);
-+ INLINE B Is_Called (E Id);
-+ INLINE B Is_Character_Type (E Id);
-+ INLINE B Is_Child_Unit (E Id);
-+ INLINE B Is_Class_Wide_Equivalent_Type (E Id);
-+ INLINE B Is_Compilation_Unit (E Id);
-+ INLINE B Is_Completely_Hidden (E Id);
-+ INLINE B Is_Constr_Subt_For_UN_Aliased (E Id);
-+ INLINE B Is_Constr_Subt_For_U_Nominal (E Id);
-+ INLINE B Is_Constrained (E Id);
-+ INLINE B Is_Constructor (E Id);
-+ INLINE B Is_Controlled (E Id);
-+ INLINE B Is_Controlling_Formal (E Id);
-+ INLINE B Is_Discrim_SO_Function (E Id);
-+ INLINE B Is_Dispatching_Operation (E Id);
-+ INLINE B Is_Eliminated (E Id);
-+ INLINE B Is_Entry_Formal (E Id);
-+ INLINE B Is_Exported (E Id);
-+ INLINE B Is_First_Subtype (E Id);
-+ INLINE B Is_For_Access_Subtype (E Id);
-+ INLINE B Is_Frozen (E Id);
-+ INLINE B Is_Generic_Instance (E Id);
-+ INLINE B Is_Hidden (E Id);
-+ INLINE B Is_Hidden_Open_Scope (E Id);
-+ INLINE B Is_Immediately_Visible (E Id);
-+ INLINE B Is_Imported (E Id);
-+ INLINE B Is_Inlined (E Id);
-+ INLINE B Is_Instantiated (E Id);
-+ INLINE B Is_Internal (E Id);
-+ INLINE B Is_Interrupt_Handler (E Id);
-+ INLINE B Is_Intrinsic_Subprogram (E Id);
-+ INLINE B Is_Itype (E Id);
-+ INLINE B Is_Known_Non_Null (E Id);
-+ INLINE B Is_Known_Valid (E Id);
-+ INLINE B Is_Limited_Composite (E Id);
-+ INLINE B Is_Machine_Code_Subprogram (E Id);
-+ INLINE B Is_Non_Static_Subtype (E Id);
-+ INLINE B Is_Null_Init_Proc (E Id);
-+ INLINE B Is_Optional_Parameter (E Id);
-+ INLINE B Is_Package_Body_Entity (E Id);
-+ INLINE B Is_Packed (E Id);
-+ INLINE B Is_Packed_Array_Type (E Id);
-+ INLINE B Is_Potentially_Use_Visible (E Id);
-+ INLINE B Is_Preelaborated (E Id);
-+ INLINE B Is_Private_Composite (E Id);
-+ INLINE B Is_Private_Descendant (E Id);
-+ INLINE B Is_Psected (E Id);
-+ INLINE B Is_Public (E Id);
-+ INLINE B Is_Pure (E Id);
-+ INLINE B Is_Remote_Call_Interface (E Id);
-+ INLINE B Is_Remote_Types (E Id);
-+ INLINE B Is_Renaming_Of_Object (E Id);
-+ INLINE B Is_Shared_Passive (E Id);
-+ INLINE B Is_Statically_Allocated (E Id);
-+ INLINE B Is_Tag (E Id);
-+ INLINE B Is_Tagged_Type (E Id);
-+ INLINE B Is_Thread_Body (E Id);
-+ INLINE B Is_True_Constant (E Id);
-+ INLINE B Is_Unchecked_Union (E Id);
-+ INLINE B Is_Unsigned_Type (E Id);
-+ INLINE B Is_VMS_Exception (E Id);
-+ INLINE B Is_Valued_Procedure (E Id);
-+ INLINE B Is_Visible_Child_Unit (E Id);
-+
-+ #define Is_Volatile einfo__is_volatile
-+ B Is_Volatile (E Id);
-+
-+ #define Is_Wrapper_Package einfo__is_wrapper_package
-+ B Is_Wrapper_Package (E Id);
-+
-+ INLINE B Kill_Elaboration_Checks (E Id);
-+ INLINE B Kill_Range_Checks (E Id);
-+ INLINE B Kill_Tag_Checks (E Id);
-+ INLINE E Last_Entity (E Id);
-+ INLINE L Limited_Views (E Id);
-+ INLINE E Lit_Indexes (E Id);
-+ INLINE E Lit_Strings (E Id);
-+ INLINE B Machine_Radix_10 (E Id);
-+ INLINE E Master_Id (E Id);
-+ INLINE B Materialize_Entity (E Id);
-+ INLINE M Mechanism (E Id);
-+ INLINE U Modulus (E Id);
-+ INLINE B Needs_Debug_Info (E Id);
-+ INLINE B Needs_No_Actuals (E Id);
-+ INLINE B Never_Set_In_Source (E Id);
-+ INLINE E Next_Inlined_Subprogram (E Id);
-+ INLINE B No_Pool_Assigned (E Id);
-+ INLINE B No_Return (E Id);
-+ INLINE B Non_Binary_Modulus (E Id);
-+ INLINE E Non_Limited_View (E Id);
-+ INLINE B Nonzero_Is_True (E Id);
-+ INLINE U Normalized_First_Bit (E Id);
-+ INLINE U Normalized_Position (E Id);
-+ INLINE U Normalized_Position_Max (E Id);
-+ INLINE E Object_Ref (E Id);
-+ INLINE E Original_Array_Type (E Id);
-+ INLINE E Original_Record_Component (E Id);
-+ INLINE E Packed_Array_Type (E Id);
-+ INLINE E Parent_Subtype (E Id);
-+ INLINE L Primitive_Operations (E Id);
-+ INLINE E Prival (E Id);
-+ INLINE L Privals_Chain (E Id);
-+ INLINE L Private_Dependents (E Id);
-+ INLINE N Private_View (E Id);
-+ INLINE E Protected_Body_Subprogram (E Id);
-+ INLINE E Protected_Formal (E Id);
-+ INLINE E Protected_Operation (E Id);
-+ INLINE U RM_Size (E Id);
-+ INLINE B Reachable (E Id);
-+ INLINE B Referenced (E Id);
-+ INLINE B Referenced_As_LHS (E Id);
-+ INLINE N Referenced_Object (E Id);
-+ INLINE N Register_Exception_Call (E Id);
-+ INLINE E Related_Array_Object (E Id);
-+ INLINE E Related_Instance (E Id);
-+ INLINE N Renamed_Entity (E Id);
-+ INLINE N Renamed_Object (E Id);
-+ INLINE U Renaming_Map (E Id);
-+ INLINE B Return_Present (E Id);
-+ INLINE B Returns_By_Ref (E Id);
-+ INLINE B Reverse_Bit_Order (E Id);
-+ INLINE N Scalar_Range (E Id);
-+ INLINE U Scale_Value (E Id);
-+ INLINE U Scope_Depth_Value (E Id);
-+ INLINE B Sec_Stack_Needed_For_Return (E Id);
-+ INLINE S Shadow_Entities (E Id);
-+ INLINE E Shared_Var_Assign_Proc (E Id);
-+ INLINE E Shared_Var_Read_Proc (E Id);
-+ INLINE N Size_Check_Code (E Id);
-+ INLINE B Size_Known_At_Compile_Time (E Id);
-+ INLINE B Size_Depends_On_Discriminant (E Id);
-+ INLINE R Small_Value (E Id);
-+ INLINE E Spec_Entity (E Id);
-+ INLINE E Storage_Size_Variable (E Id);
-+ INLINE L Stored_Constraint (E Id);
-+ INLINE B Strict_Alignment (E Id);
-+ INLINE U String_Literal_Length (E Id);
-+ INLINE N String_Literal_Low_Bound (E Id);
-+ INLINE B Suppress_Elaboration_Warnings (E Id);
-+ INLINE B Suppress_Init_Proc (E Id);
-+ INLINE B Suppress_Style_Checks (E Id);
-+ INLINE B Treat_As_Volatile (E Id);
-+ INLINE E Underlying_Full_View (E Id);
-+ INLINE N Unset_Reference (E Id);
-+ INLINE B Uses_Sec_Stack (E Id);
-+ INLINE B Vax_Float (E Id);
-+ INLINE B Warnings_Off (E Id);
-+ INLINE B Is_Access_Type (E Id);
-+ INLINE B Is_Array_Type (E Id);
-+ INLINE B Is_Class_Wide_Type (E Id);
-+ INLINE B Is_Composite_Type (E Id);
-+ INLINE B Is_Concurrent_Body (E Id);
-+ INLINE B Is_Concurrent_Record_Type (E Id);
-+ INLINE B Is_Concurrent_Type (E Id);
-+ INLINE B Is_Decimal_Fixed_Point_Type (E Id);
-+ INLINE B Is_Digits_Type (E Id);
-+ INLINE B Is_Discrete_Or_Fixed_Point_Type (E Id);
-+ INLINE B Is_Discrete_Type (E Id);
-+ INLINE B Is_Elementary_Type (E Id);
-+ INLINE B Is_Entry (E Id);
-+ INLINE B Is_Enumeration_Type (E Id);
-+ INLINE B Is_Fixed_Point_Type (E Id);
-+ INLINE B Is_Floating_Point_Type (E Id);
-+ INLINE B Is_Formal (E Id);
-+ INLINE B Is_Formal_Subprogram (E Id);
-+ INLINE B Is_Generic_Actual_Type (E Id);
-+ INLINE B Is_Generic_Unit (E Id);
-+ INLINE B Is_Generic_Type (E Id);
-+ INLINE B Is_Generic_Subprogram (E Id);
-+ INLINE B Is_Incomplete_Or_Private_Type (E Id);
-+ INLINE B Is_Integer_Type (E Id);
-+ INLINE B Is_Limited_Record (E Id);
-+ INLINE B Is_Modular_Integer_Type (E Id);
-+ INLINE B Is_Named_Number (E Id);
-+ INLINE B Is_Numeric_Type (E Id);
-+ INLINE B Is_Object (E Id);
-+ INLINE B Is_Ordinary_Fixed_Point_Type (E Id);
-+ INLINE B Is_Overloadable (E Id);
-+ INLINE B Is_Overriding_Operation (E Id);
-+ INLINE B Is_Private_Type (E Id);
-+ INLINE B Is_Protected_Type (E Id);
-+ INLINE B Is_Real_Type (E Id);
-+ INLINE B Is_Record_Type (E Id);
-+ INLINE B Is_Scalar_Type (E Id);
-+ INLINE B Is_Signed_Integer_Type (E Id);
-+ INLINE B Is_Subprogram (E Id);
-+ INLINE B Is_Task_Type (E Id);
-+ INLINE B Is_Type (E Id);
-+
-+ #define Address_Clause einfo__address_clause
-+ N Address_Clause (E Id);
-+
-+ #define Alignment_Clause einfo__alignment_clause
-+ N Alignment_Clause (E Id);
-+
-+ #define Ancestor_Subtype einfo__ancestor_subtype
-+ E Ancestor_Subtype (E Id);
-+
-+ #define Base_Type einfo__base_type
-+ E Base_Type (E Id);
-+
-+ #define Constant_Value einfo__constant_value
-+ N Constant_Value (E Id);
-+
-+ #define Declaration_Node einfo__declaration_node
-+ N Declaration_Node (E Id);
-+
-+ #define Designated_Type einfo__designated_type
-+ E Designated_Type (E Id);
-+
-+ #define Enclosing_Dynamic_Scope einfo__enclosing_dynamic_scope
-+ E Enclosing_Dynamic_Scope (E Id);
-+
-+ #define First_Component einfo__first_component
-+ E First_Component (E Id);
-+
-+ #define First_Discriminant einfo__first_discriminant
-+ E First_Discriminant (E Id);
-+
-+ #define First_Formal einfo__first_formal
-+ E First_Formal (E Id);
-+
-+ #define First_Stored_Discriminant einfo__first_stored_discriminant
-+ E First_Stored_Discriminant (E Id);
-+
-+ #define First_Subtype einfo__first_subtype
-+ E First_Subtype (E Id);
-+
-+ #define Has_Attach_Handler einfo__has_attach_handler
-+ B Has_Attach_Handler (E Id);
-+
-+ #define Has_Entries einfo__has_entries
-+ B Has_Entries (E Id);
-+
-+ #define Has_Foreign_Convention einfo__has_foreign_convention
-+ B Has_Foreign_Convention (E Id);
-+
-+ #define Has_Private_Ancestor einfo__has_private_ancestor
-+ B Has_Private_Ancestor (E Id);
-+
-+ INLINE B Has_Private_Declaration (E Id);
-+
-+ #define Implementation_Base_Type einfo__implementation_base_type
-+ E Implementation_Base_Type (E Id);
-+
-+ #define Is_Always_Inlined einfo__is_always_inlined
-+ B Is_Always_Inlined (E Id);
-+
-+ #define Is_Boolean_Type einfo__is_boolean_type
-+ B Is_Boolean_Type (E Id);
-+
-+ #define Is_By_Copy_Type einfo__is_by_copy_type
-+ B Is_By_Copy_Type (E Id);
-+
-+ #define Is_By_Reference_Type einfo__is_by_reference_type
-+ B Is_By_Reference_Type (E Id);
-+
-+ #define Is_Derived_Type einfo__is_derived_type
-+ B Is_Derived_Type (E Id);
-+
-+ #define Is_Dynamic_Scope einfo__is_dynamic_scope
-+ B Is_Dynamic_Scope (E Id);
-+
-+ #define Is_Indefinite_Subtype einfo__is_indefinite_subtype
-+ B Is_Indefinite_Subtype (E Id);
-+
-+ #define Is_Limited_Type einfo__is_limited_type
-+ B Is_Limited_Type (E Id);
-+
-+ #define Is_Package einfo__is_package
-+ B Is_Package (E Id);
-+
-+ #define Is_Protected_Private einfo__is_protected_private
-+ B Is_Protected_Private (E Id);
-+
-+ #define Is_Protected_Record_Type einfo__is_protected_record_type
-+ B Is_Protected_Record_Type (E Id);
-+
-+ #define Is_Return_By_Reference_Type einfo__is_return_by_reference_type
-+ B Is_Return_By_Reference_Type (E Id);
-+
-+ #define Is_String_Type einfo__is_string_type
-+ B Is_String_Type (E Id);
-+
-+ #define Is_Task_Record_Type einfo__is_task_record_type
-+ B Is_Task_Record_Type (E Id);
-+
-+ #define Next_Component einfo__next_component
-+ E Next_Component (E Id);
-+
-+ #define Next_Discriminant einfo__next_discriminant
-+ E Next_Discriminant (E Id);
-+
-+ #define Next_Formal einfo__next_formal
-+ E Next_Formal (E Id);
-+
-+ #define Next_Formal_With_Extras einfo__next_formal_with_extras
-+ E Next_Formal_With_Extras (E Id);
-+
-+ INLINE E Next_Literal (E Id);
-+
-+ #define Next_Stored_Discriminant einfo__next_stored_discriminant
-+ E Next_Stored_Discriminant (E Id);
-+
-+ #define Number_Dimensions einfo__number_dimensions
-+ Pos Number_Dimensions (E Id);
-+
-+ #define Number_Discriminants einfo__number_discriminants
-+ Pos Number_Discriminants (E Id);
-+
-+ #define Number_Entries einfo__number_entries
-+ Nat Number_Entries (E Id);
-+
-+ #define Number_Formals einfo__number_formals
-+ Pos Number_Formals (E Id);
-+
-+ INLINE Formal_Kind Parameter_Mode (E Id);
-+
-+ #define Root_Type einfo__root_type
-+ E Root_Type (E Id);
-+
-+ #define Scope_Depth_Set einfo__scope_depth_set
-+ B Scope_Depth_Set (E Id);
-+
-+ #define Size_Clause einfo__size_clause
-+ N Size_Clause (E Id);
-+
-+ #define Tag_Component einfo__tag_component
-+ E Tag_Component (E Id);
-+
-+ #define Type_High_Bound einfo__type_high_bound
-+ N Type_High_Bound (E Id);
-+
-+ #define Type_Low_Bound einfo__type_low_bound
-+ N Type_Low_Bound (E Id);
-+
-+ #define Underlying_Type einfo__underlying_type
-+ E Underlying_Type (E Id);
-+
-+ #define Known_Alignment einfo__known_alignment
-+ B Known_Alignment (Entity_Id E);
-+
-+ #define Known_Component_Bit_Offset einfo__known_component_bit_offset
-+ B Known_Component_Bit_Offset (Entity_Id E);
-+
-+ #define Known_Component_Size einfo__known_component_size
-+ B Known_Component_Size (Entity_Id E);
-+
-+ #define Known_Esize einfo__known_esize
-+ B Known_Esize (Entity_Id E);
-+
-+ #define Known_Normalized_First_Bit einfo__known_normalized_first_bit
-+ B Known_Normalized_First_Bit (Entity_Id E);
-+
-+ #define Known_Normalized_Position einfo__known_normalized_position
-+ B Known_Normalized_Position (Entity_Id E);
-+
-+ #define Known_Normalized_Position_Max einfo__known_normalized_position_max
-+ B Known_Normalized_Position_Max (Entity_Id E);
-+
-+ #define Known_RM_Size einfo__known_rm_size
-+ B Known_RM_Size (Entity_Id E);
-+
-+ #define Known_Static_Component_Bit_Offset einfo__known_static_component_bit_offset
-+ B Known_Static_Component_Bit_Offset (Entity_Id E);
-+
-+ #define Known_Static_Component_Size einfo__known_static_component_size
-+ B Known_Static_Component_Size (Entity_Id E);
-+
-+ #define Known_Static_Esize einfo__known_static_esize
-+ B Known_Static_Esize (Entity_Id E);
-+
-+ #define Known_Static_Normalized_First_Bit einfo__known_static_normalized_first_bit
-+ B Known_Static_Normalized_First_Bit (Entity_Id E);
-+
-+ #define Known_Static_Normalized_Position einfo__known_static_normalized_position
-+ B Known_Static_Normalized_Position (Entity_Id E);
-+
-+ #define Known_Static_Normalized_Position_Max einfo__known_static_normalized_position_max
-+ B Known_Static_Normalized_Position_Max (Entity_Id E);
-+
-+ #define Known_Static_RM_Size einfo__known_static_rm_size
-+ B Known_Static_RM_Size (Entity_Id E);
-+
-+ #define Unknown_Alignment einfo__unknown_alignment
-+ B Unknown_Alignment (Entity_Id E);
-+
-+ #define Unknown_Component_Bit_Offset einfo__unknown_component_bit_offset
-+ B Unknown_Component_Bit_Offset (Entity_Id E);
-+
-+ #define Unknown_Component_Size einfo__unknown_component_size
-+ B Unknown_Component_Size (Entity_Id E);
-+
-+ #define Unknown_Esize einfo__unknown_esize
-+ B Unknown_Esize (Entity_Id E);
-+
-+ #define Unknown_Normalized_First_Bit einfo__unknown_normalized_first_bit
-+ B Unknown_Normalized_First_Bit (Entity_Id E);
-+
-+ #define Unknown_Normalized_Position einfo__unknown_normalized_position
-+ B Unknown_Normalized_Position (Entity_Id E);
-+
-+ #define Unknown_Normalized_Position_Max einfo__unknown_normalized_position_max
-+ B Unknown_Normalized_Position_Max (Entity_Id E);
-+
-+ #define Unknown_RM_Size einfo__unknown_rm_size
-+ B Unknown_RM_Size (Entity_Id E);
-+
-+
-+ INLINE L Accept_Address (E Id)
-+ { return Elist21 (Id); }
-+
-+ INLINE E Access_Disp_Table (E Id)
-+ { return Node16 (Implementation_Base_Type (Id)); }
-+
-+ INLINE E Actual_Subtype (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE B Address_Taken (E Id)
-+ { return Flag104 (Id); }
-+
-+ INLINE E Alias (E Id)
-+ { return Node18 (Id); }
-+
-+ INLINE U Alignment (E Id)
-+ { return Uint14 (Id); }
-+
-+ INLINE E Associated_Final_Chain (E Id)
-+ { return Node23 (Id); }
-+
-+ INLINE E Associated_Formal_Package (E Id)
-+ { return Node12 (Id); }
-+
-+ INLINE N Associated_Node_For_Itype (E Id)
-+ { return Node8 (Id); }
-+
-+ INLINE E Associated_Storage_Pool (E Id)
-+ { return Node22 (Root_Type (Id)); }
-+
-+ INLINE N Barrier_Function (E Id)
-+ { return Node12 (Id); }
-+
-+ INLINE N Block_Node (E Id)
-+ { return Node11 (Id); }
-+
-+ INLINE E Body_Entity (E Id)
-+ { return Node19 (Id); }
-+
-+ INLINE B Body_Needed_For_SAL (E Id)
-+ { return Flag40 (Id); }
-+
-+ INLINE B C_Pass_By_Copy (E Id)
-+ { return Flag125 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Can_Never_Be_Null (E Id)
-+ { return Flag38 (Id); }
-+
-+ INLINE B Checks_May_Be_Suppressed (E Id)
-+ { return Flag31 (Id); }
-+
-+ INLINE E Class_Wide_Type (E Id)
-+ { return Node9 (Id); }
-+
-+ INLINE E Cloned_Subtype (E Id)
-+ { return Node16 (Id); }
-+
-+ INLINE U Component_Bit_Offset (E Id)
-+ { return Uint11 (Id); }
-+
-+ INLINE N Component_Clause (E Id)
-+ { return Node13 (Id); }
-+
-+ INLINE U Component_Size (E Id)
-+ { return Uint22 (Implementation_Base_Type (Id)); }
-+
-+ INLINE E Component_Type (E Id)
-+ { return Node20 (Implementation_Base_Type (Id)); }
-+
-+ INLINE E Corresponding_Concurrent_Type (E Id)
-+ { return Node18 (Id); }
-+
-+ INLINE E Corresponding_Discriminant (E Id)
-+ { return Node19 (Id); }
-+
-+ INLINE E Corresponding_Equality (E Id)
-+ { return Node13 (Id); }
-+
-+ INLINE E Corresponding_Record_Type (E Id)
-+ { return Node18 (Id); }
-+
-+ INLINE E Corresponding_Remote_Type (E Id)
-+ { return Node22 (Id); }
-+
-+ INLINE N Current_Value (E Id)
-+ { return Node9 (Id); }
-+
-+ INLINE E CR_Discriminant (E Id)
-+ { return Node23 (Id); }
-+
-+ INLINE B Debug_Info_Off (E Id)
-+ { return Flag166 (Id); }
-+
-+ INLINE E Debug_Renaming_Link (E Id)
-+ { return Node13 (Id); }
-+
-+ INLINE E Default_Expr_Function (E Id)
-+ { return Node21 (Id); }
-+
-+ INLINE B Default_Expressions_Processed (E Id)
-+ { return Flag108 (Id); }
-+
-+ INLINE N Default_Value (E Id)
-+ { return Node20 (Id); }
-+
-+ INLINE B Delay_Cleanups (E Id)
-+ { return Flag114 (Id); }
-+
-+ INLINE B Delay_Subprogram_Descriptors (E Id)
-+ { return Flag50 (Id); }
-+
-+ INLINE R Delta_Value (E Id)
-+ { return Ureal18 (Id); }
-+
-+ INLINE L Dependent_Instances (E Id)
-+ { return Elist8 (Id); }
-+
-+ INLINE B Depends_On_Private (E Id)
-+ { return Flag14 (Id); }
-+
-+ INLINE U Digits_Value (E Id)
-+ { return Uint17 (Id); }
-+
-+ INLINE E Directly_Designated_Type (E Id)
-+ { return Node20 (Id); }
-+
-+ INLINE B Discard_Names (E Id)
-+ { return Flag88 (Id); }
-+
-+ INLINE E Discriminal (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE N Discriminal_Link (E Id)
-+ { return Node10 (Id); }
-+
-+ INLINE E Discriminant_Checking_Func (E Id)
-+ { return Node20 (Id); }
-+
-+ INLINE L Discriminant_Constraint (E Id)
-+ { return Elist21 (Id); }
-+
-+ INLINE N Discriminant_Default_Value (E Id)
-+ { return Node20 (Id); }
-+
-+ INLINE U Discriminant_Number (E Id)
-+ { return Uint15 (Id); }
-+
-+ INLINE U DT_Entry_Count (E Id)
-+ { return Uint15 (Id); }
-+
-+ INLINE U DT_Position (E Id)
-+ { return Uint15 (Id); }
-+
-+ INLINE E DTC_Entity (E Id)
-+ { return Node16 (Id); }
-+
-+ INLINE B Elaborate_All_Desirable (E Id)
-+ { return Flag146 (Id); }
-+
-+ INLINE E Elaboration_Entity (E Id)
-+ { return Node13 (Id); }
-+
-+ INLINE B Elaboration_Entity_Required (E Id)
-+ { return Flag174 (Id); }
-+
-+ INLINE E Enclosing_Scope (E Id)
-+ { return Node18 (Id); }
-+
-+ INLINE B Entry_Accepted (E Id)
-+ { return Flag152 (Id); }
-+
-+ INLINE E Entry_Bodies_Array (E Id)
-+ { return Node15 (Id); }
-+
-+ INLINE E Entry_Cancel_Parameter (E Id)
-+ { return Node23 (Id); }
-+
-+ INLINE E Entry_Component (E Id)
-+ { return Node11 (Id); }
-+
-+ INLINE E Entry_Formal (E Id)
-+ { return Node16 (Id); }
-+
-+ INLINE N Entry_Index_Constant (E Id)
-+ { return Node18 (Id); }
-+
-+ INLINE E Entry_Parameters_Type (E Id)
-+ { return Node15 (Id); }
-+
-+ INLINE E Enum_Pos_To_Rep (E Id)
-+ { return Node23 (Id); }
-+
-+ INLINE Uint Enumeration_Pos (E Id)
-+ { return Uint11 (Id); }
-+
-+ INLINE U Enumeration_Rep (E Id)
-+ { return Uint12 (Id); }
-+
-+ INLINE N Enumeration_Rep_Expr (E Id)
-+ { return Node22 (Id); }
-+
-+ INLINE E Equivalent_Type (E Id)
-+ { return Node18 (Id); }
-+
-+ INLINE Uint Esize (E Id)
-+ { return Uint12 (Id); }
-+
-+ INLINE Uint Exception_Code (E Id)
-+ { return Uint22 (Id); }
-+
-+ INLINE E Extra_Accessibility (E Id)
-+ { return Node13 (Id); }
-+
-+ INLINE E Extra_Constrained (E Id)
-+ { return Node23 (Id); }
-+
-+ INLINE E Extra_Formal (E Id)
-+ { return Node15 (Id); }
-+
-+ INLINE E Finalization_Chain_Entity (E Id)
-+ { return Node19 (Id); }
-+
-+ INLINE E First_Entity (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE N First_Index (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE E First_Literal (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE E First_Optional_Parameter (E Id)
-+ { return Node14 (Id); }
-+
-+ INLINE E First_Private_Entity (E Id)
-+ { return Node16 (Id); }
-+
-+ INLINE E First_Rep_Item (E Id)
-+ { return Node6 (Id); }
-+
-+ INLINE N Freeze_Node (E Id)
-+ { return Node7 (Id); }
-+
-+ INLINE B From_With_Type (E Id)
-+ { return Flag159 (Id); }
-+
-+ INLINE E Full_View (E Id)
-+ { return Node11 (Id); }
-+
-+ INLINE B Function_Returns_With_DSP (E Id)
-+ { return Flag169 (Id); }
-+
-+ INLINE E Generic_Homonym (E Id)
-+ { return Node11 (Id); }
-+
-+ INLINE L Generic_Renamings (E Id)
-+ { return Elist23 (Id); }
-+
-+ INLINE S Handler_Records (E Id)
-+ { return List10 (Id); }
-+
-+ INLINE B Has_Aliased_Components (E Id)
-+ { return Flag135 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Alignment_Clause (E Id)
-+ { return Flag46 (Id); }
-+
-+ INLINE B Has_All_Calls_Remote (E Id)
-+ { return Flag79 (Id); }
-+
-+ INLINE B Has_Atomic_Components (E Id)
-+ { return Flag86 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Biased_Representation (E Id)
-+ { return Flag139 (Id); }
-+
-+ INLINE B Has_Completion (E Id)
-+ { return Flag26 (Id); }
-+
-+ INLINE B Has_Completion_In_Body (E Id)
-+ { return Flag71 (Id); }
-+
-+ INLINE B Has_Complex_Representation (E Id)
-+ { return Flag140 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Component_Size_Clause (E Id)
-+ { return Flag68 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Controlled_Component (E Id)
-+ { return Flag43 (Base_Type (Id)); }
-+
-+ INLINE B Has_Contiguous_Rep (E Id)
-+ { return Flag181 (Id); }
-+
-+ INLINE B Has_Controlling_Result (E Id)
-+ { return Flag98 (Id); }
-+
-+ INLINE B Has_Convention_Pragma (E Id)
-+ { return Flag119 (Id); }
-+
-+ INLINE B Has_Delayed_Freeze (E Id)
-+ { return Flag18 (Id); }
-+
-+ INLINE B Has_Discriminants (E Id)
-+ { return Flag5 (Id); }
-+
-+ INLINE B Has_Enumeration_Rep_Clause (E Id)
-+ { return Flag66 (Id); }
-+
-+ INLINE B Has_Exit (E Id)
-+ { return Flag47 (Id); }
-+
-+ INLINE B Has_External_Tag_Rep_Clause (E Id)
-+ { return Flag110 (Id); }
-+
-+ INLINE B Has_Forward_Instantiation (E Id)
-+ { return Flag175 (Id); }
-+
-+ INLINE B Has_Fully_Qualified_Name (E Id)
-+ { return Flag173 (Id); }
-+
-+ INLINE B Has_Gigi_Rep_Item (E Id)
-+ { return Flag82 (Id); }
-+
-+ INLINE B Has_Homonym (E Id)
-+ { return Flag56 (Id); }
-+
-+ INLINE B Has_Machine_Radix_Clause (E Id)
-+ { return Flag83 (Id); }
-+
-+ INLINE B Has_Master_Entity (E Id)
-+ { return Flag21 (Id); }
-+
-+ INLINE B Has_Missing_Return (E Id)
-+ { return Flag142 (Id); }
-+
-+ INLINE B Has_Nested_Block_With_Handler (E Id)
-+ { return Flag101 (Id); }
-+
-+ INLINE B Has_Non_Standard_Rep (E Id)
-+ { return Flag75 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Object_Size_Clause (E Id)
-+ { return Flag172 (Id); }
-+
-+ INLINE B Has_Per_Object_Constraint (E Id)
-+ { return Flag154 (Id); }
-+
-+ INLINE B Has_Pragma_Controlled (E Id)
-+ { return Flag27 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Pragma_Elaborate_Body (E Id)
-+ { return Flag150 (Id); }
-+
-+ INLINE B Has_Pragma_Inline (E Id)
-+ { return Flag157 (Id); }
-+
-+ INLINE B Has_Pragma_Pack (E Id)
-+ { return Flag121 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Pragma_Pure_Function (E Id)
-+ { return Flag179 (Id); }
-+
-+ INLINE B Has_Pragma_Unreferenced (E Id)
-+ { return Flag180 (Id); }
-+
-+ INLINE B Has_Primitive_Operations (E Id)
-+ { return Flag120 (Base_Type (Id)); }
-+
-+ INLINE B Has_Private_Declaration (E Id)
-+ { return Flag155 (Id); }
-+
-+ INLINE B Has_Qualified_Name (E Id)
-+ { return Flag161 (Id); }
-+
-+ INLINE B Has_Record_Rep_Clause (E Id)
-+ { return Flag65 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Recursive_Call (E Id)
-+ { return Flag143 (Id); }
-+
-+ INLINE B Has_Size_Clause (E Id)
-+ { return Flag29 (Id); }
-+
-+ INLINE B Has_Small_Clause (E Id)
-+ { return Flag67 (Id); }
-+
-+ INLINE B Has_Specified_Layout (E Id)
-+ { return Flag100 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Storage_Size_Clause (E Id)
-+ { return Flag23 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Subprogram_Descriptor (E Id)
-+ { return Flag93 (Id); }
-+
-+ INLINE B Has_Task (E Id)
-+ { return Flag30 (Base_Type (Id)); }
-+
-+ INLINE B Has_Unchecked_Union (E Id)
-+ { return Flag123 (Base_Type (Id)); }
-+
-+ INLINE B Has_Unknown_Discriminants (E Id)
-+ { return Flag72 (Id); }
-+
-+ INLINE B Has_Volatile_Components (E Id)
-+ { return Flag87 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Has_Xref_Entry (E Id)
-+ { return Flag182 (Implementation_Base_Type (Id)); }
-+
-+ INLINE E Hiding_Loop_Variable (E Id)
-+ { return Node8 (Id); }
-+
-+ INLINE E Homonym (E Id)
-+ { return Node4 (Id); }
-+
-+ INLINE B In_Package_Body (E Id)
-+ { return Flag48 (Id); }
-+
-+ INLINE B In_Private_Part (E Id)
-+ { return Flag45 (Id); }
-+
-+ INLINE B In_Use (E Id)
-+ { return Flag8 (Id); }
-+
-+ INLINE L Inner_Instances (E Id)
-+ { return Elist23 (Id); }
-+
-+ INLINE N Interface_Name (E Id)
-+ { return Node21 (Id); }
-+
-+ INLINE B Is_Abstract (E Id)
-+ { return Flag19 (Id); }
-+
-+ INLINE B Is_Access_Constant (E Id)
-+ { return Flag69 (Id); }
-+
-+ INLINE B Is_Aliased (E Id)
-+ { return Flag15 (Id); }
-+
-+ INLINE B Is_AST_Entry (E Id)
-+ { return Flag132 (Id); }
-+
-+ INLINE B Is_Asynchronous (E Id)
-+ { return Flag81 (Id); }
-+
-+ INLINE B Is_Atomic (E Id)
-+ { return Flag85 (Id); }
-+
-+ INLINE B Is_Bit_Packed_Array (E Id)
-+ { return Flag122 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Is_Called (E Id)
-+ { return Flag102 (Id); }
-+
-+ INLINE B Is_Character_Type (E Id)
-+ { return Flag63 (Id); }
-+
-+ INLINE B Is_Child_Unit (E Id)
-+ { return Flag73 (Id); }
-+
-+ INLINE B Is_Class_Wide_Equivalent_Type (E Id)
-+ { return Flag35 (Id); }
-+
-+ INLINE B Is_Compilation_Unit (E Id)
-+ { return Flag149 (Id); }
-+
-+ INLINE B Is_Completely_Hidden (E Id)
-+ { return Flag103 (Id); }
-+
-+ INLINE B Is_Constr_Subt_For_U_Nominal (E Id)
-+ { return Flag80 (Id); }
-+
-+ INLINE B Is_Constr_Subt_For_UN_Aliased (E Id)
-+ { return Flag141 (Id); }
-+
-+ INLINE B Is_Constrained (E Id)
-+ { return Flag12 (Id); }
-+
-+ INLINE B Is_Constructor (E Id)
-+ { return Flag76 (Id); }
-+
-+ INLINE B Is_Controlled (E Id)
-+ { return Flag42 (Base_Type (Id)); }
-+
-+ INLINE B Is_Controlling_Formal (E Id)
-+ { return Flag97 (Id); }
-+
-+ INLINE B Is_CPP_Class (E Id)
-+ { return Flag74 (Id); }
-+
-+ INLINE B Is_Discrim_SO_Function (E Id)
-+ { return Flag176 (Id); }
-+
-+ INLINE B Is_Dispatching_Operation (E Id)
-+ { return Flag6 (Id); }
-+
-+ INLINE B Is_Eliminated (E Id)
-+ { return Flag124 (Id); }
-+
-+ INLINE B Is_Entry_Formal (E Id)
-+ { return Flag52 (Id); }
-+
-+ INLINE B Is_Exported (E Id)
-+ { return Flag99 (Id); }
-+
-+ INLINE B Is_First_Subtype (E Id)
-+ { return Flag70 (Id); }
-+
-+ INLINE B Is_For_Access_Subtype (E Id)
-+ { return Flag118 (Id); }
-+
-+ INLINE B Is_Formal_Subprogram (E Id)
-+ { return Flag111 (Id); }
-+
-+ INLINE B Is_Frozen (E Id)
-+ { return Flag4 (Id); }
-+
-+ INLINE B Is_Generic_Actual_Type (E Id)
-+ { return Flag94 (Id); }
-+
-+ INLINE B Is_Generic_Instance (E Id)
-+ { return Flag130 (Id); }
-+
-+ INLINE B Is_Generic_Type (E Id)
-+ { return Flag13 (Id); }
-+
-+ INLINE B Is_Hidden (E Id)
-+ { return Flag57 (Id); }
-+
-+ INLINE B Is_Hidden_Open_Scope (E Id)
-+ { return Flag171 (Id); }
-+
-+ INLINE B Is_Immediately_Visible (E Id)
-+ { return Flag7 (Id); }
-+
-+ INLINE B Is_Imported (E Id)
-+ { return Flag24 (Id); }
-+
-+ INLINE B Is_Inlined (E Id)
-+ { return Flag11 (Id); }
-+
-+ INLINE B Is_Instantiated (E Id)
-+ { return Flag126 (Id); }
-+
-+ INLINE B Is_Internal (E Id)
-+ { return Flag17 (Id); }
-+
-+ INLINE B Is_Interrupt_Handler (E Id)
-+ { return Flag89 (Id); }
-+
-+ INLINE B Is_Intrinsic_Subprogram (E Id)
-+ { return Flag64 (Id); }
-+
-+ INLINE B Is_Itype (E Id)
-+ { return Flag91 (Id); }
-+
-+ INLINE B Is_Known_Non_Null (E Id)
-+ { return Flag37 (Id); }
-+
-+ INLINE B Is_Known_Valid (E Id)
-+ { return Flag170 (Id); }
-+
-+ INLINE B Is_Limited_Composite (E Id)
-+ { return Flag106 (Id); }
-+
-+ INLINE B Is_Limited_Record (E Id)
-+ { return Flag25 (Id); }
-+
-+ INLINE B Is_Machine_Code_Subprogram (E Id)
-+ { return Flag137 (Id); }
-+
-+ INLINE B Is_Non_Static_Subtype (E Id)
-+ { return Flag109 (Id); }
-+
-+ INLINE B Is_Null_Init_Proc (E Id)
-+ { return Flag178 (Id); }
-+
-+ INLINE B Is_Optional_Parameter (E Id)
-+ { return Flag134 (Id); }
-+
-+ INLINE B Is_Overriding_Operation (E Id)
-+ { return Flag39 (Id); }
-+
-+ INLINE B Is_Package_Body_Entity (E Id)
-+ { return Flag160 (Id); }
-+
-+ INLINE B Is_Packed (E Id)
-+ { return Flag51 (Implementation_Base_Type (Id)); }
-+
-+ INLINE B Is_Packed_Array_Type (E Id)
-+ { return Flag138 (Id); }
-+
-+ INLINE B Is_Potentially_Use_Visible (E Id)
-+ { return Flag9 (Id); }
-+
-+ INLINE B Is_Preelaborated (E Id)
-+ { return Flag59 (Id); }
-+
-+ INLINE B Is_Private_Composite (E Id)
-+ { return Flag107 (Id); }
-+
-+ INLINE B Is_Private_Descendant (E Id)
-+ { return Flag53 (Id); }
-+
-+ INLINE B Is_Psected (E Id)
-+ { return Flag153 (Id); }
-+
-+ INLINE B Is_Public (E Id)
-+ { return Flag10 (Id); }
-+
-+ INLINE B Is_Pure (E Id)
-+ { return Flag44 (Id); }
-+
-+ INLINE B Is_Remote_Call_Interface (E Id)
-+ { return Flag62 (Id); }
-+
-+ INLINE B Is_Remote_Types (E Id)
-+ { return Flag61 (Id); }
-+
-+ INLINE B Is_Renaming_Of_Object (E Id)
-+ { return Flag112 (Id); }
-+
-+ INLINE B Is_Shared_Passive (E Id)
-+ { return Flag60 (Id); }
-+
-+ INLINE B Is_Statically_Allocated (E Id)
-+ { return Flag28 (Id); }
-+
-+ INLINE B Is_Tag (E Id)
-+ { return Flag78 (Id); }
-+
-+ INLINE B Is_Tagged_Type (E Id)
-+ { return Flag55 (Id); }
-+
-+ INLINE B Is_Thread_Body (E Id)
-+ { return Flag77 (Id); }
-+
-+ INLINE B Is_True_Constant (E Id)
-+ { return Flag163 (Id); }
-+
-+ INLINE B Is_Unchecked_Union (E Id)
-+ { return Flag117 (Id); }
-+
-+ INLINE B Is_Unsigned_Type (E Id)
-+ { return Flag144 (Id); }
-+
-+ INLINE B Is_Valued_Procedure (E Id)
-+ { return Flag127 (Id); }
-+
-+ INLINE B Is_Visible_Child_Unit (E Id)
-+ { return Flag116 (Id); }
-+
-+ INLINE B Is_VMS_Exception (E Id)
-+ { return Flag133 (Id); }
-+
-+ INLINE B Kill_Elaboration_Checks (E Id)
-+ { return Flag32 (Id); }
-+
-+ INLINE B Kill_Range_Checks (E Id)
-+ { return Flag33 (Id); }
-+
-+ INLINE B Kill_Tag_Checks (E Id)
-+ { return Flag34 (Id); }
-+
-+ INLINE E Last_Entity (E Id)
-+ { return Node20 (Id); }
-+
-+ INLINE L Limited_Views (E Id)
-+ { return Elist23 (Id); }
-+
-+ INLINE E Lit_Indexes (E Id)
-+ { return Node15 (Id); }
-+
-+ INLINE E Lit_Strings (E Id)
-+ { return Node16 (Id); }
-+
-+ INLINE B Machine_Radix_10 (E Id)
-+ { return Flag84 (Id); }
-+
-+ INLINE E Master_Id (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE B Materialize_Entity (E Id)
-+ { return Flag168 (Id); }
-+
-+ INLINE M Mechanism (E Id)
-+ { return UI_To_Int (Uint8 (Id)); }
-+
-+ INLINE Uint Modulus (E Id)
-+ { return Uint17 (Base_Type (Id)); }
-+
-+ INLINE B Needs_Debug_Info (E Id)
-+ { return Flag147 (Id); }
-+
-+ INLINE B Needs_No_Actuals (E Id)
-+ { return Flag22 (Id); }
-+
-+ INLINE B Never_Set_In_Source (E Id)
-+ { return Flag115 (Id); }
-+
-+ INLINE E Next_Inlined_Subprogram (E Id)
-+ { return Node12 (Id); }
-+
-+ INLINE B No_Pool_Assigned (E Id)
-+ { return Flag131 (Root_Type (Id)); }
-+
-+ INLINE B No_Return (E Id)
-+ { return Flag113 (Id); }
-+
-+ INLINE B Non_Binary_Modulus (E Id)
-+ { return Flag58 (Base_Type (Id)); }
-+
-+ INLINE E Non_Limited_View (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE B Nonzero_Is_True (E Id)
-+ { return Flag162 (Base_Type (Id)); }
-+
-+ INLINE U Normalized_First_Bit (E Id)
-+ { return Uint8 (Id); }
-+
-+ INLINE U Normalized_Position (E Id)
-+ { return Uint14 (Id); }
-+
-+ INLINE U Normalized_Position_Max (E Id)
-+ { return Uint10 (Id); }
-+
-+ INLINE E Object_Ref (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE E Original_Array_Type (E Id)
-+ { return Node21 (Id); }
-+
-+ INLINE E Original_Record_Component (E Id)
-+ { return Node22 (Id); }
-+
-+ INLINE E Packed_Array_Type (E Id)
-+ { return Node23 (Id); }
-+
-+ INLINE E Parent_Subtype (E Id)
-+ { return Node19 (Id); }
-+
-+ INLINE L Primitive_Operations (E Id)
-+ { return Elist15 (Id); }
-+
-+ INLINE E Prival (E Id)
-+ { return Node17 (Id); }
-+
-+ INLINE L Privals_Chain (E Id)
-+ { return Elist23 (Id); }
-+
-+ INLINE L Private_Dependents (E Id)
-+ { return Elist18 (Id); }
-+
-+ INLINE N Private_View (E Id)
-+ { return Node22 (Id); }
-+
-+ INLINE E Protected_Body_Subprogram (E Id)
-+ { return Node11 (Id); }
-+
-+ INLINE E Protected_Formal (E Id)
-+ { return Node22 (Id); }
-+
-+ INLINE N Protected_Operation (E Id)
-+ { return Node23 (Id); }
-+
-+ INLINE B Reachable (E Id)
-+ { return Flag49 (Id); }
-+
-+ INLINE B Referenced (E Id)
-+ { return Flag156 (Id); }
-+
-+ INLINE B Referenced_As_LHS (E Id)
-+ { return Flag36 (Id); }
-+
-+ INLINE N Referenced_Object (E Id)
-+ { return Node10 (Id); }
-+
-+ INLINE N Register_Exception_Call (E Id)
-+ { return Node20 (Id); }
-+
-+ INLINE E Related_Array_Object (E Id)
-+ { return Node19 (Id); }
-+
-+ INLINE E Related_Instance (E Id)
-+ { return Node15 (Id); }
-+
-+ INLINE N Renamed_Entity (E Id)
-+ { return Node18 (Id); }
-+
-+ INLINE N Renamed_Object (E Id)
-+ { return Node18 (Id); }
-+
-+ INLINE U Renaming_Map (E Id)
-+ { return Uint9 (Id); }
-+
-+ INLINE B Return_Present (E Id)
-+ { return Flag54 (Id); }
-+
-+ INLINE B Returns_By_Ref (E Id)
-+ { return Flag90 (Id); }
-+
-+ INLINE B Reverse_Bit_Order (E Id)
-+ { return Flag164 (Base_Type (Id)); }
-+
-+ INLINE U RM_Size (E Id)
-+ { return Uint13 (Id); }
-+
-+ INLINE N Scalar_Range (E Id)
-+ { return Node20 (Id); }
-+
-+ INLINE U Scale_Value (E Id)
-+ { return Uint15 (Id); }
-+
-+ INLINE U Scope_Depth_Value (E Id)
-+ { return Uint22 (Id); }
-+
-+ INLINE B Sec_Stack_Needed_For_Return (E Id)
-+ { return Flag167 (Id); }
-+
-+ INLINE S Shadow_Entities (E Id)
-+ { return List14 (Id); }
-+
-+ INLINE E Shared_Var_Assign_Proc (E Id)
-+ { return Node22 (Id); }
-+
-+ INLINE E Shared_Var_Read_Proc (E Id)
-+ { return Node15 (Id); }
-+
-+ INLINE N Size_Check_Code (E Id)
-+ { return Node19 (Id); }
-+
-+ INLINE B Size_Depends_On_Discriminant (E Id)
-+ { return Flag177 (Id); }
-+
-+ INLINE B Size_Known_At_Compile_Time (E Id)
-+ { return Flag92 (Id); }
-+
-+ INLINE R Small_Value (E Id)
-+ { return Ureal21 (Id); }
-+
-+ INLINE E Spec_Entity (E Id)
-+ { return Node19 (Id); }
-+
-+ INLINE E Storage_Size_Variable (E Id)
-+ { return Node15 (Implementation_Base_Type (Id)); }
-+
-+ INLINE L Stored_Constraint (E Id)
-+ { return Elist23 (Id); }
-+
-+ INLINE B Strict_Alignment (E Id)
-+ { return Flag145 (Implementation_Base_Type (Id)); }
-+
-+ INLINE U String_Literal_Length (E Id)
-+ { return Uint16 (Id); }
-+
-+ INLINE N String_Literal_Low_Bound (E Id)
-+ { return Node15 (Id); }
-+
-+ INLINE B Suppress_Elaboration_Warnings (E Id)
-+ { return Flag148 (Id); }
-+
-+ INLINE B Suppress_Init_Proc (E Id)
-+ { return Flag105 (Base_Type (Id)); }
-+
-+ INLINE B Suppress_Style_Checks (E Id)
-+ { return Flag165 (Id); }
-+
-+ INLINE B Treat_As_Volatile (E Id)
-+ { return Flag41 (Id); }
-+
-+ INLINE E Underlying_Full_View (E Id)
-+ { return Node19 (Id); }
-+
-+ INLINE N Unset_Reference (E Id)
-+ { return Node16 (Id); }
-+
-+ INLINE B Uses_Sec_Stack (E Id)
-+ { return Flag95 (Id); }
-+
-+ INLINE B Vax_Float (E Id)
-+ { return Flag151 (Base_Type (Id)); }
-+
-+ INLINE B Warnings_Off (E Id)
-+ { return Flag96 (Id); }
-+
-+ INLINE B Is_Access_Type (E Id)
-+ { return IN (Ekind (Id), Access_Kind); }
-+
-+ INLINE B Is_Array_Type (E Id)
-+ { return IN (Ekind (Id), Array_Kind); }
-+
-+ INLINE B Is_Class_Wide_Type (E Id)
-+ { return IN (Ekind (Id), Class_Wide_Kind); }
-+
-+ INLINE B Is_Composite_Type (E Id)
-+ { return IN (Ekind (Id), Composite_Kind); }
-+
-+ INLINE B Is_Concurrent_Body (E Id)
-+ { return IN (Ekind (Id), Concurrent_Body_Kind); }
-+
-+ INLINE B Is_Concurrent_Record_Type (E Id)
-+ { return Flag20 (Id); }
-+
-+ INLINE B Is_Concurrent_Type (E Id)
-+ { return IN (Ekind (Id), Concurrent_Kind); }
-+
-+ INLINE B Is_Decimal_Fixed_Point_Type (E Id)
-+ { return IN (Ekind (Id), Decimal_Fixed_Point_Kind); }
-+
-+ INLINE B Is_Digits_Type (E Id)
-+ { return IN (Ekind (Id), Digits_Kind); }
-+
-+ INLINE B Is_Discrete_Or_Fixed_Point_Type (E Id)
-+ { return IN (Ekind (Id), Discrete_Or_Fixed_Point_Kind); }
-+
-+ INLINE B Is_Discrete_Type (E Id)
-+ { return IN (Ekind (Id), Discrete_Kind); }
-+
-+ INLINE B Is_Elementary_Type (E Id)
-+ { return IN (Ekind (Id), Elementary_Kind); }
-+
-+ INLINE B Is_Entry (E Id)
-+ { return IN (Ekind (Id), Entry_Kind); }
-+
-+ INLINE B Is_Enumeration_Type (E Id)
-+ { return IN (Ekind (Id), Enumeration_Kind); }
-+
-+ INLINE B Is_Fixed_Point_Type (E Id)
-+ { return IN (Ekind (Id), Fixed_Point_Kind); }
-+
-+ INLINE B Is_Floating_Point_Type (E Id)
-+ { return IN (Ekind (Id), Float_Kind); }
-+
-+ INLINE B Is_Formal (E Id)
-+ { return IN (Ekind (Id), Formal_Kind); }
-+
-+ INLINE B Is_Generic_Subprogram (E Id)
-+ { return IN (Ekind (Id), Generic_Subprogram_Kind); }
-+
-+ INLINE B Is_Generic_Unit (E Id)
-+ { return IN (Ekind (Id), Generic_Unit_Kind); }
-+
-+ INLINE B Is_Incomplete_Or_Private_Type (E Id)
-+ { return IN (Ekind (Id), Incomplete_Or_Private_Kind); }
-+
-+ INLINE B Is_Integer_Type (E Id)
-+ { return IN (Ekind (Id), Integer_Kind); }
-+
-+ INLINE B Is_Modular_Integer_Type (E Id)
-+ { return IN (Ekind (Id), Modular_Integer_Kind); }
-+
-+ INLINE B Is_Named_Number (E Id)
-+ { return IN (Ekind (Id), Named_Kind); }
-+
-+ INLINE B Is_Numeric_Type (E Id)
-+ { return IN (Ekind (Id), Numeric_Kind); }
-+
-+ INLINE B Is_Object (E Id)
-+ { return IN (Ekind (Id), Object_Kind); }
-+
-+ INLINE B Is_Ordinary_Fixed_Point_Type (E Id)
-+ { return IN (Ekind (Id), Ordinary_Fixed_Point_Kind); }
-+
-+ INLINE B Is_Overloadable (E Id)
-+ { return IN (Ekind (Id), Overloadable_Kind); }
-+
-+ INLINE B Is_Private_Type (E Id)
-+ { return IN (Ekind (Id), Private_Kind); }
-+
-+ INLINE B Is_Protected_Type (E Id)
-+ { return IN (Ekind (Id), Protected_Kind); }
-+
-+ INLINE B Is_Real_Type (E Id)
-+ { return IN (Ekind (Id), Real_Kind); }
-+
-+ INLINE B Is_Record_Type (E Id)
-+ { return IN (Ekind (Id), Record_Kind); }
-+
-+ INLINE B Is_Scalar_Type (E Id)
-+ { return IN (Ekind (Id), Scalar_Kind); }
-+
-+ INLINE B Is_Signed_Integer_Type (E Id)
-+ { return IN (Ekind (Id), Signed_Integer_Kind); }
-+
-+ INLINE B Is_Subprogram (E Id)
-+ { return IN (Ekind (Id), Subprogram_Kind); }
-+
-+ INLINE B Is_Task_Type (E Id)
-+ { return IN (Ekind (Id), Task_Kind); }
-+
-+ INLINE B Is_Type (E Id)
-+ { return IN (Ekind (Id), Type_Kind); }
-+
-+ INLINE N Entry_Index_Type (E Id)
-+ { return Etype (Discrete_Subtype_Definition (Parent (Id))); }
-+
-+ INLINE Node_Id Next_Index (Node_Id Id)
-+ { return Next (Id); }
-+
-+ INLINE E Next_Literal (E Id)
-+ { return Next (Id); }
-+
-+ INLINE Formal_Kind Parameter_Mode (E Id)
-+ { return Ekind (Id); }
-+
-+/* End of einfo.h (C version of Einfo package specification) */
---- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/nmake.adb.orig 1970-01-01 01:00:00.000000000 +0100
-+++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/nmake.adb 2004-06-02 00:52:35.000000000 +0200
-@@ -0,0 +1,2867 @@
-+------------------------------------------------------------------------------
-+-- --
-+-- GNAT COMPILER COMPONENTS --
-+-- --
-+-- N M A K E --
-+-- --
-+-- B o d y --
-+-- --
-+-- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
-+-- --
-+-- GNAT is free software; you can redistribute it and/or modify it under --
-+-- terms of the GNU General Public License as published by the Free Soft- --
-+-- ware Foundation; either version 2, or (at your option) any later ver- --
-+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
-+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
-+-- for more details. You should have received a copy of the GNU General --
-+-- Public License distributed with GNAT; see file COPYING. If not, write --
-+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
-+-- MA 02111-1307, USA. --
-+-- --
-+-- GNAT was originally developed by the GNAT team at New York University. --
-+-- Extensive contributions were provided by Ada Core Technologies Inc. --
-+-- --
-+------------------------------------------------------------------------------
-+
-+pragma Style_Checks (All_Checks);
-+-- Turn off subprogram order checking, since the routines here are
-+-- generated automatically in order.
-+
-+
-+with Atree; use Atree;
-+with Sinfo; use Sinfo;
-+with Snames; use Snames;
-+with Stand; use Stand;
-+
-+package body Nmake is
-+
-+ function Make_Unused_At_Start (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Unused_At_Start, Sloc);
-+ begin
-+ return N;
-+ end Make_Unused_At_Start;
-+
-+ function Make_Unused_At_End (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Unused_At_End, Sloc);
-+ begin
-+ return N;
-+ end Make_Unused_At_End;
-+
-+ function Make_Identifier (Sloc : Source_Ptr;
-+ Chars : Name_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Identifier, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ return N;
-+ end Make_Identifier;
-+
-+ function Make_Integer_Literal (Sloc : Source_Ptr;
-+ Intval : Uint)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Integer_Literal, Sloc);
-+ begin
-+ Set_Intval (N, Intval);
-+ return N;
-+ end Make_Integer_Literal;
-+
-+ function Make_Real_Literal (Sloc : Source_Ptr;
-+ Realval : Ureal)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Real_Literal, Sloc);
-+ begin
-+ Set_Realval (N, Realval);
-+ return N;
-+ end Make_Real_Literal;
-+
-+ function Make_Character_Literal (Sloc : Source_Ptr;
-+ Chars : Name_Id;
-+ Char_Literal_Value : Char_Code)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Character_Literal, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ Set_Char_Literal_Value (N, Char_Literal_Value);
-+ return N;
-+ end Make_Character_Literal;
-+
-+ function Make_String_Literal (Sloc : Source_Ptr;
-+ Strval : String_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_String_Literal, Sloc);
-+ begin
-+ Set_Strval (N, Strval);
-+ return N;
-+ end Make_String_Literal;
-+
-+ function Make_Pragma (Sloc : Source_Ptr;
-+ Chars : Name_Id;
-+ Pragma_Argument_Associations : List_Id := No_List;
-+ Debug_Statement : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Pragma, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ Set_Pragma_Argument_Associations
-+ (N, Pragma_Argument_Associations);
-+ Set_Debug_Statement (N, Debug_Statement);
-+ return N;
-+ end Make_Pragma;
-+
-+ function Make_Pragma_Argument_Association (Sloc : Source_Ptr;
-+ Chars : Name_Id := No_Name;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Pragma_Argument_Association, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Pragma_Argument_Association;
-+
-+ function Make_Defining_Identifier (Sloc : Source_Ptr;
-+ Chars : Name_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Entity (N_Defining_Identifier, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ return N;
-+ end Make_Defining_Identifier;
-+
-+ function Make_Full_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Type_Definition : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Full_Type_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discriminant_Specifications (N, Discriminant_Specifications);
-+ Set_Type_Definition (N, Type_Definition);
-+ return N;
-+ end Make_Full_Type_Declaration;
-+
-+ function Make_Subtype_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Subtype_Indication : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Subtype_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Subtype_Indication (N, Subtype_Indication);
-+ return N;
-+ end Make_Subtype_Declaration;
-+
-+ function Make_Subtype_Indication (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Constraint : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Subtype_Indication, Sloc);
-+ begin
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ Set_Constraint (N, Constraint);
-+ return N;
-+ end Make_Subtype_Indication;
-+
-+ function Make_Object_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Aliased_Present : Boolean := False;
-+ Constant_Present : Boolean := False;
-+ Object_Definition : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Object_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Aliased_Present (N, Aliased_Present);
-+ Set_Constant_Present (N, Constant_Present);
-+ Set_Object_Definition (N, Object_Definition);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Object_Declaration;
-+
-+ function Make_Number_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Number_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Number_Declaration;
-+
-+ function Make_Derived_Type_Definition (Sloc : Source_Ptr;
-+ Abstract_Present : Boolean := False;
-+ Subtype_Indication : Node_Id;
-+ Record_Extension_Part : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Derived_Type_Definition, Sloc);
-+ begin
-+ Set_Abstract_Present (N, Abstract_Present);
-+ Set_Subtype_Indication (N, Subtype_Indication);
-+ Set_Record_Extension_Part (N, Record_Extension_Part);
-+ return N;
-+ end Make_Derived_Type_Definition;
-+
-+ function Make_Range_Constraint (Sloc : Source_Ptr;
-+ Range_Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Range_Constraint, Sloc);
-+ begin
-+ Set_Range_Expression (N, Range_Expression);
-+ return N;
-+ end Make_Range_Constraint;
-+
-+ function Make_Range (Sloc : Source_Ptr;
-+ Low_Bound : Node_Id;
-+ High_Bound : Node_Id;
-+ Includes_Infinities : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Range, Sloc);
-+ begin
-+ Set_Low_Bound (N, Low_Bound);
-+ Set_High_Bound (N, High_Bound);
-+ Set_Includes_Infinities (N, Includes_Infinities);
-+ return N;
-+ end Make_Range;
-+
-+ function Make_Enumeration_Type_Definition (Sloc : Source_Ptr;
-+ Literals : List_Id;
-+ End_Label : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Enumeration_Type_Definition, Sloc);
-+ begin
-+ Set_Literals (N, Literals);
-+ Set_End_Label (N, End_Label);
-+ return N;
-+ end Make_Enumeration_Type_Definition;
-+
-+ function Make_Defining_Character_Literal (Sloc : Source_Ptr;
-+ Chars : Name_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Entity (N_Defining_Character_Literal, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ return N;
-+ end Make_Defining_Character_Literal;
-+
-+ function Make_Signed_Integer_Type_Definition (Sloc : Source_Ptr;
-+ Low_Bound : Node_Id;
-+ High_Bound : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Signed_Integer_Type_Definition, Sloc);
-+ begin
-+ Set_Low_Bound (N, Low_Bound);
-+ Set_High_Bound (N, High_Bound);
-+ return N;
-+ end Make_Signed_Integer_Type_Definition;
-+
-+ function Make_Modular_Type_Definition (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Modular_Type_Definition, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Modular_Type_Definition;
-+
-+ function Make_Floating_Point_Definition (Sloc : Source_Ptr;
-+ Digits_Expression : Node_Id;
-+ Real_Range_Specification : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Floating_Point_Definition, Sloc);
-+ begin
-+ Set_Digits_Expression (N, Digits_Expression);
-+ Set_Real_Range_Specification (N, Real_Range_Specification);
-+ return N;
-+ end Make_Floating_Point_Definition;
-+
-+ function Make_Real_Range_Specification (Sloc : Source_Ptr;
-+ Low_Bound : Node_Id;
-+ High_Bound : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Real_Range_Specification, Sloc);
-+ begin
-+ Set_Low_Bound (N, Low_Bound);
-+ Set_High_Bound (N, High_Bound);
-+ return N;
-+ end Make_Real_Range_Specification;
-+
-+ function Make_Ordinary_Fixed_Point_Definition (Sloc : Source_Ptr;
-+ Delta_Expression : Node_Id;
-+ Real_Range_Specification : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Ordinary_Fixed_Point_Definition, Sloc);
-+ begin
-+ Set_Delta_Expression (N, Delta_Expression);
-+ Set_Real_Range_Specification (N, Real_Range_Specification);
-+ return N;
-+ end Make_Ordinary_Fixed_Point_Definition;
-+
-+ function Make_Decimal_Fixed_Point_Definition (Sloc : Source_Ptr;
-+ Delta_Expression : Node_Id;
-+ Digits_Expression : Node_Id;
-+ Real_Range_Specification : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Decimal_Fixed_Point_Definition, Sloc);
-+ begin
-+ Set_Delta_Expression (N, Delta_Expression);
-+ Set_Digits_Expression (N, Digits_Expression);
-+ Set_Real_Range_Specification (N, Real_Range_Specification);
-+ return N;
-+ end Make_Decimal_Fixed_Point_Definition;
-+
-+ function Make_Digits_Constraint (Sloc : Source_Ptr;
-+ Digits_Expression : Node_Id;
-+ Range_Constraint : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Digits_Constraint, Sloc);
-+ begin
-+ Set_Digits_Expression (N, Digits_Expression);
-+ Set_Range_Constraint (N, Range_Constraint);
-+ return N;
-+ end Make_Digits_Constraint;
-+
-+ function Make_Unconstrained_Array_Definition (Sloc : Source_Ptr;
-+ Subtype_Marks : List_Id;
-+ Component_Definition : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Unconstrained_Array_Definition, Sloc);
-+ begin
-+ Set_Subtype_Marks (N, Subtype_Marks);
-+ Set_Component_Definition (N, Component_Definition);
-+ return N;
-+ end Make_Unconstrained_Array_Definition;
-+
-+ function Make_Constrained_Array_Definition (Sloc : Source_Ptr;
-+ Discrete_Subtype_Definitions : List_Id;
-+ Component_Definition : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Constrained_Array_Definition, Sloc);
-+ begin
-+ Set_Discrete_Subtype_Definitions
-+ (N, Discrete_Subtype_Definitions);
-+ Set_Component_Definition (N, Component_Definition);
-+ return N;
-+ end Make_Constrained_Array_Definition;
-+
-+ function Make_Component_Definition (Sloc : Source_Ptr;
-+ Aliased_Present : Boolean := False;
-+ Subtype_Indication : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Component_Definition, Sloc);
-+ begin
-+ Set_Aliased_Present (N, Aliased_Present);
-+ Set_Subtype_Indication (N, Subtype_Indication);
-+ return N;
-+ end Make_Component_Definition;
-+
-+ function Make_Discriminant_Specification (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Type : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Discriminant_Specification, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discriminant_Type (N, Discriminant_Type);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Discriminant_Specification;
-+
-+ function Make_Index_Or_Discriminant_Constraint (Sloc : Source_Ptr;
-+ Constraints : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Index_Or_Discriminant_Constraint, Sloc);
-+ begin
-+ Set_Constraints (N, Constraints);
-+ return N;
-+ end Make_Index_Or_Discriminant_Constraint;
-+
-+ function Make_Discriminant_Association (Sloc : Source_Ptr;
-+ Selector_Names : List_Id;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Discriminant_Association, Sloc);
-+ begin
-+ Set_Selector_Names (N, Selector_Names);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Discriminant_Association;
-+
-+ function Make_Record_Definition (Sloc : Source_Ptr;
-+ End_Label : Node_Id := Empty;
-+ Abstract_Present : Boolean := False;
-+ Tagged_Present : Boolean := False;
-+ Limited_Present : Boolean := False;
-+ Component_List : Node_Id;
-+ Null_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Record_Definition, Sloc);
-+ begin
-+ Set_End_Label (N, End_Label);
-+ Set_Abstract_Present (N, Abstract_Present);
-+ Set_Tagged_Present (N, Tagged_Present);
-+ Set_Limited_Present (N, Limited_Present);
-+ Set_Component_List (N, Component_List);
-+ Set_Null_Present (N, Null_Present);
-+ return N;
-+ end Make_Record_Definition;
-+
-+ function Make_Component_List (Sloc : Source_Ptr;
-+ Component_Items : List_Id;
-+ Variant_Part : Node_Id := Empty;
-+ Null_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Component_List, Sloc);
-+ begin
-+ Set_Component_Items (N, Component_Items);
-+ Set_Variant_Part (N, Variant_Part);
-+ Set_Null_Present (N, Null_Present);
-+ return N;
-+ end Make_Component_List;
-+
-+ function Make_Component_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Component_Definition : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Component_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Component_Definition (N, Component_Definition);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Component_Declaration;
-+
-+ function Make_Variant_Part (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Variants : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Variant_Part, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Variants (N, Variants);
-+ return N;
-+ end Make_Variant_Part;
-+
-+ function Make_Variant (Sloc : Source_Ptr;
-+ Discrete_Choices : List_Id;
-+ Component_List : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Variant, Sloc);
-+ begin
-+ Set_Discrete_Choices (N, Discrete_Choices);
-+ Set_Component_List (N, Component_List);
-+ return N;
-+ end Make_Variant;
-+
-+ function Make_Others_Choice (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Others_Choice, Sloc);
-+ begin
-+ return N;
-+ end Make_Others_Choice;
-+
-+ function Make_Access_To_Object_Definition (Sloc : Source_Ptr;
-+ All_Present : Boolean := False;
-+ Subtype_Indication : Node_Id;
-+ Constant_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Access_To_Object_Definition, Sloc);
-+ begin
-+ Set_All_Present (N, All_Present);
-+ Set_Subtype_Indication (N, Subtype_Indication);
-+ Set_Constant_Present (N, Constant_Present);
-+ return N;
-+ end Make_Access_To_Object_Definition;
-+
-+ function Make_Access_Function_Definition (Sloc : Source_Ptr;
-+ Protected_Present : Boolean := False;
-+ Parameter_Specifications : List_Id := No_List;
-+ Subtype_Mark : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Access_Function_Definition, Sloc);
-+ begin
-+ Set_Protected_Present (N, Protected_Present);
-+ Set_Parameter_Specifications (N, Parameter_Specifications);
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ return N;
-+ end Make_Access_Function_Definition;
-+
-+ function Make_Access_Procedure_Definition (Sloc : Source_Ptr;
-+ Protected_Present : Boolean := False;
-+ Parameter_Specifications : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Access_Procedure_Definition, Sloc);
-+ begin
-+ Set_Protected_Present (N, Protected_Present);
-+ Set_Parameter_Specifications (N, Parameter_Specifications);
-+ return N;
-+ end Make_Access_Procedure_Definition;
-+
-+ function Make_Access_Definition (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Access_Definition, Sloc);
-+ begin
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ return N;
-+ end Make_Access_Definition;
-+
-+ function Make_Incomplete_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Unknown_Discriminants_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Incomplete_Type_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discriminant_Specifications (N, Discriminant_Specifications);
-+ Set_Unknown_Discriminants_Present
-+ (N, Unknown_Discriminants_Present);
-+ return N;
-+ end Make_Incomplete_Type_Declaration;
-+
-+ function Make_Explicit_Dereference (Sloc : Source_Ptr;
-+ Prefix : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Explicit_Dereference, Sloc);
-+ begin
-+ Set_Prefix (N, Prefix);
-+ return N;
-+ end Make_Explicit_Dereference;
-+
-+ function Make_Indexed_Component (Sloc : Source_Ptr;
-+ Prefix : Node_Id;
-+ Expressions : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Indexed_Component, Sloc);
-+ begin
-+ Set_Prefix (N, Prefix);
-+ Set_Expressions (N, Expressions);
-+ return N;
-+ end Make_Indexed_Component;
-+
-+ function Make_Slice (Sloc : Source_Ptr;
-+ Prefix : Node_Id;
-+ Discrete_Range : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Slice, Sloc);
-+ begin
-+ Set_Prefix (N, Prefix);
-+ Set_Discrete_Range (N, Discrete_Range);
-+ return N;
-+ end Make_Slice;
-+
-+ function Make_Selected_Component (Sloc : Source_Ptr;
-+ Prefix : Node_Id;
-+ Selector_Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Selected_Component, Sloc);
-+ begin
-+ Set_Prefix (N, Prefix);
-+ Set_Selector_Name (N, Selector_Name);
-+ return N;
-+ end Make_Selected_Component;
-+
-+ function Make_Attribute_Reference (Sloc : Source_Ptr;
-+ Prefix : Node_Id;
-+ Attribute_Name : Name_Id;
-+ Expressions : List_Id := No_List;
-+ Must_Be_Byte_Aligned : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Attribute_Reference, Sloc);
-+ begin
-+ Set_Prefix (N, Prefix);
-+ Set_Attribute_Name (N, Attribute_Name);
-+ Set_Expressions (N, Expressions);
-+ Set_Must_Be_Byte_Aligned (N, Must_Be_Byte_Aligned);
-+ return N;
-+ end Make_Attribute_Reference;
-+
-+ function Make_Aggregate (Sloc : Source_Ptr;
-+ Expressions : List_Id := No_List;
-+ Component_Associations : List_Id := No_List;
-+ Null_Record_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Aggregate, Sloc);
-+ begin
-+ Set_Expressions (N, Expressions);
-+ Set_Component_Associations (N, Component_Associations);
-+ Set_Null_Record_Present (N, Null_Record_Present);
-+ return N;
-+ end Make_Aggregate;
-+
-+ function Make_Component_Association (Sloc : Source_Ptr;
-+ Choices : List_Id;
-+ Expression : Node_Id;
-+ Box_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Component_Association, Sloc);
-+ begin
-+ Set_Choices (N, Choices);
-+ Set_Expression (N, Expression);
-+ Set_Box_Present (N, Box_Present);
-+ return N;
-+ end Make_Component_Association;
-+
-+ function Make_Extension_Aggregate (Sloc : Source_Ptr;
-+ Ancestor_Part : Node_Id;
-+ Expressions : List_Id := No_List;
-+ Component_Associations : List_Id := No_List;
-+ Null_Record_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Extension_Aggregate, Sloc);
-+ begin
-+ Set_Ancestor_Part (N, Ancestor_Part);
-+ Set_Expressions (N, Expressions);
-+ Set_Component_Associations (N, Component_Associations);
-+ Set_Null_Record_Present (N, Null_Record_Present);
-+ return N;
-+ end Make_Extension_Aggregate;
-+
-+ function Make_Null (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Null, Sloc);
-+ begin
-+ return N;
-+ end Make_Null;
-+
-+ function Make_And_Then (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_And_Then, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ return N;
-+ end Make_And_Then;
-+
-+ function Make_Or_Else (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Or_Else, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ return N;
-+ end Make_Or_Else;
-+
-+ function Make_In (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_In, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ return N;
-+ end Make_In;
-+
-+ function Make_Not_In (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Not_In, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ return N;
-+ end Make_Not_In;
-+
-+ function Make_Op_And (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_And, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_And);
-+ Set_Entity (N, Standard_Op_And);
-+ return N;
-+ end Make_Op_And;
-+
-+ function Make_Op_Or (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Or, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Or);
-+ Set_Entity (N, Standard_Op_Or);
-+ return N;
-+ end Make_Op_Or;
-+
-+ function Make_Op_Xor (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Xor, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Xor);
-+ Set_Entity (N, Standard_Op_Xor);
-+ return N;
-+ end Make_Op_Xor;
-+
-+ function Make_Op_Eq (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Eq, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Eq);
-+ Set_Entity (N, Standard_Op_Eq);
-+ return N;
-+ end Make_Op_Eq;
-+
-+ function Make_Op_Ne (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Ne, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Ne);
-+ Set_Entity (N, Standard_Op_Ne);
-+ return N;
-+ end Make_Op_Ne;
-+
-+ function Make_Op_Lt (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Lt, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Lt);
-+ Set_Entity (N, Standard_Op_Lt);
-+ return N;
-+ end Make_Op_Lt;
-+
-+ function Make_Op_Le (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Le, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Le);
-+ Set_Entity (N, Standard_Op_Le);
-+ return N;
-+ end Make_Op_Le;
-+
-+ function Make_Op_Gt (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Gt, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Gt);
-+ Set_Entity (N, Standard_Op_Gt);
-+ return N;
-+ end Make_Op_Gt;
-+
-+ function Make_Op_Ge (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Ge, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Ge);
-+ Set_Entity (N, Standard_Op_Ge);
-+ return N;
-+ end Make_Op_Ge;
-+
-+ function Make_Op_Add (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Add, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Add);
-+ Set_Entity (N, Standard_Op_Add);
-+ return N;
-+ end Make_Op_Add;
-+
-+ function Make_Op_Subtract (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Subtract, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Subtract);
-+ Set_Entity (N, Standard_Op_Subtract);
-+ return N;
-+ end Make_Op_Subtract;
-+
-+ function Make_Op_Concat (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Concat, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Concat);
-+ Set_Entity (N, Standard_Op_Concat);
-+ return N;
-+ end Make_Op_Concat;
-+
-+ function Make_Op_Multiply (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Multiply, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Multiply);
-+ Set_Entity (N, Standard_Op_Multiply);
-+ return N;
-+ end Make_Op_Multiply;
-+
-+ function Make_Op_Divide (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Divide, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Divide);
-+ Set_Entity (N, Standard_Op_Divide);
-+ return N;
-+ end Make_Op_Divide;
-+
-+ function Make_Op_Mod (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Mod, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Mod);
-+ Set_Entity (N, Standard_Op_Mod);
-+ return N;
-+ end Make_Op_Mod;
-+
-+ function Make_Op_Rem (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Rem, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Rem);
-+ Set_Entity (N, Standard_Op_Rem);
-+ return N;
-+ end Make_Op_Rem;
-+
-+ function Make_Op_Expon (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Expon, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Expon);
-+ Set_Entity (N, Standard_Op_Expon);
-+ return N;
-+ end Make_Op_Expon;
-+
-+ function Make_Op_Plus (Sloc : Source_Ptr;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Plus, Sloc);
-+ begin
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Add);
-+ Set_Entity (N, Standard_Op_Plus);
-+ return N;
-+ end Make_Op_Plus;
-+
-+ function Make_Op_Minus (Sloc : Source_Ptr;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Minus, Sloc);
-+ begin
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Subtract);
-+ Set_Entity (N, Standard_Op_Minus);
-+ return N;
-+ end Make_Op_Minus;
-+
-+ function Make_Op_Abs (Sloc : Source_Ptr;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Abs, Sloc);
-+ begin
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Abs);
-+ Set_Entity (N, Standard_Op_Abs);
-+ return N;
-+ end Make_Op_Abs;
-+
-+ function Make_Op_Not (Sloc : Source_Ptr;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Not, Sloc);
-+ begin
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Op_Not);
-+ Set_Entity (N, Standard_Op_Not);
-+ return N;
-+ end Make_Op_Not;
-+
-+ function Make_Type_Conversion (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Type_Conversion, Sloc);
-+ begin
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Type_Conversion;
-+
-+ function Make_Qualified_Expression (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Qualified_Expression, Sloc);
-+ begin
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Qualified_Expression;
-+
-+ function Make_Allocator (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Allocator, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Allocator;
-+
-+ function Make_Null_Statement (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Null_Statement, Sloc);
-+ begin
-+ return N;
-+ end Make_Null_Statement;
-+
-+ function Make_Label (Sloc : Source_Ptr;
-+ Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Label, Sloc);
-+ begin
-+ Set_Identifier (N, Identifier);
-+ return N;
-+ end Make_Label;
-+
-+ function Make_Assignment_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Assignment_Statement, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Assignment_Statement;
-+
-+ function Make_If_Statement (Sloc : Source_Ptr;
-+ Condition : Node_Id;
-+ Then_Statements : List_Id;
-+ Elsif_Parts : List_Id := No_List;
-+ Else_Statements : List_Id := No_List;
-+ End_Span : Uint := No_Uint)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_If_Statement, Sloc);
-+ begin
-+ Set_Condition (N, Condition);
-+ Set_Then_Statements (N, Then_Statements);
-+ Set_Elsif_Parts (N, Elsif_Parts);
-+ Set_Else_Statements (N, Else_Statements);
-+ Set_End_Span (N, End_Span);
-+ return N;
-+ end Make_If_Statement;
-+
-+ function Make_Elsif_Part (Sloc : Source_Ptr;
-+ Condition : Node_Id;
-+ Then_Statements : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Elsif_Part, Sloc);
-+ begin
-+ Set_Condition (N, Condition);
-+ Set_Then_Statements (N, Then_Statements);
-+ return N;
-+ end Make_Elsif_Part;
-+
-+ function Make_Case_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id;
-+ Alternatives : List_Id;
-+ End_Span : Uint := No_Uint)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Case_Statement, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ Set_Alternatives (N, Alternatives);
-+ Set_End_Span (N, End_Span);
-+ return N;
-+ end Make_Case_Statement;
-+
-+ function Make_Case_Statement_Alternative (Sloc : Source_Ptr;
-+ Discrete_Choices : List_Id;
-+ Statements : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Case_Statement_Alternative, Sloc);
-+ begin
-+ Set_Discrete_Choices (N, Discrete_Choices);
-+ Set_Statements (N, Statements);
-+ return N;
-+ end Make_Case_Statement_Alternative;
-+
-+ function Make_Loop_Statement (Sloc : Source_Ptr;
-+ Identifier : Node_Id := Empty;
-+ Iteration_Scheme : Node_Id := Empty;
-+ Statements : List_Id;
-+ End_Label : Node_Id;
-+ Has_Created_Identifier : Boolean := False;
-+ Is_Null_Loop : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Loop_Statement, Sloc);
-+ begin
-+ Set_Identifier (N, Identifier);
-+ Set_Iteration_Scheme (N, Iteration_Scheme);
-+ Set_Statements (N, Statements);
-+ Set_End_Label (N, End_Label);
-+ Set_Has_Created_Identifier (N, Has_Created_Identifier);
-+ Set_Is_Null_Loop (N, Is_Null_Loop);
-+ return N;
-+ end Make_Loop_Statement;
-+
-+ function Make_Iteration_Scheme (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Loop_Parameter_Specification : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Iteration_Scheme, Sloc);
-+ begin
-+ Set_Condition (N, Condition);
-+ Set_Loop_Parameter_Specification
-+ (N, Loop_Parameter_Specification);
-+ return N;
-+ end Make_Iteration_Scheme;
-+
-+ function Make_Loop_Parameter_Specification (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Reverse_Present : Boolean := False;
-+ Discrete_Subtype_Definition : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Loop_Parameter_Specification, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Reverse_Present (N, Reverse_Present);
-+ Set_Discrete_Subtype_Definition (N, Discrete_Subtype_Definition);
-+ return N;
-+ end Make_Loop_Parameter_Specification;
-+
-+ function Make_Block_Statement (Sloc : Source_Ptr;
-+ Identifier : Node_Id := Empty;
-+ Declarations : List_Id := No_List;
-+ Handled_Statement_Sequence : Node_Id;
-+ Has_Created_Identifier : Boolean := False;
-+ Is_Task_Allocation_Block : Boolean := False;
-+ Is_Asynchronous_Call_Block : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Block_Statement, Sloc);
-+ begin
-+ Set_Identifier (N, Identifier);
-+ Set_Declarations (N, Declarations);
-+ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
-+ Set_Has_Created_Identifier (N, Has_Created_Identifier);
-+ Set_Is_Task_Allocation_Block (N, Is_Task_Allocation_Block);
-+ Set_Is_Asynchronous_Call_Block (N, Is_Asynchronous_Call_Block);
-+ return N;
-+ end Make_Block_Statement;
-+
-+ function Make_Exit_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id := Empty;
-+ Condition : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Exit_Statement, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Condition (N, Condition);
-+ return N;
-+ end Make_Exit_Statement;
-+
-+ function Make_Goto_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Goto_Statement, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Goto_Statement;
-+
-+ function Make_Subprogram_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Subprogram_Declaration, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ return N;
-+ end Make_Subprogram_Declaration;
-+
-+ function Make_Abstract_Subprogram_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Abstract_Subprogram_Declaration, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ return N;
-+ end Make_Abstract_Subprogram_Declaration;
-+
-+ function Make_Function_Specification (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Parameter_Specifications : List_Id := No_List;
-+ Subtype_Mark : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Function_Specification, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Parameter_Specifications (N, Parameter_Specifications);
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ return N;
-+ end Make_Function_Specification;
-+
-+ function Make_Procedure_Specification (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Parameter_Specifications : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Procedure_Specification, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Parameter_Specifications (N, Parameter_Specifications);
-+ return N;
-+ end Make_Procedure_Specification;
-+
-+ function Make_Designator (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Designator, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Identifier (N, Identifier);
-+ return N;
-+ end Make_Designator;
-+
-+ function Make_Defining_Program_Unit_Name (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Defining_Program_Unit_Name, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ return N;
-+ end Make_Defining_Program_Unit_Name;
-+
-+ function Make_Operator_Symbol (Sloc : Source_Ptr;
-+ Chars : Name_Id;
-+ Strval : String_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Operator_Symbol, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ Set_Strval (N, Strval);
-+ return N;
-+ end Make_Operator_Symbol;
-+
-+ function Make_Defining_Operator_Symbol (Sloc : Source_Ptr;
-+ Chars : Name_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Entity (N_Defining_Operator_Symbol, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ return N;
-+ end Make_Defining_Operator_Symbol;
-+
-+ function Make_Parameter_Specification (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ In_Present : Boolean := False;
-+ Out_Present : Boolean := False;
-+ Parameter_Type : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Parameter_Specification, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_In_Present (N, In_Present);
-+ Set_Out_Present (N, Out_Present);
-+ Set_Parameter_Type (N, Parameter_Type);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Parameter_Specification;
-+
-+ function Make_Subprogram_Body (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Declarations : List_Id;
-+ Handled_Statement_Sequence : Node_Id;
-+ Bad_Is_Detected : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Subprogram_Body, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ Set_Declarations (N, Declarations);
-+ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
-+ Set_Bad_Is_Detected (N, Bad_Is_Detected);
-+ return N;
-+ end Make_Subprogram_Body;
-+
-+ function Make_Procedure_Call_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Parameter_Associations : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Procedure_Call_Statement, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Parameter_Associations (N, Parameter_Associations);
-+ return N;
-+ end Make_Procedure_Call_Statement;
-+
-+ function Make_Function_Call (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Parameter_Associations : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Function_Call, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Parameter_Associations (N, Parameter_Associations);
-+ return N;
-+ end Make_Function_Call;
-+
-+ function Make_Parameter_Association (Sloc : Source_Ptr;
-+ Selector_Name : Node_Id;
-+ Explicit_Actual_Parameter : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Parameter_Association, Sloc);
-+ begin
-+ Set_Selector_Name (N, Selector_Name);
-+ Set_Explicit_Actual_Parameter (N, Explicit_Actual_Parameter);
-+ return N;
-+ end Make_Parameter_Association;
-+
-+ function Make_Return_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Return_Statement, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Return_Statement;
-+
-+ function Make_Package_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Package_Declaration, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ return N;
-+ end Make_Package_Declaration;
-+
-+ function Make_Package_Specification (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Visible_Declarations : List_Id;
-+ Private_Declarations : List_Id := No_List;
-+ End_Label : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Package_Specification, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Visible_Declarations (N, Visible_Declarations);
-+ Set_Private_Declarations (N, Private_Declarations);
-+ Set_End_Label (N, End_Label);
-+ return N;
-+ end Make_Package_Specification;
-+
-+ function Make_Package_Body (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Declarations : List_Id;
-+ Handled_Statement_Sequence : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Package_Body, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Declarations (N, Declarations);
-+ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
-+ return N;
-+ end Make_Package_Body;
-+
-+ function Make_Private_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Unknown_Discriminants_Present : Boolean := False;
-+ Abstract_Present : Boolean := False;
-+ Tagged_Present : Boolean := False;
-+ Limited_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Private_Type_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discriminant_Specifications (N, Discriminant_Specifications);
-+ Set_Unknown_Discriminants_Present
-+ (N, Unknown_Discriminants_Present);
-+ Set_Abstract_Present (N, Abstract_Present);
-+ Set_Tagged_Present (N, Tagged_Present);
-+ Set_Limited_Present (N, Limited_Present);
-+ return N;
-+ end Make_Private_Type_Declaration;
-+
-+ function Make_Private_Extension_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Unknown_Discriminants_Present : Boolean := False;
-+ Abstract_Present : Boolean := False;
-+ Subtype_Indication : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Private_Extension_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discriminant_Specifications (N, Discriminant_Specifications);
-+ Set_Unknown_Discriminants_Present
-+ (N, Unknown_Discriminants_Present);
-+ Set_Abstract_Present (N, Abstract_Present);
-+ Set_Subtype_Indication (N, Subtype_Indication);
-+ return N;
-+ end Make_Private_Extension_Declaration;
-+
-+ function Make_Use_Package_Clause (Sloc : Source_Ptr;
-+ Names : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Use_Package_Clause, Sloc);
-+ begin
-+ Set_Names (N, Names);
-+ return N;
-+ end Make_Use_Package_Clause;
-+
-+ function Make_Use_Type_Clause (Sloc : Source_Ptr;
-+ Subtype_Marks : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Use_Type_Clause, Sloc);
-+ begin
-+ Set_Subtype_Marks (N, Subtype_Marks);
-+ return N;
-+ end Make_Use_Type_Clause;
-+
-+ function Make_Object_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Subtype_Mark : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Object_Renaming_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Object_Renaming_Declaration;
-+
-+ function Make_Exception_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Exception_Renaming_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Exception_Renaming_Declaration;
-+
-+ function Make_Package_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Package_Renaming_Declaration, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Package_Renaming_Declaration;
-+
-+ function Make_Subprogram_Renaming_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Subprogram_Renaming_Declaration, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Subprogram_Renaming_Declaration;
-+
-+ function Make_Generic_Package_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Generic_Package_Renaming_Declaration, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Generic_Package_Renaming_Declaration;
-+
-+ function Make_Generic_Procedure_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Generic_Procedure_Renaming_Declaration, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Generic_Procedure_Renaming_Declaration;
-+
-+ function Make_Generic_Function_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Generic_Function_Renaming_Declaration, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Generic_Function_Renaming_Declaration;
-+
-+ function Make_Task_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Task_Definition : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Task_Type_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discriminant_Specifications (N, Discriminant_Specifications);
-+ Set_Task_Definition (N, Task_Definition);
-+ return N;
-+ end Make_Task_Type_Declaration;
-+
-+ function Make_Single_Task_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Task_Definition : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Single_Task_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Task_Definition (N, Task_Definition);
-+ return N;
-+ end Make_Single_Task_Declaration;
-+
-+ function Make_Task_Definition (Sloc : Source_Ptr;
-+ Visible_Declarations : List_Id;
-+ Private_Declarations : List_Id := No_List;
-+ End_Label : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Task_Definition, Sloc);
-+ begin
-+ Set_Visible_Declarations (N, Visible_Declarations);
-+ Set_Private_Declarations (N, Private_Declarations);
-+ Set_End_Label (N, End_Label);
-+ return N;
-+ end Make_Task_Definition;
-+
-+ function Make_Task_Body (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Declarations : List_Id;
-+ Handled_Statement_Sequence : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Task_Body, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Declarations (N, Declarations);
-+ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
-+ return N;
-+ end Make_Task_Body;
-+
-+ function Make_Protected_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Protected_Definition : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Protected_Type_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discriminant_Specifications (N, Discriminant_Specifications);
-+ Set_Protected_Definition (N, Protected_Definition);
-+ return N;
-+ end Make_Protected_Type_Declaration;
-+
-+ function Make_Single_Protected_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Protected_Definition : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Single_Protected_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Protected_Definition (N, Protected_Definition);
-+ return N;
-+ end Make_Single_Protected_Declaration;
-+
-+ function Make_Protected_Definition (Sloc : Source_Ptr;
-+ Visible_Declarations : List_Id;
-+ Private_Declarations : List_Id := No_List;
-+ End_Label : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Protected_Definition, Sloc);
-+ begin
-+ Set_Visible_Declarations (N, Visible_Declarations);
-+ Set_Private_Declarations (N, Private_Declarations);
-+ Set_End_Label (N, End_Label);
-+ return N;
-+ end Make_Protected_Definition;
-+
-+ function Make_Protected_Body (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Declarations : List_Id;
-+ End_Label : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Protected_Body, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Declarations (N, Declarations);
-+ Set_End_Label (N, End_Label);
-+ return N;
-+ end Make_Protected_Body;
-+
-+ function Make_Entry_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discrete_Subtype_Definition : Node_Id := Empty;
-+ Parameter_Specifications : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Entry_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discrete_Subtype_Definition (N, Discrete_Subtype_Definition);
-+ Set_Parameter_Specifications (N, Parameter_Specifications);
-+ return N;
-+ end Make_Entry_Declaration;
-+
-+ function Make_Accept_Statement (Sloc : Source_Ptr;
-+ Entry_Direct_Name : Node_Id;
-+ Entry_Index : Node_Id := Empty;
-+ Parameter_Specifications : List_Id := No_List;
-+ Handled_Statement_Sequence : Node_Id;
-+ Declarations : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Accept_Statement, Sloc);
-+ begin
-+ Set_Entry_Direct_Name (N, Entry_Direct_Name);
-+ Set_Entry_Index (N, Entry_Index);
-+ Set_Parameter_Specifications (N, Parameter_Specifications);
-+ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
-+ Set_Declarations (N, Declarations);
-+ return N;
-+ end Make_Accept_Statement;
-+
-+ function Make_Entry_Body (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Entry_Body_Formal_Part : Node_Id;
-+ Declarations : List_Id;
-+ Handled_Statement_Sequence : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Entry_Body, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Entry_Body_Formal_Part (N, Entry_Body_Formal_Part);
-+ Set_Declarations (N, Declarations);
-+ Set_Handled_Statement_Sequence (N, Handled_Statement_Sequence);
-+ return N;
-+ end Make_Entry_Body;
-+
-+ function Make_Entry_Body_Formal_Part (Sloc : Source_Ptr;
-+ Entry_Index_Specification : Node_Id := Empty;
-+ Parameter_Specifications : List_Id := No_List;
-+ Condition : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Entry_Body_Formal_Part, Sloc);
-+ begin
-+ Set_Entry_Index_Specification (N, Entry_Index_Specification);
-+ Set_Parameter_Specifications (N, Parameter_Specifications);
-+ Set_Condition (N, Condition);
-+ return N;
-+ end Make_Entry_Body_Formal_Part;
-+
-+ function Make_Entry_Index_Specification (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discrete_Subtype_Definition : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Entry_Index_Specification, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Discrete_Subtype_Definition (N, Discrete_Subtype_Definition);
-+ return N;
-+ end Make_Entry_Index_Specification;
-+
-+ function Make_Entry_Call_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Parameter_Associations : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Entry_Call_Statement, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Parameter_Associations (N, Parameter_Associations);
-+ return N;
-+ end Make_Entry_Call_Statement;
-+
-+ function Make_Requeue_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Abort_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Requeue_Statement, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Abort_Present (N, Abort_Present);
-+ return N;
-+ end Make_Requeue_Statement;
-+
-+ function Make_Delay_Until_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Delay_Until_Statement, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Delay_Until_Statement;
-+
-+ function Make_Delay_Relative_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Delay_Relative_Statement, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Delay_Relative_Statement;
-+
-+ function Make_Selective_Accept (Sloc : Source_Ptr;
-+ Select_Alternatives : List_Id;
-+ Else_Statements : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Selective_Accept, Sloc);
-+ begin
-+ Set_Select_Alternatives (N, Select_Alternatives);
-+ Set_Else_Statements (N, Else_Statements);
-+ return N;
-+ end Make_Selective_Accept;
-+
-+ function Make_Accept_Alternative (Sloc : Source_Ptr;
-+ Accept_Statement : Node_Id;
-+ Condition : Node_Id := Empty;
-+ Statements : List_Id := Empty_List;
-+ Pragmas_Before : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Accept_Alternative, Sloc);
-+ begin
-+ Set_Accept_Statement (N, Accept_Statement);
-+ Set_Condition (N, Condition);
-+ Set_Statements (N, Statements);
-+ Set_Pragmas_Before (N, Pragmas_Before);
-+ return N;
-+ end Make_Accept_Alternative;
-+
-+ function Make_Delay_Alternative (Sloc : Source_Ptr;
-+ Delay_Statement : Node_Id;
-+ Condition : Node_Id := Empty;
-+ Statements : List_Id := Empty_List;
-+ Pragmas_Before : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Delay_Alternative, Sloc);
-+ begin
-+ Set_Delay_Statement (N, Delay_Statement);
-+ Set_Condition (N, Condition);
-+ Set_Statements (N, Statements);
-+ Set_Pragmas_Before (N, Pragmas_Before);
-+ return N;
-+ end Make_Delay_Alternative;
-+
-+ function Make_Terminate_Alternative (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Pragmas_Before : List_Id := No_List;
-+ Pragmas_After : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Terminate_Alternative, Sloc);
-+ begin
-+ Set_Condition (N, Condition);
-+ Set_Pragmas_Before (N, Pragmas_Before);
-+ Set_Pragmas_After (N, Pragmas_After);
-+ return N;
-+ end Make_Terminate_Alternative;
-+
-+ function Make_Timed_Entry_Call (Sloc : Source_Ptr;
-+ Entry_Call_Alternative : Node_Id;
-+ Delay_Alternative : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Timed_Entry_Call, Sloc);
-+ begin
-+ Set_Entry_Call_Alternative (N, Entry_Call_Alternative);
-+ Set_Delay_Alternative (N, Delay_Alternative);
-+ return N;
-+ end Make_Timed_Entry_Call;
-+
-+ function Make_Entry_Call_Alternative (Sloc : Source_Ptr;
-+ Entry_Call_Statement : Node_Id;
-+ Statements : List_Id := Empty_List;
-+ Pragmas_Before : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Entry_Call_Alternative, Sloc);
-+ begin
-+ Set_Entry_Call_Statement (N, Entry_Call_Statement);
-+ Set_Statements (N, Statements);
-+ Set_Pragmas_Before (N, Pragmas_Before);
-+ return N;
-+ end Make_Entry_Call_Alternative;
-+
-+ function Make_Conditional_Entry_Call (Sloc : Source_Ptr;
-+ Entry_Call_Alternative : Node_Id;
-+ Else_Statements : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Conditional_Entry_Call, Sloc);
-+ begin
-+ Set_Entry_Call_Alternative (N, Entry_Call_Alternative);
-+ Set_Else_Statements (N, Else_Statements);
-+ return N;
-+ end Make_Conditional_Entry_Call;
-+
-+ function Make_Asynchronous_Select (Sloc : Source_Ptr;
-+ Triggering_Alternative : Node_Id;
-+ Abortable_Part : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Asynchronous_Select, Sloc);
-+ begin
-+ Set_Triggering_Alternative (N, Triggering_Alternative);
-+ Set_Abortable_Part (N, Abortable_Part);
-+ return N;
-+ end Make_Asynchronous_Select;
-+
-+ function Make_Triggering_Alternative (Sloc : Source_Ptr;
-+ Triggering_Statement : Node_Id;
-+ Statements : List_Id := Empty_List;
-+ Pragmas_Before : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Triggering_Alternative, Sloc);
-+ begin
-+ Set_Triggering_Statement (N, Triggering_Statement);
-+ Set_Statements (N, Statements);
-+ Set_Pragmas_Before (N, Pragmas_Before);
-+ return N;
-+ end Make_Triggering_Alternative;
-+
-+ function Make_Abortable_Part (Sloc : Source_Ptr;
-+ Statements : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Abortable_Part, Sloc);
-+ begin
-+ Set_Statements (N, Statements);
-+ return N;
-+ end Make_Abortable_Part;
-+
-+ function Make_Abort_Statement (Sloc : Source_Ptr;
-+ Names : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Abort_Statement, Sloc);
-+ begin
-+ Set_Names (N, Names);
-+ return N;
-+ end Make_Abort_Statement;
-+
-+ function Make_Compilation_Unit (Sloc : Source_Ptr;
-+ Context_Items : List_Id;
-+ Private_Present : Boolean := False;
-+ Unit : Node_Id;
-+ Aux_Decls_Node : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Compilation_Unit, Sloc);
-+ begin
-+ Set_Context_Items (N, Context_Items);
-+ Set_Private_Present (N, Private_Present);
-+ Set_Unit (N, Unit);
-+ Set_Aux_Decls_Node (N, Aux_Decls_Node);
-+ return N;
-+ end Make_Compilation_Unit;
-+
-+ function Make_Compilation_Unit_Aux (Sloc : Source_Ptr;
-+ Declarations : List_Id := No_List;
-+ Actions : List_Id := No_List;
-+ Pragmas_After : List_Id := No_List;
-+ Config_Pragmas : List_Id := Empty_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Compilation_Unit_Aux, Sloc);
-+ begin
-+ Set_Declarations (N, Declarations);
-+ Set_Actions (N, Actions);
-+ Set_Pragmas_After (N, Pragmas_After);
-+ Set_Config_Pragmas (N, Config_Pragmas);
-+ return N;
-+ end Make_Compilation_Unit_Aux;
-+
-+ function Make_With_Clause (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ First_Name : Boolean := True;
-+ Last_Name : Boolean := True;
-+ Limited_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_With_Clause, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_First_Name (N, First_Name);
-+ Set_Last_Name (N, Last_Name);
-+ Set_Limited_Present (N, Limited_Present);
-+ return N;
-+ end Make_With_Clause;
-+
-+ function Make_With_Type_Clause (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Tagged_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_With_Type_Clause, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Tagged_Present (N, Tagged_Present);
-+ return N;
-+ end Make_With_Type_Clause;
-+
-+ function Make_Subprogram_Body_Stub (Sloc : Source_Ptr;
-+ Specification : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Subprogram_Body_Stub, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ return N;
-+ end Make_Subprogram_Body_Stub;
-+
-+ function Make_Package_Body_Stub (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Package_Body_Stub, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ return N;
-+ end Make_Package_Body_Stub;
-+
-+ function Make_Task_Body_Stub (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Task_Body_Stub, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ return N;
-+ end Make_Task_Body_Stub;
-+
-+ function Make_Protected_Body_Stub (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Protected_Body_Stub, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ return N;
-+ end Make_Protected_Body_Stub;
-+
-+ function Make_Subunit (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Proper_Body : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Subunit, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Proper_Body (N, Proper_Body);
-+ return N;
-+ end Make_Subunit;
-+
-+ function Make_Exception_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Exception_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ return N;
-+ end Make_Exception_Declaration;
-+
-+ function Make_Handled_Sequence_Of_Statements (Sloc : Source_Ptr;
-+ Statements : List_Id;
-+ End_Label : Node_Id := Empty;
-+ Exception_Handlers : List_Id := No_List;
-+ At_End_Proc : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Handled_Sequence_Of_Statements, Sloc);
-+ begin
-+ Set_Statements (N, Statements);
-+ Set_End_Label (N, End_Label);
-+ Set_Exception_Handlers (N, Exception_Handlers);
-+ Set_At_End_Proc (N, At_End_Proc);
-+ return N;
-+ end Make_Handled_Sequence_Of_Statements;
-+
-+ function Make_Exception_Handler (Sloc : Source_Ptr;
-+ Choice_Parameter : Node_Id := Empty;
-+ Exception_Choices : List_Id;
-+ Statements : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Exception_Handler, Sloc);
-+ begin
-+ Set_Choice_Parameter (N, Choice_Parameter);
-+ Set_Exception_Choices (N, Exception_Choices);
-+ Set_Statements (N, Statements);
-+ return N;
-+ end Make_Exception_Handler;
-+
-+ function Make_Raise_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Raise_Statement, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ return N;
-+ end Make_Raise_Statement;
-+
-+ function Make_Generic_Subprogram_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Generic_Formal_Declarations : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Generic_Subprogram_Declaration, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ Set_Generic_Formal_Declarations (N, Generic_Formal_Declarations);
-+ return N;
-+ end Make_Generic_Subprogram_Declaration;
-+
-+ function Make_Generic_Package_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Generic_Formal_Declarations : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Generic_Package_Declaration, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ Set_Generic_Formal_Declarations (N, Generic_Formal_Declarations);
-+ return N;
-+ end Make_Generic_Package_Declaration;
-+
-+ function Make_Package_Instantiation (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id;
-+ Generic_Associations : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Package_Instantiation, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Name (N, Name);
-+ Set_Generic_Associations (N, Generic_Associations);
-+ return N;
-+ end Make_Package_Instantiation;
-+
-+ function Make_Procedure_Instantiation (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id;
-+ Generic_Associations : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Procedure_Instantiation, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Name (N, Name);
-+ Set_Generic_Associations (N, Generic_Associations);
-+ return N;
-+ end Make_Procedure_Instantiation;
-+
-+ function Make_Function_Instantiation (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id;
-+ Generic_Associations : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Function_Instantiation, Sloc);
-+ begin
-+ Set_Defining_Unit_Name (N, Defining_Unit_Name);
-+ Set_Name (N, Name);
-+ Set_Generic_Associations (N, Generic_Associations);
-+ return N;
-+ end Make_Function_Instantiation;
-+
-+ function Make_Generic_Association (Sloc : Source_Ptr;
-+ Selector_Name : Node_Id := Empty;
-+ Explicit_Generic_Actual_Parameter : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Generic_Association, Sloc);
-+ begin
-+ Set_Selector_Name (N, Selector_Name);
-+ Set_Explicit_Generic_Actual_Parameter
-+ (N, Explicit_Generic_Actual_Parameter);
-+ return N;
-+ end Make_Generic_Association;
-+
-+ function Make_Formal_Object_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ In_Present : Boolean := False;
-+ Out_Present : Boolean := False;
-+ Subtype_Mark : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Object_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_In_Present (N, In_Present);
-+ Set_Out_Present (N, Out_Present);
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Formal_Object_Declaration;
-+
-+ function Make_Formal_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Formal_Type_Definition : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Unknown_Discriminants_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Type_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Formal_Type_Definition (N, Formal_Type_Definition);
-+ Set_Discriminant_Specifications (N, Discriminant_Specifications);
-+ Set_Unknown_Discriminants_Present
-+ (N, Unknown_Discriminants_Present);
-+ return N;
-+ end Make_Formal_Type_Declaration;
-+
-+ function Make_Formal_Private_Type_Definition (Sloc : Source_Ptr;
-+ Abstract_Present : Boolean := False;
-+ Tagged_Present : Boolean := False;
-+ Limited_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Private_Type_Definition, Sloc);
-+ begin
-+ Set_Abstract_Present (N, Abstract_Present);
-+ Set_Tagged_Present (N, Tagged_Present);
-+ Set_Limited_Present (N, Limited_Present);
-+ return N;
-+ end Make_Formal_Private_Type_Definition;
-+
-+ function Make_Formal_Derived_Type_Definition (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Private_Present : Boolean := False;
-+ Abstract_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Derived_Type_Definition, Sloc);
-+ begin
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ Set_Private_Present (N, Private_Present);
-+ Set_Abstract_Present (N, Abstract_Present);
-+ return N;
-+ end Make_Formal_Derived_Type_Definition;
-+
-+ function Make_Formal_Discrete_Type_Definition (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Discrete_Type_Definition, Sloc);
-+ begin
-+ return N;
-+ end Make_Formal_Discrete_Type_Definition;
-+
-+ function Make_Formal_Signed_Integer_Type_Definition (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Signed_Integer_Type_Definition, Sloc);
-+ begin
-+ return N;
-+ end Make_Formal_Signed_Integer_Type_Definition;
-+
-+ function Make_Formal_Modular_Type_Definition (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Modular_Type_Definition, Sloc);
-+ begin
-+ return N;
-+ end Make_Formal_Modular_Type_Definition;
-+
-+ function Make_Formal_Floating_Point_Definition (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Floating_Point_Definition, Sloc);
-+ begin
-+ return N;
-+ end Make_Formal_Floating_Point_Definition;
-+
-+ function Make_Formal_Ordinary_Fixed_Point_Definition (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Ordinary_Fixed_Point_Definition, Sloc);
-+ begin
-+ return N;
-+ end Make_Formal_Ordinary_Fixed_Point_Definition;
-+
-+ function Make_Formal_Decimal_Fixed_Point_Definition (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Decimal_Fixed_Point_Definition, Sloc);
-+ begin
-+ return N;
-+ end Make_Formal_Decimal_Fixed_Point_Definition;
-+
-+ function Make_Formal_Subprogram_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Default_Name : Node_Id := Empty;
-+ Box_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Subprogram_Declaration, Sloc);
-+ begin
-+ Set_Specification (N, Specification);
-+ Set_Default_Name (N, Default_Name);
-+ Set_Box_Present (N, Box_Present);
-+ return N;
-+ end Make_Formal_Subprogram_Declaration;
-+
-+ function Make_Formal_Package_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Name : Node_Id;
-+ Generic_Associations : List_Id := No_List;
-+ Box_Present : Boolean := False)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Formal_Package_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ Set_Name (N, Name);
-+ Set_Generic_Associations (N, Generic_Associations);
-+ Set_Box_Present (N, Box_Present);
-+ return N;
-+ end Make_Formal_Package_Declaration;
-+
-+ function Make_Attribute_Definition_Clause (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Chars : Name_Id;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Attribute_Definition_Clause, Sloc);
-+ begin
-+ Set_Name (N, Name);
-+ Set_Chars (N, Chars);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Attribute_Definition_Clause;
-+
-+ function Make_Enumeration_Representation_Clause (Sloc : Source_Ptr;
-+ Identifier : Node_Id;
-+ Array_Aggregate : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Enumeration_Representation_Clause, Sloc);
-+ begin
-+ Set_Identifier (N, Identifier);
-+ Set_Array_Aggregate (N, Array_Aggregate);
-+ return N;
-+ end Make_Enumeration_Representation_Clause;
-+
-+ function Make_Record_Representation_Clause (Sloc : Source_Ptr;
-+ Identifier : Node_Id;
-+ Mod_Clause : Node_Id := Empty;
-+ Component_Clauses : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Record_Representation_Clause, Sloc);
-+ begin
-+ Set_Identifier (N, Identifier);
-+ Set_Mod_Clause (N, Mod_Clause);
-+ Set_Component_Clauses (N, Component_Clauses);
-+ return N;
-+ end Make_Record_Representation_Clause;
-+
-+ function Make_Component_Clause (Sloc : Source_Ptr;
-+ Component_Name : Node_Id;
-+ Position : Node_Id;
-+ First_Bit : Node_Id;
-+ Last_Bit : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Component_Clause, Sloc);
-+ begin
-+ Set_Component_Name (N, Component_Name);
-+ Set_Position (N, Position);
-+ Set_First_Bit (N, First_Bit);
-+ Set_Last_Bit (N, Last_Bit);
-+ return N;
-+ end Make_Component_Clause;
-+
-+ function Make_Code_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Code_Statement, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Code_Statement;
-+
-+ function Make_Op_Rotate_Left (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Rotate_Left, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Rotate_Left);
-+ Set_Entity (N, Standard_Op_Rotate_Left);
-+ return N;
-+ end Make_Op_Rotate_Left;
-+
-+ function Make_Op_Rotate_Right (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Rotate_Right, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Rotate_Right);
-+ Set_Entity (N, Standard_Op_Rotate_Right);
-+ return N;
-+ end Make_Op_Rotate_Right;
-+
-+ function Make_Op_Shift_Left (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Shift_Left, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Shift_Left);
-+ Set_Entity (N, Standard_Op_Shift_Left);
-+ return N;
-+ end Make_Op_Shift_Left;
-+
-+ function Make_Op_Shift_Right_Arithmetic (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Shift_Right_Arithmetic, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Shift_Right_Arithmetic);
-+ Set_Entity (N, Standard_Op_Shift_Right_Arithmetic);
-+ return N;
-+ end Make_Op_Shift_Right_Arithmetic;
-+
-+ function Make_Op_Shift_Right (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Op_Shift_Right, Sloc);
-+ begin
-+ Set_Left_Opnd (N, Left_Opnd);
-+ Set_Right_Opnd (N, Right_Opnd);
-+ Set_Chars (N, Name_Shift_Right);
-+ Set_Entity (N, Standard_Op_Shift_Right);
-+ return N;
-+ end Make_Op_Shift_Right;
-+
-+ function Make_Delta_Constraint (Sloc : Source_Ptr;
-+ Delta_Expression : Node_Id;
-+ Range_Constraint : Node_Id := Empty)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Delta_Constraint, Sloc);
-+ begin
-+ Set_Delta_Expression (N, Delta_Expression);
-+ Set_Range_Constraint (N, Range_Constraint);
-+ return N;
-+ end Make_Delta_Constraint;
-+
-+ function Make_At_Clause (Sloc : Source_Ptr;
-+ Identifier : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_At_Clause, Sloc);
-+ begin
-+ Set_Identifier (N, Identifier);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_At_Clause;
-+
-+ function Make_Mod_Clause (Sloc : Source_Ptr;
-+ Expression : Node_Id;
-+ Pragmas_Before : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Mod_Clause, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ Set_Pragmas_Before (N, Pragmas_Before);
-+ return N;
-+ end Make_Mod_Clause;
-+
-+ function Make_Conditional_Expression (Sloc : Source_Ptr;
-+ Expressions : List_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Conditional_Expression, Sloc);
-+ begin
-+ Set_Expressions (N, Expressions);
-+ return N;
-+ end Make_Conditional_Expression;
-+
-+ function Make_Expanded_Name (Sloc : Source_Ptr;
-+ Chars : Name_Id;
-+ Prefix : Node_Id;
-+ Selector_Name : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Expanded_Name, Sloc);
-+ begin
-+ Set_Chars (N, Chars);
-+ Set_Prefix (N, Prefix);
-+ Set_Selector_Name (N, Selector_Name);
-+ return N;
-+ end Make_Expanded_Name;
-+
-+ function Make_Free_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Free_Statement, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Free_Statement;
-+
-+ function Make_Freeze_Entity (Sloc : Source_Ptr;
-+ Actions : List_Id := No_List)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Freeze_Entity, Sloc);
-+ begin
-+ Set_Actions (N, Actions);
-+ return N;
-+ end Make_Freeze_Entity;
-+
-+ function Make_Implicit_Label_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Implicit_Label_Declaration, Sloc);
-+ begin
-+ Set_Defining_Identifier (N, Defining_Identifier);
-+ return N;
-+ end Make_Implicit_Label_Declaration;
-+
-+ function Make_Itype_Reference (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Itype_Reference, Sloc);
-+ begin
-+ return N;
-+ end Make_Itype_Reference;
-+
-+ function Make_Raise_Constraint_Error (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Reason : Uint)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Raise_Constraint_Error, Sloc);
-+ begin
-+ Set_Condition (N, Condition);
-+ Set_Reason (N, Reason);
-+ return N;
-+ end Make_Raise_Constraint_Error;
-+
-+ function Make_Raise_Program_Error (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Reason : Uint)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Raise_Program_Error, Sloc);
-+ begin
-+ Set_Condition (N, Condition);
-+ Set_Reason (N, Reason);
-+ return N;
-+ end Make_Raise_Program_Error;
-+
-+ function Make_Raise_Storage_Error (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Reason : Uint)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Raise_Storage_Error, Sloc);
-+ begin
-+ Set_Condition (N, Condition);
-+ Set_Reason (N, Reason);
-+ return N;
-+ end Make_Raise_Storage_Error;
-+
-+ function Make_Reference (Sloc : Source_Ptr;
-+ Prefix : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Reference, Sloc);
-+ begin
-+ Set_Prefix (N, Prefix);
-+ return N;
-+ end Make_Reference;
-+
-+ function Make_Subprogram_Info (Sloc : Source_Ptr;
-+ Identifier : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Subprogram_Info, Sloc);
-+ begin
-+ Set_Identifier (N, Identifier);
-+ return N;
-+ end Make_Subprogram_Info;
-+
-+ function Make_Unchecked_Expression (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Unchecked_Expression, Sloc);
-+ begin
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Unchecked_Expression;
-+
-+ function Make_Unchecked_Type_Conversion (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Unchecked_Type_Conversion, Sloc);
-+ begin
-+ Set_Subtype_Mark (N, Subtype_Mark);
-+ Set_Expression (N, Expression);
-+ return N;
-+ end Make_Unchecked_Type_Conversion;
-+
-+ function Make_Validate_Unchecked_Conversion (Sloc : Source_Ptr)
-+ return Node_Id
-+ is
-+ N : constant Node_Id :=
-+ New_Node (N_Validate_Unchecked_Conversion, Sloc);
-+ begin
-+ return N;
-+ end Make_Validate_Unchecked_Conversion;
-+
-+end Nmake;
---- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/nmake.ads.orig 1970-01-01 01:00:00.000000000 +0100
-+++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/nmake.ads 2004-06-02 00:52:35.000000000 +0200
-@@ -0,0 +1,1351 @@
-+------------------------------------------------------------------------------
-+-- --
-+-- GNAT COMPILER COMPONENTS --
-+-- --
-+-- N M A K E --
-+-- --
-+-- S p e c --
-+-- --
-+-- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
-+-- --
-+-- GNAT is free software; you can redistribute it and/or modify it under --
-+-- terms of the GNU General Public License as published by the Free Soft- --
-+-- ware Foundation; either version 2, or (at your option) any later ver- --
-+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
-+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
-+-- for more details. You should have received a copy of the GNU General --
-+-- Public License distributed with GNAT; see file COPYING. If not, write --
-+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
-+-- MA 02111-1307, USA. --
-+-- --
-+-- GNAT was originally developed by the GNAT team at New York University. --
-+-- Extensive contributions were provided by Ada Core Technologies Inc. --
-+-- --
-+------------------------------------------------------------------------------
-+
-+pragma Style_Checks (All_Checks);
-+-- Turn off subprogram order checking, since the routines here are
-+-- generated automatically in order.
-+
-+
-+with Nlists; use Nlists;
-+with Types; use Types;
-+with Uintp; use Uintp;
-+with Urealp; use Urealp;
-+
-+package Nmake is
-+
-+-- This package contains a set of routines used to construct tree nodes
-+-- using a functional style. There is one routine for each node type defined
-+-- in Sinfo with the general interface:
-+
-+-- function Make_xxx (Sloc : Source_Ptr,
-+-- Field_Name_1 : Field_Name_1_Type [:= default]
-+-- Field_Name_2 : Field_Name_2_Type [:= default]
-+-- ...)
-+-- return Node_Id
-+
-+-- Only syntactic fields are included (i.e. fields marked as "-Sem" or "-Lib"
-+-- in the Sinfo spec are excluded). In addition, the following four syntactic
-+-- fields are excluded:
-+
-+-- Prev_Ids
-+-- More_Ids
-+-- Comes_From_Source
-+-- Paren_Count
-+
-+-- since they are very rarely set in expanded code. If they need to be set,
-+-- to other than the default values (False, False, False, zero), then the
-+-- appropriate Set_xxx procedures must be used on the returned value.
-+
-+-- Default values are provided only for flag fields (where the default is
-+-- False), and for optional fields. An optional field is one where the
-+-- comment line describing the field contains the string "(set to xxx if".
-+-- For such fields, a default value of xxx is provided."
-+
-+-- Warning: since calls to Make_xxx routines are normal function calls, the
-+-- arguments can be evaluated in any order. This means that at most one such
-+-- argument can have side effects (e.g. be a call to a parse routine).
-+
-+ function Make_Unused_At_Start (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Unused_At_Start);
-+
-+ function Make_Unused_At_End (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Unused_At_End);
-+
-+ function Make_Identifier (Sloc : Source_Ptr;
-+ Chars : Name_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Identifier);
-+
-+ function Make_Integer_Literal (Sloc : Source_Ptr;
-+ Intval : Uint)
-+ return Node_Id;
-+ pragma Inline (Make_Integer_Literal);
-+
-+ function Make_Real_Literal (Sloc : Source_Ptr;
-+ Realval : Ureal)
-+ return Node_Id;
-+ pragma Inline (Make_Real_Literal);
-+
-+ function Make_Character_Literal (Sloc : Source_Ptr;
-+ Chars : Name_Id;
-+ Char_Literal_Value : Char_Code)
-+ return Node_Id;
-+ pragma Inline (Make_Character_Literal);
-+
-+ function Make_String_Literal (Sloc : Source_Ptr;
-+ Strval : String_Id)
-+ return Node_Id;
-+ pragma Inline (Make_String_Literal);
-+
-+ function Make_Pragma (Sloc : Source_Ptr;
-+ Chars : Name_Id;
-+ Pragma_Argument_Associations : List_Id := No_List;
-+ Debug_Statement : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Pragma);
-+
-+ function Make_Pragma_Argument_Association (Sloc : Source_Ptr;
-+ Chars : Name_Id := No_Name;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Pragma_Argument_Association);
-+
-+ function Make_Defining_Identifier (Sloc : Source_Ptr;
-+ Chars : Name_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Defining_Identifier);
-+
-+ function Make_Full_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Type_Definition : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Full_Type_Declaration);
-+
-+ function Make_Subtype_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Subtype_Indication : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Subtype_Declaration);
-+
-+ function Make_Subtype_Indication (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Constraint : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Subtype_Indication);
-+
-+ function Make_Object_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Aliased_Present : Boolean := False;
-+ Constant_Present : Boolean := False;
-+ Object_Definition : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Object_Declaration);
-+
-+ function Make_Number_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Number_Declaration);
-+
-+ function Make_Derived_Type_Definition (Sloc : Source_Ptr;
-+ Abstract_Present : Boolean := False;
-+ Subtype_Indication : Node_Id;
-+ Record_Extension_Part : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Derived_Type_Definition);
-+
-+ function Make_Range_Constraint (Sloc : Source_Ptr;
-+ Range_Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Range_Constraint);
-+
-+ function Make_Range (Sloc : Source_Ptr;
-+ Low_Bound : Node_Id;
-+ High_Bound : Node_Id;
-+ Includes_Infinities : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Range);
-+
-+ function Make_Enumeration_Type_Definition (Sloc : Source_Ptr;
-+ Literals : List_Id;
-+ End_Label : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Enumeration_Type_Definition);
-+
-+ function Make_Defining_Character_Literal (Sloc : Source_Ptr;
-+ Chars : Name_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Defining_Character_Literal);
-+
-+ function Make_Signed_Integer_Type_Definition (Sloc : Source_Ptr;
-+ Low_Bound : Node_Id;
-+ High_Bound : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Signed_Integer_Type_Definition);
-+
-+ function Make_Modular_Type_Definition (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Modular_Type_Definition);
-+
-+ function Make_Floating_Point_Definition (Sloc : Source_Ptr;
-+ Digits_Expression : Node_Id;
-+ Real_Range_Specification : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Floating_Point_Definition);
-+
-+ function Make_Real_Range_Specification (Sloc : Source_Ptr;
-+ Low_Bound : Node_Id;
-+ High_Bound : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Real_Range_Specification);
-+
-+ function Make_Ordinary_Fixed_Point_Definition (Sloc : Source_Ptr;
-+ Delta_Expression : Node_Id;
-+ Real_Range_Specification : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Ordinary_Fixed_Point_Definition);
-+
-+ function Make_Decimal_Fixed_Point_Definition (Sloc : Source_Ptr;
-+ Delta_Expression : Node_Id;
-+ Digits_Expression : Node_Id;
-+ Real_Range_Specification : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Decimal_Fixed_Point_Definition);
-+
-+ function Make_Digits_Constraint (Sloc : Source_Ptr;
-+ Digits_Expression : Node_Id;
-+ Range_Constraint : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Digits_Constraint);
-+
-+ function Make_Unconstrained_Array_Definition (Sloc : Source_Ptr;
-+ Subtype_Marks : List_Id;
-+ Component_Definition : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Unconstrained_Array_Definition);
-+
-+ function Make_Constrained_Array_Definition (Sloc : Source_Ptr;
-+ Discrete_Subtype_Definitions : List_Id;
-+ Component_Definition : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Constrained_Array_Definition);
-+
-+ function Make_Component_Definition (Sloc : Source_Ptr;
-+ Aliased_Present : Boolean := False;
-+ Subtype_Indication : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Component_Definition);
-+
-+ function Make_Discriminant_Specification (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Type : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Discriminant_Specification);
-+
-+ function Make_Index_Or_Discriminant_Constraint (Sloc : Source_Ptr;
-+ Constraints : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Index_Or_Discriminant_Constraint);
-+
-+ function Make_Discriminant_Association (Sloc : Source_Ptr;
-+ Selector_Names : List_Id;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Discriminant_Association);
-+
-+ function Make_Record_Definition (Sloc : Source_Ptr;
-+ End_Label : Node_Id := Empty;
-+ Abstract_Present : Boolean := False;
-+ Tagged_Present : Boolean := False;
-+ Limited_Present : Boolean := False;
-+ Component_List : Node_Id;
-+ Null_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Record_Definition);
-+
-+ function Make_Component_List (Sloc : Source_Ptr;
-+ Component_Items : List_Id;
-+ Variant_Part : Node_Id := Empty;
-+ Null_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Component_List);
-+
-+ function Make_Component_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Component_Definition : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Component_Declaration);
-+
-+ function Make_Variant_Part (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Variants : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Variant_Part);
-+
-+ function Make_Variant (Sloc : Source_Ptr;
-+ Discrete_Choices : List_Id;
-+ Component_List : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Variant);
-+
-+ function Make_Others_Choice (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Others_Choice);
-+
-+ function Make_Access_To_Object_Definition (Sloc : Source_Ptr;
-+ All_Present : Boolean := False;
-+ Subtype_Indication : Node_Id;
-+ Constant_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Access_To_Object_Definition);
-+
-+ function Make_Access_Function_Definition (Sloc : Source_Ptr;
-+ Protected_Present : Boolean := False;
-+ Parameter_Specifications : List_Id := No_List;
-+ Subtype_Mark : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Access_Function_Definition);
-+
-+ function Make_Access_Procedure_Definition (Sloc : Source_Ptr;
-+ Protected_Present : Boolean := False;
-+ Parameter_Specifications : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Access_Procedure_Definition);
-+
-+ function Make_Access_Definition (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Access_Definition);
-+
-+ function Make_Incomplete_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Unknown_Discriminants_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Incomplete_Type_Declaration);
-+
-+ function Make_Explicit_Dereference (Sloc : Source_Ptr;
-+ Prefix : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Explicit_Dereference);
-+
-+ function Make_Indexed_Component (Sloc : Source_Ptr;
-+ Prefix : Node_Id;
-+ Expressions : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Indexed_Component);
-+
-+ function Make_Slice (Sloc : Source_Ptr;
-+ Prefix : Node_Id;
-+ Discrete_Range : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Slice);
-+
-+ function Make_Selected_Component (Sloc : Source_Ptr;
-+ Prefix : Node_Id;
-+ Selector_Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Selected_Component);
-+
-+ function Make_Attribute_Reference (Sloc : Source_Ptr;
-+ Prefix : Node_Id;
-+ Attribute_Name : Name_Id;
-+ Expressions : List_Id := No_List;
-+ Must_Be_Byte_Aligned : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Attribute_Reference);
-+
-+ function Make_Aggregate (Sloc : Source_Ptr;
-+ Expressions : List_Id := No_List;
-+ Component_Associations : List_Id := No_List;
-+ Null_Record_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Aggregate);
-+
-+ function Make_Component_Association (Sloc : Source_Ptr;
-+ Choices : List_Id;
-+ Expression : Node_Id;
-+ Box_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Component_Association);
-+
-+ function Make_Extension_Aggregate (Sloc : Source_Ptr;
-+ Ancestor_Part : Node_Id;
-+ Expressions : List_Id := No_List;
-+ Component_Associations : List_Id := No_List;
-+ Null_Record_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Extension_Aggregate);
-+
-+ function Make_Null (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Null);
-+
-+ function Make_And_Then (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_And_Then);
-+
-+ function Make_Or_Else (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Or_Else);
-+
-+ function Make_In (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_In);
-+
-+ function Make_Not_In (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Not_In);
-+
-+ function Make_Op_And (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_And);
-+
-+ function Make_Op_Or (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Or);
-+
-+ function Make_Op_Xor (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Xor);
-+
-+ function Make_Op_Eq (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Eq);
-+
-+ function Make_Op_Ne (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Ne);
-+
-+ function Make_Op_Lt (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Lt);
-+
-+ function Make_Op_Le (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Le);
-+
-+ function Make_Op_Gt (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Gt);
-+
-+ function Make_Op_Ge (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Ge);
-+
-+ function Make_Op_Add (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Add);
-+
-+ function Make_Op_Subtract (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Subtract);
-+
-+ function Make_Op_Concat (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Concat);
-+
-+ function Make_Op_Multiply (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Multiply);
-+
-+ function Make_Op_Divide (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Divide);
-+
-+ function Make_Op_Mod (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Mod);
-+
-+ function Make_Op_Rem (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Rem);
-+
-+ function Make_Op_Expon (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Expon);
-+
-+ function Make_Op_Plus (Sloc : Source_Ptr;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Plus);
-+
-+ function Make_Op_Minus (Sloc : Source_Ptr;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Minus);
-+
-+ function Make_Op_Abs (Sloc : Source_Ptr;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Abs);
-+
-+ function Make_Op_Not (Sloc : Source_Ptr;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Not);
-+
-+ function Make_Type_Conversion (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Type_Conversion);
-+
-+ function Make_Qualified_Expression (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Qualified_Expression);
-+
-+ function Make_Allocator (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Allocator);
-+
-+ function Make_Null_Statement (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Null_Statement);
-+
-+ function Make_Label (Sloc : Source_Ptr;
-+ Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Label);
-+
-+ function Make_Assignment_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Assignment_Statement);
-+
-+ function Make_If_Statement (Sloc : Source_Ptr;
-+ Condition : Node_Id;
-+ Then_Statements : List_Id;
-+ Elsif_Parts : List_Id := No_List;
-+ Else_Statements : List_Id := No_List;
-+ End_Span : Uint := No_Uint)
-+ return Node_Id;
-+ pragma Inline (Make_If_Statement);
-+
-+ function Make_Elsif_Part (Sloc : Source_Ptr;
-+ Condition : Node_Id;
-+ Then_Statements : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Elsif_Part);
-+
-+ function Make_Case_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id;
-+ Alternatives : List_Id;
-+ End_Span : Uint := No_Uint)
-+ return Node_Id;
-+ pragma Inline (Make_Case_Statement);
-+
-+ function Make_Case_Statement_Alternative (Sloc : Source_Ptr;
-+ Discrete_Choices : List_Id;
-+ Statements : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Case_Statement_Alternative);
-+
-+ function Make_Loop_Statement (Sloc : Source_Ptr;
-+ Identifier : Node_Id := Empty;
-+ Iteration_Scheme : Node_Id := Empty;
-+ Statements : List_Id;
-+ End_Label : Node_Id;
-+ Has_Created_Identifier : Boolean := False;
-+ Is_Null_Loop : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Loop_Statement);
-+
-+ function Make_Iteration_Scheme (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Loop_Parameter_Specification : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Iteration_Scheme);
-+
-+ function Make_Loop_Parameter_Specification (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Reverse_Present : Boolean := False;
-+ Discrete_Subtype_Definition : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Loop_Parameter_Specification);
-+
-+ function Make_Block_Statement (Sloc : Source_Ptr;
-+ Identifier : Node_Id := Empty;
-+ Declarations : List_Id := No_List;
-+ Handled_Statement_Sequence : Node_Id;
-+ Has_Created_Identifier : Boolean := False;
-+ Is_Task_Allocation_Block : Boolean := False;
-+ Is_Asynchronous_Call_Block : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Block_Statement);
-+
-+ function Make_Exit_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id := Empty;
-+ Condition : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Exit_Statement);
-+
-+ function Make_Goto_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Goto_Statement);
-+
-+ function Make_Subprogram_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Subprogram_Declaration);
-+
-+ function Make_Abstract_Subprogram_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Abstract_Subprogram_Declaration);
-+
-+ function Make_Function_Specification (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Parameter_Specifications : List_Id := No_List;
-+ Subtype_Mark : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Function_Specification);
-+
-+ function Make_Procedure_Specification (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Parameter_Specifications : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Procedure_Specification);
-+
-+ function Make_Designator (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Designator);
-+
-+ function Make_Defining_Program_Unit_Name (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Defining_Program_Unit_Name);
-+
-+ function Make_Operator_Symbol (Sloc : Source_Ptr;
-+ Chars : Name_Id;
-+ Strval : String_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Operator_Symbol);
-+
-+ function Make_Defining_Operator_Symbol (Sloc : Source_Ptr;
-+ Chars : Name_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Defining_Operator_Symbol);
-+
-+ function Make_Parameter_Specification (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ In_Present : Boolean := False;
-+ Out_Present : Boolean := False;
-+ Parameter_Type : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Parameter_Specification);
-+
-+ function Make_Subprogram_Body (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Declarations : List_Id;
-+ Handled_Statement_Sequence : Node_Id;
-+ Bad_Is_Detected : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Subprogram_Body);
-+
-+ function Make_Procedure_Call_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Parameter_Associations : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Procedure_Call_Statement);
-+
-+ function Make_Function_Call (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Parameter_Associations : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Function_Call);
-+
-+ function Make_Parameter_Association (Sloc : Source_Ptr;
-+ Selector_Name : Node_Id;
-+ Explicit_Actual_Parameter : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Parameter_Association);
-+
-+ function Make_Return_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Return_Statement);
-+
-+ function Make_Package_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Package_Declaration);
-+
-+ function Make_Package_Specification (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Visible_Declarations : List_Id;
-+ Private_Declarations : List_Id := No_List;
-+ End_Label : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Package_Specification);
-+
-+ function Make_Package_Body (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Declarations : List_Id;
-+ Handled_Statement_Sequence : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Package_Body);
-+
-+ function Make_Private_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Unknown_Discriminants_Present : Boolean := False;
-+ Abstract_Present : Boolean := False;
-+ Tagged_Present : Boolean := False;
-+ Limited_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Private_Type_Declaration);
-+
-+ function Make_Private_Extension_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Unknown_Discriminants_Present : Boolean := False;
-+ Abstract_Present : Boolean := False;
-+ Subtype_Indication : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Private_Extension_Declaration);
-+
-+ function Make_Use_Package_Clause (Sloc : Source_Ptr;
-+ Names : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Use_Package_Clause);
-+
-+ function Make_Use_Type_Clause (Sloc : Source_Ptr;
-+ Subtype_Marks : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Use_Type_Clause);
-+
-+ function Make_Object_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Subtype_Mark : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Object_Renaming_Declaration);
-+
-+ function Make_Exception_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Exception_Renaming_Declaration);
-+
-+ function Make_Package_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Package_Renaming_Declaration);
-+
-+ function Make_Subprogram_Renaming_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Subprogram_Renaming_Declaration);
-+
-+ function Make_Generic_Package_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Generic_Package_Renaming_Declaration);
-+
-+ function Make_Generic_Procedure_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Generic_Procedure_Renaming_Declaration);
-+
-+ function Make_Generic_Function_Renaming_Declaration (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Generic_Function_Renaming_Declaration);
-+
-+ function Make_Task_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Task_Definition : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Task_Type_Declaration);
-+
-+ function Make_Single_Task_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Task_Definition : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Single_Task_Declaration);
-+
-+ function Make_Task_Definition (Sloc : Source_Ptr;
-+ Visible_Declarations : List_Id;
-+ Private_Declarations : List_Id := No_List;
-+ End_Label : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Task_Definition);
-+
-+ function Make_Task_Body (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Declarations : List_Id;
-+ Handled_Statement_Sequence : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Task_Body);
-+
-+ function Make_Protected_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Protected_Definition : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Protected_Type_Declaration);
-+
-+ function Make_Single_Protected_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Protected_Definition : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Single_Protected_Declaration);
-+
-+ function Make_Protected_Definition (Sloc : Source_Ptr;
-+ Visible_Declarations : List_Id;
-+ Private_Declarations : List_Id := No_List;
-+ End_Label : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Protected_Definition);
-+
-+ function Make_Protected_Body (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Declarations : List_Id;
-+ End_Label : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Protected_Body);
-+
-+ function Make_Entry_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discrete_Subtype_Definition : Node_Id := Empty;
-+ Parameter_Specifications : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Entry_Declaration);
-+
-+ function Make_Accept_Statement (Sloc : Source_Ptr;
-+ Entry_Direct_Name : Node_Id;
-+ Entry_Index : Node_Id := Empty;
-+ Parameter_Specifications : List_Id := No_List;
-+ Handled_Statement_Sequence : Node_Id;
-+ Declarations : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Accept_Statement);
-+
-+ function Make_Entry_Body (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Entry_Body_Formal_Part : Node_Id;
-+ Declarations : List_Id;
-+ Handled_Statement_Sequence : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Entry_Body);
-+
-+ function Make_Entry_Body_Formal_Part (Sloc : Source_Ptr;
-+ Entry_Index_Specification : Node_Id := Empty;
-+ Parameter_Specifications : List_Id := No_List;
-+ Condition : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Entry_Body_Formal_Part);
-+
-+ function Make_Entry_Index_Specification (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Discrete_Subtype_Definition : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Entry_Index_Specification);
-+
-+ function Make_Entry_Call_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Parameter_Associations : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Entry_Call_Statement);
-+
-+ function Make_Requeue_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Abort_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Requeue_Statement);
-+
-+ function Make_Delay_Until_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Delay_Until_Statement);
-+
-+ function Make_Delay_Relative_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Delay_Relative_Statement);
-+
-+ function Make_Selective_Accept (Sloc : Source_Ptr;
-+ Select_Alternatives : List_Id;
-+ Else_Statements : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Selective_Accept);
-+
-+ function Make_Accept_Alternative (Sloc : Source_Ptr;
-+ Accept_Statement : Node_Id;
-+ Condition : Node_Id := Empty;
-+ Statements : List_Id := Empty_List;
-+ Pragmas_Before : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Accept_Alternative);
-+
-+ function Make_Delay_Alternative (Sloc : Source_Ptr;
-+ Delay_Statement : Node_Id;
-+ Condition : Node_Id := Empty;
-+ Statements : List_Id := Empty_List;
-+ Pragmas_Before : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Delay_Alternative);
-+
-+ function Make_Terminate_Alternative (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Pragmas_Before : List_Id := No_List;
-+ Pragmas_After : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Terminate_Alternative);
-+
-+ function Make_Timed_Entry_Call (Sloc : Source_Ptr;
-+ Entry_Call_Alternative : Node_Id;
-+ Delay_Alternative : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Timed_Entry_Call);
-+
-+ function Make_Entry_Call_Alternative (Sloc : Source_Ptr;
-+ Entry_Call_Statement : Node_Id;
-+ Statements : List_Id := Empty_List;
-+ Pragmas_Before : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Entry_Call_Alternative);
-+
-+ function Make_Conditional_Entry_Call (Sloc : Source_Ptr;
-+ Entry_Call_Alternative : Node_Id;
-+ Else_Statements : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Conditional_Entry_Call);
-+
-+ function Make_Asynchronous_Select (Sloc : Source_Ptr;
-+ Triggering_Alternative : Node_Id;
-+ Abortable_Part : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Asynchronous_Select);
-+
-+ function Make_Triggering_Alternative (Sloc : Source_Ptr;
-+ Triggering_Statement : Node_Id;
-+ Statements : List_Id := Empty_List;
-+ Pragmas_Before : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Triggering_Alternative);
-+
-+ function Make_Abortable_Part (Sloc : Source_Ptr;
-+ Statements : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Abortable_Part);
-+
-+ function Make_Abort_Statement (Sloc : Source_Ptr;
-+ Names : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Abort_Statement);
-+
-+ function Make_Compilation_Unit (Sloc : Source_Ptr;
-+ Context_Items : List_Id;
-+ Private_Present : Boolean := False;
-+ Unit : Node_Id;
-+ Aux_Decls_Node : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Compilation_Unit);
-+
-+ function Make_Compilation_Unit_Aux (Sloc : Source_Ptr;
-+ Declarations : List_Id := No_List;
-+ Actions : List_Id := No_List;
-+ Pragmas_After : List_Id := No_List;
-+ Config_Pragmas : List_Id := Empty_List)
-+ return Node_Id;
-+ pragma Inline (Make_Compilation_Unit_Aux);
-+
-+ function Make_With_Clause (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ First_Name : Boolean := True;
-+ Last_Name : Boolean := True;
-+ Limited_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_With_Clause);
-+
-+ function Make_With_Type_Clause (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Tagged_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_With_Type_Clause);
-+
-+ function Make_Subprogram_Body_Stub (Sloc : Source_Ptr;
-+ Specification : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Subprogram_Body_Stub);
-+
-+ function Make_Package_Body_Stub (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Package_Body_Stub);
-+
-+ function Make_Task_Body_Stub (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Task_Body_Stub);
-+
-+ function Make_Protected_Body_Stub (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Protected_Body_Stub);
-+
-+ function Make_Subunit (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Proper_Body : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Subunit);
-+
-+ function Make_Exception_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Exception_Declaration);
-+
-+ function Make_Handled_Sequence_Of_Statements (Sloc : Source_Ptr;
-+ Statements : List_Id;
-+ End_Label : Node_Id := Empty;
-+ Exception_Handlers : List_Id := No_List;
-+ At_End_Proc : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Handled_Sequence_Of_Statements);
-+
-+ function Make_Exception_Handler (Sloc : Source_Ptr;
-+ Choice_Parameter : Node_Id := Empty;
-+ Exception_Choices : List_Id;
-+ Statements : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Exception_Handler);
-+
-+ function Make_Raise_Statement (Sloc : Source_Ptr;
-+ Name : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Raise_Statement);
-+
-+ function Make_Generic_Subprogram_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Generic_Formal_Declarations : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Generic_Subprogram_Declaration);
-+
-+ function Make_Generic_Package_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Generic_Formal_Declarations : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Generic_Package_Declaration);
-+
-+ function Make_Package_Instantiation (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id;
-+ Generic_Associations : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Package_Instantiation);
-+
-+ function Make_Procedure_Instantiation (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id;
-+ Generic_Associations : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Procedure_Instantiation);
-+
-+ function Make_Function_Instantiation (Sloc : Source_Ptr;
-+ Defining_Unit_Name : Node_Id;
-+ Name : Node_Id;
-+ Generic_Associations : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Function_Instantiation);
-+
-+ function Make_Generic_Association (Sloc : Source_Ptr;
-+ Selector_Name : Node_Id := Empty;
-+ Explicit_Generic_Actual_Parameter : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Generic_Association);
-+
-+ function Make_Formal_Object_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ In_Present : Boolean := False;
-+ Out_Present : Boolean := False;
-+ Subtype_Mark : Node_Id;
-+ Expression : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Object_Declaration);
-+
-+ function Make_Formal_Type_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Formal_Type_Definition : Node_Id;
-+ Discriminant_Specifications : List_Id := No_List;
-+ Unknown_Discriminants_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Type_Declaration);
-+
-+ function Make_Formal_Private_Type_Definition (Sloc : Source_Ptr;
-+ Abstract_Present : Boolean := False;
-+ Tagged_Present : Boolean := False;
-+ Limited_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Private_Type_Definition);
-+
-+ function Make_Formal_Derived_Type_Definition (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Private_Present : Boolean := False;
-+ Abstract_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Derived_Type_Definition);
-+
-+ function Make_Formal_Discrete_Type_Definition (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Discrete_Type_Definition);
-+
-+ function Make_Formal_Signed_Integer_Type_Definition (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Signed_Integer_Type_Definition);
-+
-+ function Make_Formal_Modular_Type_Definition (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Modular_Type_Definition);
-+
-+ function Make_Formal_Floating_Point_Definition (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Floating_Point_Definition);
-+
-+ function Make_Formal_Ordinary_Fixed_Point_Definition (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Ordinary_Fixed_Point_Definition);
-+
-+ function Make_Formal_Decimal_Fixed_Point_Definition (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Decimal_Fixed_Point_Definition);
-+
-+ function Make_Formal_Subprogram_Declaration (Sloc : Source_Ptr;
-+ Specification : Node_Id;
-+ Default_Name : Node_Id := Empty;
-+ Box_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Subprogram_Declaration);
-+
-+ function Make_Formal_Package_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id;
-+ Name : Node_Id;
-+ Generic_Associations : List_Id := No_List;
-+ Box_Present : Boolean := False)
-+ return Node_Id;
-+ pragma Inline (Make_Formal_Package_Declaration);
-+
-+ function Make_Attribute_Definition_Clause (Sloc : Source_Ptr;
-+ Name : Node_Id;
-+ Chars : Name_Id;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Attribute_Definition_Clause);
-+
-+ function Make_Enumeration_Representation_Clause (Sloc : Source_Ptr;
-+ Identifier : Node_Id;
-+ Array_Aggregate : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Enumeration_Representation_Clause);
-+
-+ function Make_Record_Representation_Clause (Sloc : Source_Ptr;
-+ Identifier : Node_Id;
-+ Mod_Clause : Node_Id := Empty;
-+ Component_Clauses : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Record_Representation_Clause);
-+
-+ function Make_Component_Clause (Sloc : Source_Ptr;
-+ Component_Name : Node_Id;
-+ Position : Node_Id;
-+ First_Bit : Node_Id;
-+ Last_Bit : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Component_Clause);
-+
-+ function Make_Code_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Code_Statement);
-+
-+ function Make_Op_Rotate_Left (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Rotate_Left);
-+
-+ function Make_Op_Rotate_Right (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Rotate_Right);
-+
-+ function Make_Op_Shift_Left (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Shift_Left);
-+
-+ function Make_Op_Shift_Right_Arithmetic (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Shift_Right_Arithmetic);
-+
-+ function Make_Op_Shift_Right (Sloc : Source_Ptr;
-+ Left_Opnd : Node_Id;
-+ Right_Opnd : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Op_Shift_Right);
-+
-+ function Make_Delta_Constraint (Sloc : Source_Ptr;
-+ Delta_Expression : Node_Id;
-+ Range_Constraint : Node_Id := Empty)
-+ return Node_Id;
-+ pragma Inline (Make_Delta_Constraint);
-+
-+ function Make_At_Clause (Sloc : Source_Ptr;
-+ Identifier : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_At_Clause);
-+
-+ function Make_Mod_Clause (Sloc : Source_Ptr;
-+ Expression : Node_Id;
-+ Pragmas_Before : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Mod_Clause);
-+
-+ function Make_Conditional_Expression (Sloc : Source_Ptr;
-+ Expressions : List_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Conditional_Expression);
-+
-+ function Make_Expanded_Name (Sloc : Source_Ptr;
-+ Chars : Name_Id;
-+ Prefix : Node_Id;
-+ Selector_Name : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Expanded_Name);
-+
-+ function Make_Free_Statement (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Free_Statement);
-+
-+ function Make_Freeze_Entity (Sloc : Source_Ptr;
-+ Actions : List_Id := No_List)
-+ return Node_Id;
-+ pragma Inline (Make_Freeze_Entity);
-+
-+ function Make_Implicit_Label_Declaration (Sloc : Source_Ptr;
-+ Defining_Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Implicit_Label_Declaration);
-+
-+ function Make_Itype_Reference (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Itype_Reference);
-+
-+ function Make_Raise_Constraint_Error (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Reason : Uint)
-+ return Node_Id;
-+ pragma Inline (Make_Raise_Constraint_Error);
-+
-+ function Make_Raise_Program_Error (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Reason : Uint)
-+ return Node_Id;
-+ pragma Inline (Make_Raise_Program_Error);
-+
-+ function Make_Raise_Storage_Error (Sloc : Source_Ptr;
-+ Condition : Node_Id := Empty;
-+ Reason : Uint)
-+ return Node_Id;
-+ pragma Inline (Make_Raise_Storage_Error);
-+
-+ function Make_Reference (Sloc : Source_Ptr;
-+ Prefix : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Reference);
-+
-+ function Make_Subprogram_Info (Sloc : Source_Ptr;
-+ Identifier : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Subprogram_Info);
-+
-+ function Make_Unchecked_Expression (Sloc : Source_Ptr;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Unchecked_Expression);
-+
-+ function Make_Unchecked_Type_Conversion (Sloc : Source_Ptr;
-+ Subtype_Mark : Node_Id;
-+ Expression : Node_Id)
-+ return Node_Id;
-+ pragma Inline (Make_Unchecked_Type_Conversion);
-+
-+ function Make_Validate_Unchecked_Conversion (Sloc : Source_Ptr)
-+ return Node_Id;
-+ pragma Inline (Make_Validate_Unchecked_Conversion);
-+
-+end Nmake;
---- gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/treeprs.ads.orig 1970-01-01 01:00:00.000000000 +0100
-+++ gcc-3.4.0/obj-amd64-pld-linux/gcc/ada/treeprs.ads 2004-06-02 00:54:11.000000000 +0200
-@@ -0,0 +1,801 @@
-+------------------------------------------------------------------------------
-+-- --
-+-- GNAT COMPILER COMPONENTS --
-+-- --
-+-- T R E E P R S --
-+-- --
-+-- S p e c --
-+-- --
-+-- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
-+-- --
-+-- GNAT is free software; you can redistribute it and/or modify it under --
-+-- terms of the GNU General Public License as published by the Free Soft- --
-+-- ware Foundation; either version 2, or (at your option) any later ver- --
-+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
-+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
-+-- for more details. You should have received a copy of the GNU General --
-+-- Public License distributed with GNAT; see file COPYING. If not, write --
-+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
-+-- MA 02111-1307, USA. --
-+-- --
-+-- GNAT was originally developed by the GNAT team at New York University. --
-+-- Extensive contributions were provided by Ada Core Technologies Inc. --
-+-- --
-+------------------------------------------------------------------------------
-+
-+
-+-- This package contains the declaration of the string used by the Tree_Print
-+-- package. It must be updated whenever the arrangements of the field names
-+-- in package Sinfo is changed. The utility program XTREEPRS is used to
-+-- do this update correctly using the template treeprs.adt as input.
-+
-+with Sinfo; use Sinfo;
-+
-+package Treeprs is
-+
-+ --------------------------------
-+ -- String Data for Node Print --
-+ --------------------------------
-+
-+ -- String data for print out. The Pchars array is a long string with the
-+ -- the entry for each node type consisting of a single blank, followed by
-+ -- a series of entries, one for each Op or Flag field used for the node.
-+ -- Each entry has a single character which identifies the field, followed
-+ -- by the synonym name. The starting location for a given node type is
-+ -- found from the corresponding entry in the Pchars_Pos_Array.
-+
-+ -- The following characters identify the field. These are characters
-+ -- which could never occur in a field name, so they also mark the
-+ -- end of the previous name.
-+
-+ subtype Fchar is Character range '#' .. '9';
-+
-+ F_Field1 : constant Fchar := '#'; -- Character'Val (16#23#)
-+ F_Field2 : constant Fchar := '$'; -- Character'Val (16#24#)
-+ F_Field3 : constant Fchar := '%'; -- Character'Val (16#25#)
-+ F_Field4 : constant Fchar := '&'; -- Character'Val (16#26#)
-+ F_Field5 : constant Fchar := '''; -- Character'Val (16#27#)
-+ F_Flag1 : constant Fchar := '('; -- Character'Val (16#28#)
-+ F_Flag2 : constant Fchar := ')'; -- Character'Val (16#29#)
-+ F_Flag3 : constant Fchar := '*'; -- Character'Val (16#2A#)
-+ F_Flag4 : constant Fchar := '+'; -- Character'Val (16#2B#)
-+ F_Flag5 : constant Fchar := ','; -- Character'Val (16#2C#)
-+ F_Flag6 : constant Fchar := '-'; -- Character'Val (16#2D#)
-+ F_Flag7 : constant Fchar := '.'; -- Character'Val (16#2E#)
-+ F_Flag8 : constant Fchar := '/'; -- Character'Val (16#2F#)
-+ F_Flag9 : constant Fchar := '0'; -- Character'Val (16#30#)
-+ F_Flag10 : constant Fchar := '1'; -- Character'Val (16#31#)
-+ F_Flag11 : constant Fchar := '2'; -- Character'Val (16#32#)
-+ F_Flag12 : constant Fchar := '3'; -- Character'Val (16#33#)
-+ F_Flag13 : constant Fchar := '4'; -- Character'Val (16#34#)
-+ F_Flag14 : constant Fchar := '5'; -- Character'Val (16#35#)
-+ F_Flag15 : constant Fchar := '6'; -- Character'Val (16#36#)
-+ F_Flag16 : constant Fchar := '7'; -- Character'Val (16#37#)
-+ F_Flag17 : constant Fchar := '8'; -- Character'Val (16#38#)
-+ F_Flag18 : constant Fchar := '9'; -- Character'Val (16#39#)
-+
-+ -- Note this table does not include entity field and flags whose access
-+ -- functions are in Einfo (these are handled by the Print_Entity_Info
-+ -- procedure in Treepr, which uses the routines in Einfo to get the
-+ -- proper symbolic information). In addition, the following fields are
-+ -- handled by Treepr, and do not appear in the Pchars array:
-+
-+ -- Analyzed
-+ -- Cannot_Be_Constant
-+ -- Chars
-+ -- Comes_From_Source
-+ -- Error_Posted
-+ -- Etype
-+ -- Is_Controlling_Actual
-+ -- Is_Overloaded
-+ -- Is_Static_Expression
-+ -- Left_Opnd
-+ -- Must_Check_Expr
-+ -- Must_Not_Freeze
-+ -- No_Overflow_Expr
-+ -- Paren_Count
-+ -- Raises_Constraint_Error
-+ -- Right_Opnd
-+
-+ Pchars : constant String :=
-+ -- Unused_At_Start
-+ "" &
-+ -- At_Clause
-+ "#Identifier%Expression" &
-+ -- Component_Clause
-+ "#Component_Name$Position%First_Bit&Last_Bit" &
-+ -- Enumeration_Representation_Clause
-+ "#Identifier%Array_Aggregate&Next_Rep_Item" &
-+ -- Mod_Clause
-+ "%Expression&Pragmas_Before" &
-+ -- Record_Representation_Clause
-+ "#Identifier$Mod_Clause%Component_Clauses&Next_Rep_Item" &
-+ -- Attribute_Definition_Clause
-+ "$Name%Expression&Next_Rep_Item+From_At_Mod2Check_Address_Alignment" &
-+ -- Empty
-+ "" &
-+ -- Pragma
-+ "$Pragma_Argument_Associations%Debug_Statement&Next_Rep_Item" &
-+ -- Pragma_Argument_Association
-+ "%Expression" &
-+ -- Error
-+ "" &
-+ -- Defining_Character_Literal
-+ "$Next_Entity%Scope" &
-+ -- Defining_Identifier
-+ "$Next_Entity%Scope" &
-+ -- Defining_Operator_Symbol
-+ "$Next_Entity%Scope" &
-+ -- Expanded_Name
-+ "%Prefix$Selector_Name&Entity&Associated_Node4Redundant_Use2Has_Privat" &
-+ "e_View" &
-+ -- Identifier
-+ "&Entity&Associated_Node$Original_Discriminant4Redundant_Use2Has_Priva" &
-+ "te_View" &
-+ -- Operator_Symbol
-+ "%Strval&Entity&Associated_Node2Has_Private_View" &
-+ -- Character_Literal
-+ "$Char_Literal_Value&Entity&Associated_Node2Has_Private_View" &
-+ -- Op_Add
-+ "" &
-+ -- Op_Concat
-+ "4Is_Component_Left_Opnd5Is_Component_Right_Opnd" &
-+ -- Op_Expon
-+ "4Is_Power_Of_2_For_Shift" &
-+ -- Op_Subtract
-+ "" &
-+ -- Op_Divide
-+ "5Treat_Fixed_As_Integer4Do_Division_Check9Rounded_Result" &
-+ -- Op_Mod
-+ "5Treat_Fixed_As_Integer4Do_Division_Check" &
-+ -- Op_Multiply
-+ "5Treat_Fixed_As_Integer9Rounded_Result" &
-+ -- Op_Rem
-+ "5Treat_Fixed_As_Integer4Do_Division_Check" &
-+ -- Op_And
-+ "+Do_Length_Check" &
-+ -- Op_Eq
-+ "" &
-+ -- Op_Ge
-+ "" &
-+ -- Op_Gt
-+ "" &
-+ -- Op_Le
-+ "" &
-+ -- Op_Lt
-+ "" &
-+ -- Op_Ne
-+ "" &
-+ -- Op_Or
-+ "+Do_Length_Check" &
-+ -- Op_Xor
-+ "+Do_Length_Check" &
-+ -- Op_Rotate_Left
-+ "+Shift_Count_OK" &
-+ -- Op_Rotate_Right
-+ "+Shift_Count_OK" &
-+ -- Op_Shift_Left
-+ "+Shift_Count_OK" &
-+ -- Op_Shift_Right
-+ "+Shift_Count_OK" &
-+ -- Op_Shift_Right_Arithmetic
-+ "+Shift_Count_OK" &
-+ -- Op_Abs
-+ "" &
-+ -- Op_Minus
-+ "" &
-+ -- Op_Not
-+ "" &
-+ -- Op_Plus
-+ "" &
-+ -- Attribute_Reference
-+ "%Prefix$Attribute_Name#Expressions&Entity&Associated_Node8Do_Overflow" &
-+ "_Check4Redundant_Use+OK_For_Stream5Must_Be_Byte_Aligned" &
-+ -- And_Then
-+ "#Actions" &
-+ -- Conditional_Expression
-+ "#Expressions$Then_Actions%Else_Actions" &
-+ -- Explicit_Dereference
-+ "%Prefix" &
-+ -- Function_Call
-+ "$Name%Parameter_Associations&First_Named_Actual#Controlling_Argument4" &
-+ "Do_Tag_Check5No_Elaboration_Check8Parameter_List_Truncated9ABE_Is_" &
-+ "Certain" &
-+ -- In
-+ "" &
-+ -- Indexed_Component
-+ "%Prefix#Expressions" &
-+ -- Integer_Literal
-+ "$Original_Entity%Intval4Print_In_Hex" &
-+ -- Not_In
-+ "" &
-+ -- Null
-+ "" &
-+ -- Or_Else
-+ "#Actions" &
-+ -- Procedure_Call_Statement
-+ "$Name%Parameter_Associations&First_Named_Actual#Controlling_Argument4" &
-+ "Do_Tag_Check5No_Elaboration_Check8Parameter_List_Truncated9ABE_Is_" &
-+ "Certain" &
-+ -- Qualified_Expression
-+ "&Subtype_Mark%Expression" &
-+ -- Raise_Constraint_Error
-+ "#Condition%Reason" &
-+ -- Raise_Program_Error
-+ "#Condition%Reason" &
-+ -- Raise_Storage_Error
-+ "#Condition%Reason" &
-+ -- Aggregate
-+ "#Expressions$Component_Associations8Null_Record_Present%Aggregate_Bou" &
-+ "nds&Associated_Node+Static_Processing_OK9Compile_Time_Known_Aggreg" &
-+ "ate2Expansion_Delayed" &
-+ -- Allocator
-+ "%Expression#Storage_Pool&Procedure_To_Call4No_Initialization8Do_Stora" &
-+ "ge_Check" &
-+ -- Extension_Aggregate
-+ "%Ancestor_Part&Associated_Node#Expressions$Component_Associations8Nul" &
-+ "l_Record_Present2Expansion_Delayed" &
-+ -- Range
-+ "#Low_Bound$High_Bound2Includes_Infinities" &
-+ -- Real_Literal
-+ "$Original_Entity%Realval&Corresponding_Integer_Value2Is_Machine_Numbe" &
-+ "r" &
-+ -- Reference
-+ "%Prefix" &
-+ -- Selected_Component
-+ "%Prefix$Selector_Name&Associated_Node4Do_Discriminant_Check2Is_In_Dis" &
-+ "criminant_Check" &
-+ -- Slice
-+ "%Prefix&Discrete_Range" &
-+ -- String_Literal
-+ "%Strval2Has_Wide_Character" &
-+ -- Subprogram_Info
-+ "#Identifier" &
-+ -- Type_Conversion
-+ "&Subtype_Mark%Expression4Do_Tag_Check+Do_Length_Check8Do_Overflow_Che" &
-+ "ck2Float_Truncate9Rounded_Result5Conversion_OK" &
-+ -- Unchecked_Expression
-+ "%Expression" &
-+ -- Unchecked_Type_Conversion
-+ "&Subtype_Mark%Expression2Kill_Range_Check8No_Truncation" &
-+ -- Subtype_Indication
-+ "&Subtype_Mark%Constraint/Must_Not_Freeze" &
-+ -- Component_Declaration
-+ "#Defining_Identifier&Component_Definition%Expression,More_Ids-Prev_Id" &
-+ "s" &
-+ -- Entry_Declaration
-+ "#Defining_Identifier&Discrete_Subtype_Definition%Parameter_Specificat" &
-+ "ions'Corresponding_Body" &
-+ -- Formal_Object_Declaration
-+ "#Defining_Identifier6In_Present8Out_Present&Subtype_Mark%Expression,M" &
-+ "ore_Ids-Prev_Ids" &
-+ -- Formal_Type_Declaration
-+ "#Defining_Identifier%Formal_Type_Definition&Discriminant_Specificatio" &
-+ "ns4Unknown_Discriminants_Present" &
-+ -- Full_Type_Declaration
-+ "#Defining_Identifier&Discriminant_Specifications%Type_Definition2Disc" &
-+ "r_Check_Funcs_Built" &
-+ -- Incomplete_Type_Declaration
-+ "#Defining_Identifier&Discriminant_Specifications4Unknown_Discriminant" &
-+ "s_Present" &
-+ -- Loop_Parameter_Specification
-+ "#Defining_Identifier6Reverse_Present&Discrete_Subtype_Definition" &
-+ -- Object_Declaration
-+ "#Defining_Identifier+Aliased_Present8Constant_Present&Object_Definiti" &
-+ "on%Expression$Handler_List_Entry'Corresponding_Generic_Association" &
-+ ",More_Ids-Prev_Ids4No_Initialization6Assignment_OK2Exception_Junk5" &
-+ "Delay_Finalize_Attach7Is_Subprogram_Descriptor" &
-+ -- Protected_Type_Declaration
-+ "#Defining_Identifier&Discriminant_Specifications%Protected_Definition" &
-+ "'Corresponding_Body" &
-+ -- Private_Extension_Declaration
-+ "#Defining_Identifier&Discriminant_Specifications4Unknown_Discriminant" &
-+ "s_Present+Abstract_Present'Subtype_Indication" &
-+ -- Private_Type_Declaration
-+ "#Defining_Identifier&Discriminant_Specifications4Unknown_Discriminant" &
-+ "s_Present+Abstract_Present6Tagged_Present8Limited_Present" &
-+ -- Subtype_Declaration
-+ "#Defining_Identifier'Subtype_Indication&Generic_Parent_Type2Exception" &
-+ "_Junk" &
-+ -- Function_Specification
-+ "#Defining_Unit_Name$Elaboration_Boolean%Parameter_Specifications&Subt" &
-+ "ype_Mark'Generic_Parent" &
-+ -- Procedure_Specification
-+ "#Defining_Unit_Name$Elaboration_Boolean%Parameter_Specifications'Gene" &
-+ "ric_Parent" &
-+ -- Entry_Index_Specification
-+ "#Defining_Identifier&Discrete_Subtype_Definition" &
-+ -- Freeze_Entity
-+ "&Entity$Access_Types_To_Process%TSS_Elist#Actions'First_Subtype_Link" &
-+ -- Access_Function_Definition
-+ "6Protected_Present%Parameter_Specifications&Subtype_Mark" &
-+ -- Access_Procedure_Definition
-+ "6Protected_Present%Parameter_Specifications" &
-+ -- Task_Type_Declaration
-+ "#Defining_Identifier$Task_Body_Procedure&Discriminant_Specifications%" &
-+ "Task_Definition'Corresponding_Body" &
-+ -- Package_Body_Stub
-+ "#Defining_Identifier&Library_Unit'Corresponding_Body" &
-+ -- Protected_Body_Stub
-+ "#Defining_Identifier&Library_Unit'Corresponding_Body" &
-+ -- Subprogram_Body_Stub
-+ "#Specification&Library_Unit'Corresponding_Body" &
-+ -- Task_Body_Stub
-+ "#Defining_Identifier&Library_Unit'Corresponding_Body" &
-+ -- Function_Instantiation
-+ "#Defining_Unit_Name$Name%Generic_Associations&Parent_Spec'Instance_Sp" &
-+ "ec9ABE_Is_Certain" &
-+ -- Package_Instantiation
-+ "#Defining_Unit_Name$Name%Generic_Associations&Parent_Spec'Instance_Sp" &
-+ "ec9ABE_Is_Certain" &
-+ -- Procedure_Instantiation
-+ "#Defining_Unit_Name$Name&Parent_Spec%Generic_Associations'Instance_Sp" &
-+ "ec9ABE_Is_Certain" &
-+ -- Package_Body
-+ "#Defining_Unit_Name$Declarations&Handled_Statement_Sequence'Correspon" &
-+ "ding_Spec4Was_Originally_Stub" &
-+ -- Subprogram_Body
-+ "#Specification$Declarations&Handled_Statement_Sequence%Activation_Cha" &
-+ "in_Entity'Corresponding_Spec+Acts_As_Spec6Bad_Is_Detected8Do_Stora" &
-+ "ge_Check-Has_Priority_Pragma.Is_Protected_Subprogram_Body,Is_Task_" &
-+ "Master4Was_Originally_Stub" &
-+ -- Protected_Body
-+ "#Defining_Identifier$Declarations&End_Label'Corresponding_Spec4Was_Or" &
-+ "iginally_Stub" &
-+ -- Task_Body
-+ "#Defining_Identifier$Declarations&Handled_Statement_Sequence,Is_Task_" &
-+ "Master%Activation_Chain_Entity'Corresponding_Spec4Was_Originally_S" &
-+ "tub" &
-+ -- Implicit_Label_Declaration
-+ "#Defining_Identifier$Label_Construct" &
-+ -- Package_Declaration
-+ "#Specification'Corresponding_Body&Parent_Spec%Activation_Chain_Entity" &
-+ -- Single_Task_Declaration
-+ "#Defining_Identifier%Task_Definition" &
-+ -- Subprogram_Declaration
-+ "#Specification%Body_To_Inline'Corresponding_Body&Parent_Spec" &
-+ -- Use_Package_Clause
-+ "$Names%Next_Use_Clause&Hidden_By_Use_Clause" &
-+ -- Generic_Package_Declaration
-+ "#Specification'Corresponding_Body$Generic_Formal_Declarations&Parent_" &
-+ "Spec%Activation_Chain_Entity" &
-+ -- Generic_Subprogram_Declaration
-+ "#Specification'Corresponding_Body$Generic_Formal_Declarations&Parent_" &
-+ "Spec" &
-+ -- Constrained_Array_Definition
-+ "$Discrete_Subtype_Definitions&Component_Definition" &
-+ -- Unconstrained_Array_Definition
-+ "$Subtype_Marks&Component_Definition" &
-+ -- Exception_Renaming_Declaration
-+ "#Defining_Identifier$Name" &
-+ -- Object_Renaming_Declaration
-+ "#Defining_Identifier&Subtype_Mark$Name'Corresponding_Generic_Associat" &
-+ "ion" &
-+ -- Package_Renaming_Declaration
-+ "#Defining_Unit_Name$Name&Parent_Spec" &
-+ -- Subprogram_Renaming_Declaration
-+ "#Specification$Name&Parent_Spec'Corresponding_Spec" &
-+ -- Generic_Function_Renaming_Declaration
-+ "#Defining_Unit_Name$Name&Parent_Spec" &
-+ -- Generic_Package_Renaming_Declaration
-+ "#Defining_Unit_Name$Name&Parent_Spec" &
-+ -- Generic_Procedure_Renaming_Declaration
-+ "#Defining_Unit_Name$Name&Parent_Spec" &
-+ -- Abort_Statement
-+ "$Names" &
-+ -- Accept_Statement
-+ "#Entry_Direct_Name'Entry_Index%Parameter_Specifications&Handled_State" &
-+ "ment_Sequence$Declarations" &
-+ -- Assignment_Statement
-+ "$Name%Expression4Do_Tag_Check+Do_Length_Check,Forwards_OK-Backwards_O" &
-+ "K.No_Ctrl_Actions" &
-+ -- Asynchronous_Select
-+ "#Triggering_Alternative$Abortable_Part" &
-+ -- Block_Statement
-+ "#Identifier$Declarations&Handled_Statement_Sequence,Is_Task_Master%Ac" &
-+ "tivation_Chain_Entity6Has_Created_Identifier-Is_Task_Allocation_Bl" &
-+ "ock.Is_Asynchronous_Call_Block" &
-+ -- Case_Statement
-+ "%Expression&Alternatives'End_Span" &
-+ -- Code_Statement
-+ "%Expression" &
-+ -- Conditional_Entry_Call
-+ "#Entry_Call_Alternative&Else_Statements" &
-+ -- Delay_Relative_Statement
-+ "%Expression" &
-+ -- Delay_Until_Statement
-+ "%Expression" &
-+ -- Entry_Call_Statement
-+ "$Name%Parameter_Associations&First_Named_Actual" &
-+ -- Free_Statement
-+ "%Expression#Storage_Pool&Procedure_To_Call" &
-+ -- Goto_Statement
-+ "$Name2Exception_Junk" &
-+ -- Loop_Statement
-+ "#Identifier$Iteration_Scheme%Statements&End_Label6Has_Created_Identif" &
-+ "ier7Is_Null_Loop" &
-+ -- Null_Statement
-+ "" &
-+ -- Raise_Statement
-+ "$Name" &
-+ -- Requeue_Statement
-+ "$Name6Abort_Present" &
-+ -- Return_Statement
-+ "%Expression#Storage_Pool&Procedure_To_Call4Do_Tag_Check$Return_Type,B" &
-+ "y_Ref" &
-+ -- Selective_Accept
-+ "#Select_Alternatives&Else_Statements" &
-+ -- Timed_Entry_Call
-+ "#Entry_Call_Alternative&Delay_Alternative" &
-+ -- Exit_Statement
-+ "$Name#Condition" &
-+ -- If_Statement
-+ "#Condition$Then_Statements%Elsif_Parts&Else_Statements'End_Span" &
-+ -- Accept_Alternative
-+ "$Accept_Statement#Condition%Statements&Pragmas_Before'Accept_Handler_" &
-+ "Records" &
-+ -- Delay_Alternative
-+ "$Delay_Statement#Condition%Statements&Pragmas_Before" &
-+ -- Elsif_Part
-+ "#Condition$Then_Statements%Condition_Actions" &
-+ -- Entry_Body_Formal_Part
-+ "&Entry_Index_Specification%Parameter_Specifications#Condition" &
-+ -- Iteration_Scheme
-+ "#Condition%Condition_Actions&Loop_Parameter_Specification" &
-+ -- Terminate_Alternative
-+ "#Condition&Pragmas_Before'Pragmas_After" &
-+ -- Abortable_Part
-+ "%Statements" &
-+ -- Abstract_Subprogram_Declaration
-+ "#Specification" &
-+ -- Access_Definition
-+ "&Subtype_Mark" &
-+ -- Access_To_Object_Definition
-+ "6All_Present'Subtype_Indication8Constant_Present" &
-+ -- Case_Statement_Alternative
-+ "&Discrete_Choices%Statements" &
-+ -- Compilation_Unit
-+ "&Library_Unit#Context_Items6Private_Present$Unit'Aux_Decls_Node8Has_N" &
-+ "o_Elaboration_Code4Body_Required+Acts_As_Spec%First_Inlined_Subpro" &
-+ "gram" &
-+ -- Compilation_Unit_Aux
-+ "$Declarations#Actions'Pragmas_After&Config_Pragmas" &
-+ -- Component_Association
-+ "#Choices$Loop_Actions%Expression6Box_Present" &
-+ -- Component_Definition
-+ "+Aliased_Present'Subtype_Indication" &
-+ -- Component_List
-+ "%Component_Items&Variant_Part4Null_Present" &
-+ -- Derived_Type_Definition
-+ "+Abstract_Present'Subtype_Indication%Record_Extension_Part" &
-+ -- Decimal_Fixed_Point_Definition
-+ "%Delta_Expression$Digits_Expression&Real_Range_Specification" &
-+ -- Defining_Program_Unit_Name
-+ "$Name#Defining_Identifier" &
-+ -- Delta_Constraint
-+ "%Delta_Expression&Range_Constraint" &
-+ -- Designator
-+ "$Name#Identifier" &
-+ -- Digits_Constraint
-+ "$Digits_Expression&Range_Constraint" &
-+ -- Discriminant_Association
-+ "#Selector_Names%Expression" &
-+ -- Discriminant_Specification
-+ "#Defining_Identifier'Discriminant_Type%Expression,More_Ids-Prev_Ids" &
-+ -- Enumeration_Type_Definition
-+ "#Literals&End_Label" &
-+ -- Entry_Body
-+ "#Defining_Identifier'Entry_Body_Formal_Part$Declarations&Handled_Stat" &
-+ "ement_Sequence%Activation_Chain_Entity" &
-+ -- Entry_Call_Alternative
-+ "#Entry_Call_Statement%Statements&Pragmas_Before" &
-+ -- Exception_Declaration
-+ "#Defining_Identifier%Expression,More_Ids-Prev_Ids" &
-+ -- Exception_Handler
-+ "$Choice_Parameter&Exception_Choices%Statements,Zero_Cost_Handling" &
-+ -- Floating_Point_Definition
-+ "$Digits_Expression&Real_Range_Specification" &
-+ -- Formal_Decimal_Fixed_Point_Definition
-+ "" &
-+ -- Formal_Derived_Type_Definition
-+ "&Subtype_Mark6Private_Present+Abstract_Present" &
-+ -- Formal_Discrete_Type_Definition
-+ "" &
-+ -- Formal_Floating_Point_Definition
-+ "" &
-+ -- Formal_Modular_Type_Definition
-+ "" &
-+ -- Formal_Ordinary_Fixed_Point_Definition
-+ "" &
-+ -- Formal_Package_Declaration
-+ "#Defining_Identifier$Name%Generic_Associations6Box_Present'Instance_S" &
-+ "pec9ABE_Is_Certain" &
-+ -- Formal_Private_Type_Definition
-+ "+Abstract_Present6Tagged_Present8Limited_Present" &
-+ -- Formal_Signed_Integer_Type_Definition
-+ "" &
-+ -- Formal_Subprogram_Declaration
-+ "#Specification$Default_Name6Box_Present" &
-+ -- Generic_Association
-+ "$Selector_Name#Explicit_Generic_Actual_Parameter" &
-+ -- Handled_Sequence_Of_Statements
-+ "%Statements&End_Label'Exception_Handlers#At_End_Proc$First_Real_State" &
-+ "ment,Zero_Cost_Handling" &
-+ -- Index_Or_Discriminant_Constraint
-+ "#Constraints" &
-+ -- Itype_Reference
-+ "#Itype" &
-+ -- Label
-+ "#Identifier2Exception_Junk" &
-+ -- Modular_Type_Definition
-+ "%Expression" &
-+ -- Number_Declaration
-+ "#Defining_Identifier%Expression,More_Ids-Prev_Ids" &
-+ -- Ordinary_Fixed_Point_Definition
-+ "%Delta_Expression&Real_Range_Specification" &
-+ -- Others_Choice
-+ "#Others_Discrete_Choices2All_Others" &
-+ -- Package_Specification
-+ "#Defining_Unit_Name$Visible_Declarations%Private_Declarations&End_Lab" &
-+ "el'Generic_Parent9Limited_View_Installed" &
-+ -- Parameter_Association
-+ "$Selector_Name%Explicit_Actual_Parameter&Next_Named_Actual" &
-+ -- Parameter_Specification
-+ "#Defining_Identifier6In_Present8Out_Present$Parameter_Type%Expression" &
-+ "4Do_Accessibility_Check,More_Ids-Prev_Ids'Default_Expression" &
-+ -- Protected_Definition
-+ "$Visible_Declarations%Private_Declarations&End_Label-Has_Priority_Pra" &
-+ "gma" &
-+ -- Range_Constraint
-+ "&Range_Expression" &
-+ -- Real_Range_Specification
-+ "#Low_Bound$High_Bound" &
-+ -- Record_Definition
-+ "&End_Label+Abstract_Present6Tagged_Present8Limited_Present#Component_" &
-+ "List4Null_Present" &
-+ -- Signed_Integer_Type_Definition
-+ "#Low_Bound$High_Bound" &
-+ -- Single_Protected_Declaration
-+ "#Defining_Identifier%Protected_Definition" &
-+ -- Subunit
-+ "$Name#Proper_Body%Corresponding_Stub" &
-+ -- Task_Definition
-+ "$Visible_Declarations%Private_Declarations&End_Label-Has_Priority_Pra" &
-+ "gma,Has_Storage_Size_Pragma.Has_Task_Info_Pragma/Has_Task_Name_Pra" &
-+ "gma" &
-+ -- Triggering_Alternative
-+ "#Triggering_Statement%Statements&Pragmas_Before" &
-+ -- Use_Type_Clause
-+ "$Subtype_Marks%Next_Use_Clause&Hidden_By_Use_Clause" &
-+ -- Validate_Unchecked_Conversion
-+ "#Source_Type$Target_Type" &
-+ -- Variant
-+ "&Discrete_Choices#Component_List$Enclosing_Variant%Present_Expr'Dchec" &
-+ "k_Function" &
-+ -- Variant_Part
-+ "$Name#Variants" &
-+ -- With_Clause
-+ "$Name&Library_Unit'Corresponding_Spec,First_Name-Last_Name4Context_In" &
-+ "stalled+Elaborate_Present6Elaborate_All_Present7Implicit_With8Limi" &
-+ "ted_Present9Limited_View_Installed.Unreferenced_In_Spec/No_Entitie" &
-+ "s_Ref_In_Spec" &
-+ -- With_Type_Clause
-+ "$Name6Tagged_Present" &
-+ -- Unused_At_End
-+ "";
-+
-+ type Pchar_Pos_Array is array (Node_Kind) of Positive;
-+ Pchar_Pos : constant Pchar_Pos_Array := Pchar_Pos_Array'(
-+ N_Unused_At_Start => 1,
-+ N_At_Clause => 1,
-+ N_Component_Clause => 23,
-+ N_Enumeration_Representation_Clause => 66,
-+ N_Mod_Clause => 107,
-+ N_Record_Representation_Clause => 133,
-+ N_Attribute_Definition_Clause => 187,
-+ N_Empty => 253,
-+ N_Pragma => 253,
-+ N_Pragma_Argument_Association => 312,
-+ N_Error => 323,
-+ N_Defining_Character_Literal => 323,
-+ N_Defining_Identifier => 341,
-+ N_Defining_Operator_Symbol => 359,
-+ N_Expanded_Name => 377,
-+ N_Identifier => 452,
-+ N_Operator_Symbol => 528,
-+ N_Character_Literal => 575,
-+ N_Op_Add => 634,
-+ N_Op_Concat => 634,
-+ N_Op_Expon => 681,
-+ N_Op_Subtract => 705,
-+ N_Op_Divide => 705,
-+ N_Op_Mod => 761,
-+ N_Op_Multiply => 802,
-+ N_Op_Rem => 840,
-+ N_Op_And => 881,
-+ N_Op_Eq => 897,
-+ N_Op_Ge => 897,
-+ N_Op_Gt => 897,
-+ N_Op_Le => 897,
-+ N_Op_Lt => 897,
-+ N_Op_Ne => 897,
-+ N_Op_Or => 897,
-+ N_Op_Xor => 913,
-+ N_Op_Rotate_Left => 929,
-+ N_Op_Rotate_Right => 944,
-+ N_Op_Shift_Left => 959,
-+ N_Op_Shift_Right => 974,
-+ N_Op_Shift_Right_Arithmetic => 989,
-+ N_Op_Abs => 1004,
-+ N_Op_Minus => 1004,
-+ N_Op_Not => 1004,
-+ N_Op_Plus => 1004,
-+ N_Attribute_Reference => 1004,
-+ N_And_Then => 1128,
-+ N_Conditional_Expression => 1136,
-+ N_Explicit_Dereference => 1174,
-+ N_Function_Call => 1181,
-+ N_In => 1323,
-+ N_Indexed_Component => 1323,
-+ N_Integer_Literal => 1342,
-+ N_Not_In => 1378,
-+ N_Null => 1378,
-+ N_Or_Else => 1378,
-+ N_Procedure_Call_Statement => 1386,
-+ N_Qualified_Expression => 1528,
-+ N_Raise_Constraint_Error => 1552,
-+ N_Raise_Program_Error => 1569,
-+ N_Raise_Storage_Error => 1586,
-+ N_Aggregate => 1603,
-+ N_Allocator => 1759,
-+ N_Extension_Aggregate => 1836,
-+ N_Range => 1939,
-+ N_Real_Literal => 1980,
-+ N_Reference => 2050,
-+ N_Selected_Component => 2057,
-+ N_Slice => 2141,
-+ N_String_Literal => 2163,
-+ N_Subprogram_Info => 2189,
-+ N_Type_Conversion => 2200,
-+ N_Unchecked_Expression => 2315,
-+ N_Unchecked_Type_Conversion => 2326,
-+ N_Subtype_Indication => 2381,
-+ N_Component_Declaration => 2421,
-+ N_Entry_Declaration => 2491,
-+ N_Formal_Object_Declaration => 2583,
-+ N_Formal_Type_Declaration => 2668,
-+ N_Full_Type_Declaration => 2769,
-+ N_Incomplete_Type_Declaration => 2857,
-+ N_Loop_Parameter_Specification => 2935,
-+ N_Object_Declaration => 2999,
-+ N_Protected_Type_Declaration => 3246,
-+ N_Private_Extension_Declaration => 3334,
-+ N_Private_Type_Declaration => 3448,
-+ N_Subtype_Declaration => 3574,
-+ N_Function_Specification => 3648,
-+ N_Procedure_Specification => 3740,
-+ N_Entry_Index_Specification => 3819,
-+ N_Freeze_Entity => 3867,
-+ N_Access_Function_Definition => 3935,
-+ N_Access_Procedure_Definition => 3991,
-+ N_Task_Type_Declaration => 4034,
-+ N_Package_Body_Stub => 4137,
-+ N_Protected_Body_Stub => 4189,
-+ N_Subprogram_Body_Stub => 4241,
-+ N_Task_Body_Stub => 4287,
-+ N_Function_Instantiation => 4339,
-+ N_Package_Instantiation => 4425,
-+ N_Procedure_Instantiation => 4511,
-+ N_Package_Body => 4597,
-+ N_Subprogram_Body => 4695,
-+ N_Protected_Body => 4922,
-+ N_Task_Body => 5004,
-+ N_Implicit_Label_Declaration => 5142,
-+ N_Package_Declaration => 5178,
-+ N_Single_Task_Declaration => 5247,
-+ N_Subprogram_Declaration => 5283,
-+ N_Use_Package_Clause => 5343,
-+ N_Generic_Package_Declaration => 5386,
-+ N_Generic_Subprogram_Declaration => 5483,
-+ N_Constrained_Array_Definition => 5556,
-+ N_Unconstrained_Array_Definition => 5606,
-+ N_Exception_Renaming_Declaration => 5641,
-+ N_Object_Renaming_Declaration => 5666,
-+ N_Package_Renaming_Declaration => 5738,
-+ N_Subprogram_Renaming_Declaration => 5774,
-+ N_Generic_Function_Renaming_Declaration => 5824,
-+ N_Generic_Package_Renaming_Declaration => 5860,
-+ N_Generic_Procedure_Renaming_Declaration => 5896,
-+ N_Abort_Statement => 5932,
-+ N_Accept_Statement => 5938,
-+ N_Assignment_Statement => 6033,
-+ N_Asynchronous_Select => 6119,
-+ N_Block_Statement => 6157,
-+ N_Case_Statement => 6322,
-+ N_Code_Statement => 6355,
-+ N_Conditional_Entry_Call => 6366,
-+ N_Delay_Relative_Statement => 6405,
-+ N_Delay_Until_Statement => 6416,
-+ N_Entry_Call_Statement => 6427,
-+ N_Free_Statement => 6474,
-+ N_Goto_Statement => 6516,
-+ N_Loop_Statement => 6536,
-+ N_Null_Statement => 6621,
-+ N_Raise_Statement => 6621,
-+ N_Requeue_Statement => 6626,
-+ N_Return_Statement => 6645,
-+ N_Selective_Accept => 6719,
-+ N_Timed_Entry_Call => 6755,
-+ N_Exit_Statement => 6796,
-+ N_If_Statement => 6811,
-+ N_Accept_Alternative => 6874,
-+ N_Delay_Alternative => 6950,
-+ N_Elsif_Part => 7002,
-+ N_Entry_Body_Formal_Part => 7046,
-+ N_Iteration_Scheme => 7107,
-+ N_Terminate_Alternative => 7164,
-+ N_Abortable_Part => 7203,
-+ N_Abstract_Subprogram_Declaration => 7214,
-+ N_Access_Definition => 7228,
-+ N_Access_To_Object_Definition => 7241,
-+ N_Case_Statement_Alternative => 7289,
-+ N_Compilation_Unit => 7317,
-+ N_Compilation_Unit_Aux => 7456,
-+ N_Component_Association => 7506,
-+ N_Component_Definition => 7550,
-+ N_Component_List => 7585,
-+ N_Derived_Type_Definition => 7627,
-+ N_Decimal_Fixed_Point_Definition => 7685,
-+ N_Defining_Program_Unit_Name => 7745,
-+ N_Delta_Constraint => 7770,
-+ N_Designator => 7804,
-+ N_Digits_Constraint => 7820,
-+ N_Discriminant_Association => 7855,
-+ N_Discriminant_Specification => 7881,
-+ N_Enumeration_Type_Definition => 7948,
-+ N_Entry_Body => 7967,
-+ N_Entry_Call_Alternative => 8074,
-+ N_Exception_Declaration => 8121,
-+ N_Exception_Handler => 8170,
-+ N_Floating_Point_Definition => 8235,
-+ N_Formal_Decimal_Fixed_Point_Definition => 8278,
-+ N_Formal_Derived_Type_Definition => 8278,
-+ N_Formal_Discrete_Type_Definition => 8324,
-+ N_Formal_Floating_Point_Definition => 8324,
-+ N_Formal_Modular_Type_Definition => 8324,
-+ N_Formal_Ordinary_Fixed_Point_Definition => 8324,
-+ N_Formal_Package_Declaration => 8324,
-+ N_Formal_Private_Type_Definition => 8411,
-+ N_Formal_Signed_Integer_Type_Definition => 8459,
-+ N_Formal_Subprogram_Declaration => 8459,
-+ N_Generic_Association => 8498,
-+ N_Handled_Sequence_Of_Statements => 8546,
-+ N_Index_Or_Discriminant_Constraint => 8638,
-+ N_Itype_Reference => 8650,
-+ N_Label => 8656,
-+ N_Modular_Type_Definition => 8682,
-+ N_Number_Declaration => 8693,
-+ N_Ordinary_Fixed_Point_Definition => 8742,
-+ N_Others_Choice => 8784,
-+ N_Package_Specification => 8819,
-+ N_Parameter_Association => 8928,
-+ N_Parameter_Specification => 8986,
-+ N_Protected_Definition => 9115,
-+ N_Range_Constraint => 9187,
-+ N_Real_Range_Specification => 9204,
-+ N_Record_Definition => 9225,
-+ N_Signed_Integer_Type_Definition => 9311,
-+ N_Single_Protected_Declaration => 9332,
-+ N_Subunit => 9373,
-+ N_Task_Definition => 9409,
-+ N_Triggering_Alternative => 9547,
-+ N_Use_Type_Clause => 9594,
-+ N_Validate_Unchecked_Conversion => 9645,
-+ N_Variant => 9669,
-+ N_Variant_Part => 9748,
-+ N_With_Clause => 9762,
-+ N_With_Type_Clause => 9976,
-+ N_Unused_At_End => 9996);
-+
-+end Treeprs;
+++ /dev/null
---- 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)
-
+++ /dev/null
-#! /bin/sh -e
-
-# All lines beginning with `# DP:' are a description of the patch.
-# DP: Fix for complex math on alpha
-
-if [ $# -eq 3 -a "$2" = '-d' ]; then
- pdir="-d $3"
-elif [ $# -ne 1 ]; then
- echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
- exit 1
-fi
-case "$1" in
- -patch) patch $pdir -f --no-backup-if-mismatch -p1 < $0;;
- -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p1 < $0;;
- *)
- echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
- exit 1
-esac
-exit 0
-
-(from Joel Klecker's original message):
-
- I've tested this patch with building glibc and it enables it to compile, I
- haven't been able to test the resulting binaries yet, however. I assume
- this will fix the g77 problems too.
-
- * flow.c (insn_dead_p): Don't kill part of a complex number.
- * emit-rtl.c (gen_lowpart_common): Handle narrow complex reg values.
- (gen_highpart): Likewise.
- * calls.c (expand_call): Narrow complex variable uses two regs.
- * alpha/alpha.h (ALPHA_ARG_SIZE): Likewise.
- (HARD_REGNO_NREGS): Likewise.
-
-diff -ur gcc-2.95.2/gcc/calls.c gcc-2.95.2.patched/gcc/calls.c
---- gcc-2.95.2/gcc/calls.c Fri May 7 21:58:39 1999
-+++ gcc-2.95.2.patched/gcc/calls.c Sat Feb 19 14:26:21 2000
-@@ -1499,6 +1499,11 @@
- validize_mem (args[i].value), nregs,
- args[i].mode);
-
-+ /* Indicate two regs used to hold a short complex arg. */
-+ if (GET_MODE_CLASS (args[i].mode) == MODE_COMPLEX_FLOAT
-+ && GET_MODE_SIZE (args[i].mode) <= UNITS_PER_WORD)
-+ nregs = 2;
-+
- /* Handle calls that pass values in multiple non-contiguous
- locations. The Irix 6 ABI has examples of this. */
- if (GET_CODE (reg) == PARALLEL)
-diff -ur gcc-2.95.2/gcc/config/alpha/alpha.h gcc-2.95.2.patched/gcc/config/alpha/alpha.h
---- gcc-2.95.2/gcc/config/alpha/alpha.h Fri Jun 25 01:09:12 1999
-+++ gcc-2.95.2.patched/gcc/config/alpha/alpha.h Sat Feb 19 14:28:45 2000
-@@ -622,7 +622,10 @@
- but can be less for certain modes in special long registers. */
-
- #define HARD_REGNO_NREGS(REGNO, MODE) \
-- ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
-+ ((GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
-+ && GET_MODE_SIZE (MODE) <= UNITS_PER_WORD) \
-+ ? 2 \
-+ : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
-
- /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
- On Alpha, the integer registers can hold any mode. The floating-point
-@@ -1070,12 +1073,16 @@
- #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) (CUM) = 0
-
- /* Define intermediate macro to compute the size (in registers) of an argument
-- for the Alpha. */
-+ for the Alpha.
-+ A short complex arg takes two registers. */
-
- #define ALPHA_ARG_SIZE(MODE, TYPE, NAMED) \
--((MODE) != BLKmode \
-- ? (GET_MODE_SIZE (MODE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD \
-- : (int_size_in_bytes (TYPE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
-+ ((GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
-+ && GET_MODE_SIZE (MODE) <= UNITS_PER_WORD) \
-+ ? 2 \
-+ : ((MODE) != BLKmode \
-+ ? (GET_MODE_SIZE (MODE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD \
-+ : (int_size_in_bytes (TYPE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))
-
- /* Update the data in CUM to advance over an argument
- of mode MODE and data type TYPE.
-diff -ur gcc-2.95.2/gcc/emit-rtl.c gcc-2.95.2.patched/gcc/emit-rtl.c
---- gcc-2.95.2/gcc/emit-rtl.c Wed Aug 11 03:28:52 1999
-+++ gcc-2.95.2.patched/gcc/emit-rtl.c Sat Feb 19 14:31:19 2000
-@@ -749,6 +749,15 @@
- && ! HARD_REGNO_MODE_OK (REGNO (x) + word, mode)
- && HARD_REGNO_MODE_OK (REGNO (x), GET_MODE (x)))
- return 0;
-+ else if (GET_MODE_CLASS (GET_MODE (x)) == MODE_COMPLEX_FLOAT
-+ && GET_MODE_SIZE (GET_MODE (x)) <= UNITS_PER_WORD
-+ && REGNO (x) < FIRST_PSEUDO_REGISTER)
-+ {
-+ if (REG_FUNCTION_VALUE_P (x))
-+ return gen_rtx (SUBREG, mode, x, 0);
-+ else
-+ return gen_rtx (REG, mode, REGNO (x));
-+ }
- else if (REGNO (x) < FIRST_PSEUDO_REGISTER
- /* integrate.c can't handle parts of a return value register. */
- && (! REG_FUNCTION_VALUE_P (x)
-@@ -972,11 +981,6 @@
- {
- if (GET_CODE (x) == CONCAT && GET_MODE (XEXP (x, 0)) == mode)
- return XEXP (x, 0);
-- else if (WORDS_BIG_ENDIAN
-- && GET_MODE_BITSIZE (mode) < BITS_PER_WORD
-- && REG_P (x)
-- && REGNO (x) < FIRST_PSEUDO_REGISTER)
-- fatal ("Unable to access real part of complex value in a hard register on this target");
- else if (WORDS_BIG_ENDIAN)
- return gen_highpart (mode, x);
- else
-@@ -995,11 +999,6 @@
- return XEXP (x, 1);
- else if (WORDS_BIG_ENDIAN)
- return gen_lowpart (mode, x);
-- else if (!WORDS_BIG_ENDIAN
-- && GET_MODE_BITSIZE (mode) < BITS_PER_WORD
-- && REG_P (x)
-- && REGNO (x) < FIRST_PSEUDO_REGISTER)
-- fatal ("Unable to access imaginary part of complex value in a hard register on this target");
- else
- return gen_highpart (mode, x);
- }
-@@ -1134,6 +1133,16 @@
- word = ((GET_MODE_SIZE (GET_MODE (x))
- - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD))
- / UNITS_PER_WORD);
-+
-+ if (GET_MODE_CLASS (GET_MODE (x)) == MODE_COMPLEX_FLOAT
-+ && GET_MODE_SIZE (GET_MODE (x)) <= UNITS_PER_WORD
-+ && REGNO (x) < FIRST_PSEUDO_REGISTER)
-+ {
-+ if (REG_FUNCTION_VALUE_P (x))
-+ return gen_rtx (SUBREG, mode, x, 1);
-+ else
-+ return gen_rtx (REG, mode, REGNO (x) + 1);
-+ }
-
- if (REGNO (x) < FIRST_PSEUDO_REGISTER
- /* integrate.c can't handle parts of a return value register. */
-diff -ur gcc-2.95.2/gcc/flow.c gcc-2.95.2.patched/gcc/flow.c
---- gcc-2.95.2/gcc/flow.c Wed Aug 4 03:09:48 1999
-+++ gcc-2.95.2.patched/gcc/flow.c Sat Feb 19 14:34:02 2000
-@@ -2995,6 +2995,10 @@
- while (--n > 0)
- if (REGNO_REG_SET_P (needed, regno+n))
- return 0;
-+
-+ /* Don't allow part of a complex number to be deleted. */
-+ if (GET_MODE_CLASS (GET_MODE (r)) == MODE_COMPLEX_FLOAT)
-+ return 0;
- }
-
- return 1;
-
-
+++ /dev/null
-# DP: Make bootstrap: restartable at any point
-# DP: From: Donn Terry <donn@interix.com>
-
-Make bootstrap: restartable at any point.
-
-This is in response to a discussion on this topic. This is "take 2" |
-which should work with parallel builds, though I haven't tested that. |
-
-When doing a make bootstrap, it's hard to know (at least when
-not throughly versed in the process details) how to restart
-after making a fix. In general, retyping "make bootstrap"
-will do the wrong thing (particularly if the host and target
-compilers object files are incompatible!)
-
-This change keeps track of the stages completed. The old
-bootstrap2[234] (and *-lean) targets are rewritten, but work the
-same.
-
-I've tested this by doing a make bootstrap (on CVS sources as of |
-last night) and by typing 'make bootstrap' after it's done, |
-in which case it thinks a moment and does nothing. (Which is exactly
-the right answer.)
-
-I've also done a complete regression, with no surprises. |
-
-I tested whether stopping/restarting at a few arbitrary points along the
-way works with older sources, but haven't tested it real recently,
-except to do a ^C halfway through a testbuild at one point. |
-Again, if it works at all, it should work as well as it ever did.
-I specficially did test it during the period where make bootstrap
-wasn't succeeding for me, and it helped a LOT in being able to pick up
-where I left off.
-
-An interesting side-effect: make bootstrap-lean after a make bootstrap |
-JUST cleans out stage1, with no unwanted consequences. |
-
-
-Fri May 28 15:27:02 1999 Donn Terry (donn@interix.com)
- * Makefile.in: restructure bootstrap stages to allow
- clean restart after failure.
-
-diff -urP egcs.source.old/gcc/Makefile.in egcs.source/gcc/Makefile.in
---- egcs.source.old/gcc/Makefile.in Sun May 23 13:39:21 1999
-+++ egcs.source/gcc/Makefile.in Thu May 27 16:59:42 1999
-@@ -2360,6 +2360,8 @@ clean: mostlyclean intl.clean lang.clean
- rm -rf `echo $(MULTILIB_OPTIONS) | sed -e 's/\// /g'`; \
- fi ; fi
- -rm -fr stage1 stage2 stage3 stage4
-+ -rm -f boot_stage_a boot_stage_b boot_stage_c boot_stage_d
-+ -rm -f boot_stage_e boot_stage_f
-
- # Delete all files that users would normally create
- # while building and installing GCC.
-@@ -2924,33 +2926,83 @@ diff:
- $(LANG_DIFF_EXCLUDES) \
- gcc-$(oldversion) gcc-$(version) > gcc-$(oldversion)-$(version).diff
-
--bootstrap bootstrap-lean: force
-+
- # Only build the C compiler for stage1, because that is the only one that
- # we can guarantee will build with the native compiler, and also it is the
- # only thing useful for building stage2.
-- $(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)"
-- $(MAKE) stage1
-+boot_stage_a:
-+ +$(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)"
-+ touch boot_stage_a
-+ echo ---------------------- stage a complete ---------------------
-+
-+boot_stage_b:
-+ +$(MAKE) stage1
-+ touch boot_stage_b
-+ echo ---------------------- stage b complete ---------------------
-+
- # This used to define ALLOCA as empty, but that would lead to bad results
- # for a subsequent `make install' since that would not have ALLOCA empty.
- # To prevent `make install' from compiling alloca.o and then relinking cc1
- # because alloca.o is newer, we permit these recursive makes to compile
- # alloca.o. Then cc1 is newer, so it won't have to be relinked.
-- $(MAKE) CC="stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
-- $(MAKE) stage2
-- -if test $@ = bootstrap-lean; then rm -rf stage1; else true; fi
-- $(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
-+boot_stage_c:
-+ +$(MAKE) CC="stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
-+ touch boot_stage_c
-+ echo ---------------------- stage c complete ---------------------
-
--bootstrap2 bootstrap2-lean: force
-- $(MAKE) CC="stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
-- $(MAKE) stage2
-- -if test $@ = bootstrap2-lean; then rm -rf stage1; else true; fi
-- $(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
-+boot_stage_d:
-+ +$(MAKE) stage2
-+ touch boot_stage_d
-+ echo ---------------------- stage d complete ---------------------
-
--bootstrap3 bootstrap3-lean: force
-- $(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
-+boot_stage_e:
-+ +$(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
-+ touch boot_stage_e
-+ echo ---------------------- stage e complete ---------------------
-+
-+# Only bootstrap4 uses stage f.
-+boot_stage_f:
-+ +$(MAKE) CC="stage3/xgcc$(exeext) -Bstage3/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage3/ LANGUAGES="$(LANGUAGES)"
-+ touch boot_stage_f
-+ echo ---------------------- stage f complete ---------------------
-+
-+boot_clean_stage1:
-+ rm -rf stage1
-+
-+# This next little bit is the way it is for parallel builds. It's simply
-+# a chain of stages which DO have to be done sequentially.
-+
-+bootstrap_a: boot_stage_a
-+bootstrap_b: bootstrap_a boot_stage_b
-+bootstrap_c: bootstrap_b boot_stage_c
-+bootstrap_d: bootstrap_c boot_stage_d
-+bootstrap_e: bootstrap_d boot_stage_e
-+bootstrap: force bootstrap_e
-+
-+bootstrap-lean_a: boot_stage_a
-+bootstrap-lean_b: bootstrap-lean_a boot_stage_b
-+bootstrap-lean_c: bootstrap-lean_b boot_stage_c
-+bootstrap-lean_d: bootstrap-lean_c boot_stage_d
-+bootstrap-lean_e: bootstrap-lean_d boot_clean_stage1
-+bootstrap-lean_f: bootstrap-lean_e boot_stage_e
-+bootstrap-lean: force bootstrap-lean_f
-+
-+bootstrap2_c: boot_stage_c
-+bootstrap2_d: bootstrap2_c boot_stage_d
-+bootstrap2_e: bootstrap2_d boot_stage_e
-+bootstrap2: force bootstrap2_e
-+
-+bootstrap2-lean_c: boot_stage_c
-+bootstrap2-lean_d: bootstrap2-lean_c boot_stage_d
-+bootstrap2-lean_e: bootstrap2-lean_d boot_clean_stage1
-+bootstrap2-lean_f: bootstrap2-lean_e boot_stage_e
-+bootstrap2-lean: force bootstrap2-lean_f
-+
-+bootstrap3 bootstrap3-lean: force boot_stage_e
-+
-+# Only bootstrap4 uses stage f.
-+bootstrap4 bootstrap4-lean: force boot_stage_f
-
--bootstrap4 bootstrap4-lean: force
-- $(MAKE) CC="stage3/xgcc$(exeext) -Bstage3/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage3/ LANGUAGES="$(LANGUAGES)"
-
- # Compare the object files in the current directory with those in the
- # stage2 directory.
+++ /dev/null
-# DP: On Sparc, message forwarding in the GNUstep framework
-# DP: (gstep-base) relies on this patch. I didn't experience any side
-# DP: effects of this "workaround" on a sparc Solaris platform. However
-# DP: this workaround affects the all compilers of the egcs package.
-
-From: Richard Henderson <rth@dot.cygnus.com>
-To: Matthias.Klose@cs.tu-berlin.de, scottc@net-community.com
-Subject: Re: patch for expand_builtin_apply for sparc architecture
-Date: Mon, 16 Feb 1998 05:11:32 -0800
-
-In article <199802160833.JAA11275.cygnus.egcs.bugs@gargleblaster.cs.tu-berlin.de>,
-Matthias Klose <Matthias.Klose@cs.tu-berlin.de> wrote:
->The following patch fixes the generation of an 'unimp 4095'
->instruction for the expansion of __builtin_apply on the sparc
->architecture; fix by Scott Christley (<scottc@net-community.com>), but
->doesn't seem to be submitted to the the egcs list.
-
-You'll have to submit a test case and an explanation of why you think
-this is correct. The Sparc32 ABI calls for an unimp instruction to
-be emitted following calls to functions that return structures. The
-0-4095 immediate is commentary, but that's all the room in that field
-so we cannot simply remove the mask.
-
-My guess is that it is yet another example of why __builtin_apply
-is inadequate for the needs of all but completely stack-based calling
-conventions and should not be used.
-
-
-r~
-
-diff -c gcc/config/sparc/sparc.md~ gcc/config/sparc/sparc.md
-*** gcc/config/sparc/sparc.md~ Mon Nov 16 12:31:32 1998
---- gcc/config/sparc/sparc.md Mon Nov 16 12:35:56 1998
-***************
-*** 7294,7299 ****
---- 7294,7300 ----
- Why cannot we have delay slots filled if it were a CALL? */
-
- if (! TARGET_ARCH64 && INTVAL (operands[3]) != 0)
-+ #if 0
- emit_jump_insn
- (gen_rtx_PARALLEL (VOIDmode,
- gen_rtvec (3,
-***************
-*** 7302,7307 ****
---- 7303,7318 ----
- GEN_INT (INTVAL (operands[3]) & 0xfff),
- gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_REG (Pmode, 15)))));
-+ #else
-+ emit_jump_insn
-+ (gen_rtx_PARALLEL (VOIDmode,
-+ gen_rtvec (3,
-+ gen_rtx_SET (VOIDmode, pc_rtx,
-+ XEXP (operands[0], 0)),
-+ operands[3],
-+ gen_rtx_CLOBBER (VOIDmode,
-+ gen_rtx_REG (Pmode, 15)))));
-+ #endif
- else
- emit_jump_insn
- (gen_rtx_PARALLEL (VOIDmode,
+++ /dev/null
-# DP: Handle DOS newlines after backslashes.
-# DP: Patch from http://www.cygnus.com/ml/egcs/1999-Jan/0784.html
-
---- gcc/cccp.c.orig Thu Jun 24 15:11:40 1999
-+++ gcc/cccp.c Mon Aug 9 12:21:55 1999
-@@ -1023,7 +1023,8 @@
- retrying if necessary. If MAX_READ_LEN is defined, read at most
- that bytes at a time. Return a negative value if an error occurs,
- otherwise return the actual number of bytes read,
-- which must be LEN unless end-of-file was reached. */
-+ which may be < LEN if CRs have been skipped, though we try not to do
-+ that. */
-
- static int
- safe_read (desc, ptr, len)
-@@ -1032,6 +1033,7 @@
- int len;
- {
- int left, rcount, nchars;
-+ char *rptr;
-
- left = len;
- while (left > 0) {
-@@ -1051,8 +1053,20 @@
- }
- if (nchars == 0)
- break;
-- ptr += nchars;
-+
-+ /* CRLF pairs, found with Unix when processing DOS files,
-+ throw off backslash-newline removal.
-+ Therefore, CRs are thrown away here. */
- left -= nchars;
-+ rptr = ptr;
-+ while(nchars--)
-+ {
-+ if(*rptr == '\r' && *(rptr+1) == '\n')
-+ left++;
-+ else
-+ *ptr++ = *rptr;
-+ rptr++;
-+ }
- }
- return len - left;
- }
-@@ -2085,8 +2099,8 @@
- for (;;) {
- cnt = safe_read (f, (char *) fp->buf + size, bsize - size);
- if (cnt < 0) goto perror; /* error! */
-+ if (cnt == 0) break; /* End of file */
- size += cnt;
-- if (size != bsize) break; /* End of file */
- bsize *= 2;
- fp->buf = (U_CHAR *) xrealloc (fp->buf, bsize + 2);
- }
-@@ -5024,6 +5038,8 @@
- map_list_ptr->map_list_map = ptr;
-
- while ((ch = getc (f)) != '\n')
-+ if (ch == '\r')
-+ continue;
- if (ch == EOF)
- break;
- }
-@@ -5256,9 +5272,9 @@
- i = safe_read (f, (char *) fp->buf + st_size, bsize - st_size);
- if (i < 0)
- goto nope; /* error! */
-- st_size += i;
-- if (st_size != bsize)
-+ if (i == 0)
- break; /* End of file */
-+ st_size += i;
- bsize *= 2;
- fp->buf = (U_CHAR *) xrealloc (fp->buf, bsize + 2);
- }
+++ /dev/null
-# DP: cpp.texi: add a node documenting macro varargs.
-
-Sat Aug 7 14:56:50 1999 Matthias Klose <doko@cs.tu-berlin.de>
-
- * cpp.texi: cpp.texi: add a node documenting macro varargs (copied
- from extend.texi.
-
---- gcc/cpp.texi~ Wed May 19 13:22:57 1999
-+++ gcc/cpp.texi Sat Aug 7 14:53:42 1999
-@@ -542,6 +542,7 @@
- * Simple Macros:: Macros that always expand the same way.
- * Argument Macros:: Macros that accept arguments that are substituted
- into the macro expansion.
-+* Macro Varargs:: Macros with variable number of arguments.
- * Predefined:: Predefined macros that are always available.
- * Stringification:: Macro arguments converted into string constants.
- * Concatenation:: Building tokens from parts taken from macro arguments.
-@@ -645,7 +646,7 @@
- that the result of its expansion is checked for more macro names.
- @xref{Cascaded Macros}.
-
--@node Argument Macros, Predefined, Simple Macros, Macros
-+@node Argument Macros, Macro Varargs, Simple Macros, Macros
- @subsection Macros with Arguments
- @cindex macros with argument
- @cindex arguments in macro definitions
-@@ -799,7 +800,68 @@
- the left parenthesis; it's the @emph{definition} where it matters whether
- there is a space.
-
--@node Predefined, Stringification, Argument Macros, Macros
-+@node Macro Varargs, Predefined, Argument Macros, Macros
-+@subsection Macros with Variable Numbers of Arguments
-+@cindex variable number of arguments
-+@cindex macro with variable arguments
-+@cindex rest argument (in macro)
-+
-+In GNU C, a macro can accept a variable number of arguments, much as a
-+function can. The syntax for defining the macro looks much like that
-+used for a function. Here is an example:
-+
-+@example
-+#define eprintf(format, args...) \
-+ fprintf (stderr, format , ## args)
-+@end example
-+
-+Here @code{args} is a @dfn{rest argument}: it takes in zero or more
-+arguments, as many as the call contains. All of them plus the commas
-+between them form the value of @code{args}, which is substituted into
-+the macro body where @code{args} is used. Thus, we have this expansion:
-+
-+@example
-+eprintf ("%s:%d: ", input_file_name, line_number)
-+@expansion{}
-+fprintf (stderr, "%s:%d: " , input_file_name, line_number)
-+@end example
-+
-+@noindent
-+Note that the comma after the string constant comes from the definition
-+of @code{eprintf}, whereas the last comma comes from the value of
-+@code{args}.
-+
-+The reason for using @samp{##} is to handle the case when @code{args}
-+matches no arguments at all. In this case, @code{args} has an empty
-+value. In this case, the second comma in the definition becomes an
-+embarrassment: if it got through to the expansion of the macro, we would
-+get something like this:
-+
-+@example
-+fprintf (stderr, "success!\n" , )
-+@end example
-+
-+@noindent
-+which is invalid C syntax. @samp{##} gets rid of the comma, so we get
-+the following instead:
-+
-+@example
-+fprintf (stderr, "success!\n")
-+@end example
-+
-+This is a special feature of the GNU C preprocessor: @samp{##} before a
-+rest argument that is empty discards the preceding sequence of
-+non-whitespace characters from the macro definition. (If another macro
-+argument precedes, none of it is discarded.)
-+
-+It might be better to discard the last preprocessor token instead of the
-+last preceding sequence of non-whitespace characters; in fact, we may
-+someday change this feature to do so. We advise you to write the macro
-+definition so that the preceding sequence of non-whitespace characters
-+is just a single token, so that the meaning will not change if we change
-+the definition of this feature.
-+
-+@node Predefined, Stringification, Macro Varargs, Macros
- @subsection Predefined Macros
-
- @cindex predefined macros
+++ /dev/null
-diff -urN gcc-2.95.3.org/gcc/config/i386/linux.h gcc-2.95.3/gcc/config/i386/linux.h
---- gcc-2.95.3.org/gcc/config/i386/linux.h Mon Mar 19 19:35:22 2001
-+++ gcc-2.95.3/gcc/config/i386/linux.h Mon Mar 19 19:36:46 2001
-@@ -234,3 +234,21 @@
- } \
- } while (0)
- #endif
-+
-+#if defined(__PIC__) && defined (USE_GNULIBC_1)
-+/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr,
-+ __environ and atexit (). We have to make sure they are in the .dynsym
-+ section. We accomplish it by making a dummy call here. This
-+ code is never reached. */
-+
-+#define CRT_END_INIT_DUMMY \
-+ do \
-+ { \
-+ extern void *___brk_addr; \
-+ extern char **__environ; \
-+ \
-+ ___brk_addr = __environ; \
-+ atexit (0); \
-+ } \
-+ while (0)
-+#endif
-diff -urN gcc-2.95.3.org/gcc/crtstuff.c gcc-2.95.3/gcc/crtstuff.c
---- gcc-2.95.3.org/gcc/crtstuff.c Mon Mar 19 19:35:22 2001
-+++ gcc-2.95.3/gcc/crtstuff.c Mon Mar 19 19:37:56 2001
-@@ -379,20 +379,8 @@
- FORCE_INIT_SECTION_ALIGN;
- #endif
- asm (TEXT_SECTION_ASM_OP);
--
--/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr,
-- __environ and atexit (). We have to make sure they are in the .dynsym
-- section. We accomplish it by making a dummy call here. This
-- code is never reached. */
--
--#if defined(__linux__) && defined(__PIC__) && defined(__i386__)
-- {
-- extern void *___brk_addr;
-- extern char **__environ;
--
-- ___brk_addr = __environ;
-- atexit ();
-- }
-+#ifdef CRT_END_INIT_DUMMY
-+ CRT_END_INIT_DUMMY;
- #endif
- }
-
+++ /dev/null
-# DP: set the default architecture to i386; even if gcc is configured
-# DP: with i386-linux, it builds with Pentium instructions, tuned for i386.
-
-From: Joel Klecker <jk@espy.org>
-To: Matthias Klose <doko@cs.tu-berlin.de>
-Subject: Re: gcc: forwarded message from Markus F.X.J. Oberhumer
-Date: Wed, 11 Aug 1999 08:48:54 -0700
-
-Found it, and fixed it.
-
---- gcc/config/i386/i386.c~ Sat Aug 14 19:35:24 1999
-+++ gcc/config/i386/i386.c Sat Aug 14 19:37:00 1999
-@@ -291,7 +291,7 @@
-
- if (ix86_arch_string == 0)
- {
-- ix86_arch_string = PROCESSOR_PENTIUM_STRING;
-+ ix86_arch_string = PROCESSOR_DEFAULT_STRING;
- if (ix86_cpu_string == 0)
- ix86_cpu_string = PROCESSOR_DEFAULT_STRING;
- }
-@@ -308,7 +308,7 @@
- if (i == ptt_size)
- {
- error ("bad value (%s) for -march= switch", ix86_arch_string);
-- ix86_arch_string = PROCESSOR_PENTIUM_STRING;
-+ ix86_arch_string = PROCESSOR_DEFAULT_STRING;
- ix86_arch = PROCESSOR_DEFAULT;
- }
-
+++ /dev/null
-diff -urN gcc-20010319.org/gcc/configure.in gcc-20010319/gcc/configure.in
---- gcc-20010319.org/gcc/configure.in Thu Mar 22 20:30:21 2001
-+++ gcc-20010319/gcc/configure.in Thu Mar 22 20:32:01 2001
-@@ -329,6 +329,7 @@
- ;;
- esac
- ], [enable_shared=yes])
-+enable_shared=no
- AC_SUBST(enable_shared)
-
- # Determine the host, build, and target systems
+++ /dev/null
-diff -urN gcc-3.2.2.org/gcc/ggc-page.c gcc-3.2.2/gcc/ggc-page.c
---- gcc-3.2.2.org/gcc/ggc-page.c Tue Feb 18 14:27:56 2003
-+++ gcc-3.2.2/gcc/ggc-page.c Tue Feb 18 14:28:16 2003
-@@ -346,9 +346,9 @@
- one) before collection is performed. */
- #define GGC_MIN_EXPAND_FOR_GC (1.3)
-
--/* Bound `allocated_last_gc' to 4MB, to prevent the memory expansion
-+/* Bound `allocated_last_gc' to 16MB, to prevent the memory expansion
- test from triggering too often when the heap is small. */
--#define GGC_MIN_LAST_ALLOCATED (4 * 1024 * 1024)
-+#define GGC_MIN_LAST_ALLOCATED (16 * 1024 * 1024)
-
- /* Allocate pages in chunks of this size, to throttle calls to memory
- allocation routines. The first page is used, the rest go onto the
+++ /dev/null
-#! /bin/sh -e
-
-if [ $# -eq 3 -a "$2" = '-d' ]; then
- pdir="-d $3"
-elif [ $# -ne 1 ]; then
- echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
- exit 1
-fi
-case "$1" in
- -patch) patch $pdir -f --no-backup-if-mismatch -p0 -l < $0;;
- -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 -l < $0;;
- *)
- echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
- exit 1
-esac
-exit 0
-
-Patch: gcj -vs- iconv
-
-To: Gcc Patch List <gcc-patches at gcc dot gnu dot org>
-Subject: Patch: gcj -vs- iconv
-From: Tom Tromey <tromey at cygnus dot com>
-Date: 06 Mar 2000 14:39:01 -0700
-Reply-To: tromey at cygnus dot com
-
-# DP: This patch changes gcj to use iconv(), when available, to read Java
-# DP: source files. It adds a new `--encoding' option that lets the user
-# DP: choose what encoding to use. For systems without iconv(), gcj still
-# DP: assumes that the input is UTF-8, but it no longer ignores encoding
-# DP: errors.
-# DP:
-# DP: This patch does have one minor problem, which is that if --encoding is
-# DP: not specified we default to UTF-8 instead of the encoding the user has
-# DP: chosen (as part of his locale). I don't know how to find that
-# DP: information. Anyway, that is an addition which shouldn't affect
-# DP: whether or not this patch goes in, since this patch doesn't make the
-# DP: situation any worse than it is right now.
-
-Alex, I'm not sure I really understand how the parser context stack
-works, so it is possible that some of my changes there are wrong.
-Could you look at it? Is this ok to check in?
-# DP:
-# DP: This fixes PR gcj/33; I can now compile a Latin-1 encoded file on my
-# DP: PPC Linux box with `gcj --encoding=Latin1 ...'.
-
-2000-03-06 Tom Tromey <tromey@cygnus.com>
-
- Fix for PR gcj/33:
- * jv-scan.c (help): Document --encoding.
- (options): Added `encoding' entry.
- (OPT_ENCODING): New define.
- (main): Handle --encoding.
- * lang-options.h: Document --classpath, --CLASSPATH, --main, and
- --encoding.
- * jcf-parse.c (parse_source_file): Correctly call java_init_lex.
- Added `finput' argument.
- * java-tree.h (current_encoding): Declare.
- * parse.y (java_parser_context_restore_global): Don't restore
- `finput'.
- (java_parser_context_save_global): Don't set `finput' field.
- (java_pop_parser_context): Don't restore `finput'. Free old lexer
- if required.
- * lang.c (current_encoding): New global.
- (lang_decode_option): Recognize `-fencoding='.
- (finish_parse): Don't close finput.
- * parse.h (struct parser_ctxt): Removed `finput' and
- `unget_utf8_value' fields. Added `lexer' field.
- (java_init_lex): Fixed declaration.
- * lex.c (java_new_lexer): New function.
- (java_destroy_lexer): Likewise.
- (java_read_char): Added `lex' argument. Handle iconv case.
- (java_read_unicode): Added `lex' argument. Count backslashes in
- lexer structure.
- (java_init_lex): Added `finput' and `encoding' arguments. Set
- `lexer' field in ctxp.
- (BAD_UTF8_VALUE): Removed.
- * lex.h: Include <iconv.h> if HAVE_ICONV defined.
- (java_lexer): New structure.
- (UNGETC): Removed.
- (GETC): Removed.
- (DEFAULT_ENCODING): New define.
- (java_destroy_lexer): Declare.
-
-Tom
-
---- gcc/java/java-tree.h.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/java-tree.h Sat Apr 8 23:03:56 2000
-@@ -141,6 +141,9 @@
- extern int flag_not_overriding;
- extern int flag_static_local_jdk1_1;
-
-+/* Encoding used for source files. */
-+extern char *current_encoding;
-+
- /* The Java .class file that provides main_class; the main input file. */
- extern struct JCF *current_jcf;
-
---- gcc/java/jcf-parse.c.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/jcf-parse.c Sat Apr 8 23:05:39 2000
-@@ -84,7 +84,7 @@
- static tree give_name_to_class PROTO ((JCF *jcf, int index));
- static void parse_zip_file_entries PROTO ((void));
- static void process_zip_dir PROTO ((void));
--static void parse_source_file PROTO ((tree));
-+static void parse_source_file PARAMS ((tree, FILE *));
- static void jcf_parse_source PROTO ((void));
- static int jcf_figure_file_type PROTO ((JCF *));
- static int find_in_current_zip PROTO ((char *, struct JCF **));
-@@ -570,6 +570,7 @@
- jcf_parse_source ()
- {
- tree file;
-+ FILE *finput;
-
- java_parser_context_save_global ();
- java_push_parser_context ();
-@@ -580,7 +581,7 @@
- if (!(finput = fopen (input_filename, "r")))
- fatal ("input file `%s' just disappeared - jcf_parse_source",
- input_filename);
-- parse_source_file (file);
-+ parse_source_file (file, finput);
- if (fclose (finput))
- fatal ("can't close input file `%s' stream - jcf_parse_source",
- input_filename);
-@@ -741,8 +742,9 @@
- /* Parse a source file, as pointed by the current value of INPUT_FILENAME. */
-
- static void
--parse_source_file (file)
-+parse_source_file (file, finput)
- tree file;
-+ FILE *finput;
- {
- int save_error_count = java_error_count;
- /* Mark the file as parsed */
-@@ -750,7 +752,9 @@
-
- lang_init_source (1); /* Error msgs have no method prototypes */
-
-- java_init_lex (); /* Initialize the parser */
-+ /* Initialize the parser */
-+ java_init_lex (finput,
-+ current_encoding ? current_encoding : DEFAULT_ENCODING);
- java_parse_abort_on_error ();
-
- java_parse (); /* Parse and build partial tree nodes. */
-@@ -778,6 +782,7 @@
- int several_files = 0;
- char *list = strdup (input_filename), *next;
- tree node, current_file_list = NULL_TREE;
-+ FILE *finput;
-
- do
- {
-@@ -888,7 +893,7 @@
- case JCF_SOURCE:
- java_push_parser_context ();
- java_parser_context_save_global ();
-- parse_source_file (name);
-+ parse_source_file (name, finput);
- java_parser_context_restore_global ();
- java_pop_parser_context (1);
- break;
---- gcc/java/jv-scan.c.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/jv-scan.c Sat Apr 8 23:11:41 2000
-@@ -53,6 +53,7 @@
- {
- int i = 1;
- char *output_file = NULL;
-+ char *encoding = NULL;
- long ft;
-
- exec_name = argv[0];
-@@ -73,6 +74,14 @@
- argv [i] = NULL;
- }
-
-+ /* file encoding */
-+ else if (!strcmp (argv [i], "--encoding") && i+1 < argc)
-+ {
-+ argv [i] = NULL;
-+ encoding = argv [++i];
-+ argv [i] = NULL;
-+ }
-+
- /* Print the name of the class that contains main */
- else if (!strcmp (argv [i], "--print-main"))
- flag_find_main = 1;
-@@ -116,7 +125,7 @@
- input_filename = argv [i];
- if ( (finput = fopen (argv [i], "r")) )
- {
-- java_init_lex ();
-+ java_init_lex (finput, encoding ? encoding : DEFAULT_ENCODING);
- yyparse ();
- if (ftell (out) != ft)
- fputc ('\n', out);
---- gcc/java/lang-options.h.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/lang-options.h Sat Apr 8 23:03:56 2000
-@@ -39,8 +39,10 @@
- { "-M", "Print dependencies to stdout" },
- { "-MM", "Print dependencies to stdout" },
- #endif /* ! USE_CPPLIB */
-- { "-fclasspath", "Set class path and suppress system path" },
-- { "-fCLASSPATH", "Set class path" },
-+ { "--classpath", "Set class path and suppress system path" },
-+ { "--CLASSPATH", "Set class path" },
-+ { "--main", "Choose class whose main method should be used" },
-+ { "--encoding", "Choose input encoding (default is UTF-8)" },
- { "-I", "Add directory to class path" },
- { "-foutput-class-dir", "Directory where class files should be written" },
- { "-Wredundant-modifiers",
---- gcc/java/lang.c.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/lang.c Sat Apr 8 23:03:56 2000
-@@ -105,6 +105,9 @@
- /* When non zero, warns that final local are treated as non final. */
- int flag_static_local_jdk1_1 = 0;
-
-+/* The encoding of the source file. */
-+char *current_encoding = NULL;
-+
- /* From gcc/flags.h, and indicates if exceptions are turned on or not. */
-
- extern int flag_new_exceptions;
-@@ -172,6 +175,13 @@
- return 1;
- }
- #undef ARG
-+#define ARG "-fencoding="
-+ if (strncmp (p, ARG, sizeof (ARG) - 1) == 0)
-+ {
-+ current_encoding = p + sizeof (ARG) - 1;
-+ return 1;
-+ }
-+#undef ARG
-
- if (p[0] == '-' && p[1] == 'f')
- {
-@@ -252,7 +262,9 @@
- return 0;
- }
-
-+/* Global open file. */
- FILE *finput;
-+
- char *
- init_parse (filename)
- char *filename;
-@@ -313,7 +326,6 @@
- void
- finish_parse ()
- {
-- fclose (finput);
- jcf_dependency_write ();
- }
-
---- gcc/java/lex.c.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/lex.c Sat Apr 8 23:14:41 2000
-@@ -24,15 +24,15 @@
- The Free Software Foundation is independent of Sun Microsystems, Inc. */
-
- /* It defines java_lex (yylex) that reads a Java ASCII source file
--possibly containing Unicode escape sequence or utf8 encoded characters
--and returns a token for everything found but comments, white spaces
--and line terminators. When necessary, it also fills the java_lval
--(yylval) union. It's implemented to be called by a re-entrant parser
--generated by Bison.
--
--The lexical analysis conforms to the Java grammar described in "The
--Java(TM) Language Specification. J. Gosling, B. Joy, G. Steele.
--Addison Wesley 1996" (http://java.sun.com/docs/books/jls/html/3.doc.html) */
-+ possibly containing Unicode escape sequence or utf8 encoded
-+ characters and returns a token for everything found but comments,
-+ white spaces and line terminators. When necessary, it also fills
-+ the java_lval (yylval) union. It's implemented to be called by a
-+ re-entrant parser generated by Bison.
-+
-+ The lexical analysis conforms to the Java grammar described in "The
-+ Java(TM) Language Specification. J. Gosling, B. Joy, G. Steele.
-+ Addison Wesley 1996" (http://java.sun.com/docs/books/jls/html/3.doc.html) */
-
- #include "keyword.h"
-
-@@ -55,15 +55,18 @@
- static int java_parse_doc_section PROTO ((unicode_t));
- static void java_parse_end_comment PROTO ((unicode_t));
- static unicode_t java_get_unicode PROTO (());
--static unicode_t java_read_unicode PROTO ((int, int *));
--static void java_store_unicode PROTO ((struct java_line *, unicode_t, int));
--static unicode_t java_read_char PROTO (());
-+static unicode_t java_read_unicode PARAMS ((java_lexer *, int, int *));
-+static void java_store_unicode PARAMS ((struct java_line *, unicode_t, int));
-+static unicode_t java_read_char PARAMS ((java_lexer *));
- static void java_allocate_new_line PROTO (());
- static void java_unget_unicode PROTO (());
- static unicode_t java_sneak_unicode PROTO (());
-+java_lexer *java_new_lexer PARAMS ((FILE *, const char *));
-
- void
--java_init_lex ()
-+java_init_lex (finput, encoding)
-+ FILE *finput;
-+ const char *encoding;
- {
- #ifndef JC1_LITE
- int java_lang_imported = 0;
-@@ -108,9 +111,9 @@
- ctxp->lineno = lineno = 0;
- ctxp->p_line = NULL;
- ctxp->c_line = NULL;
-- ctxp->unget_utf8_value = 0;
- ctxp->minus_seen = 0;
- ctxp->java_error_flag = 0;
-+ ctxp->lexer = java_new_lexer (finput, encoding);
- }
-
- static char *
-@@ -188,22 +191,142 @@
- ctxp->c_line->white_space_only = 1;
- }
-
--#define BAD_UTF8_VALUE 0xFFFE
-+/* Create a new lexer object. */
-+java_lexer *
-+java_new_lexer (finput, encoding)
-+ FILE *finput;
-+ const char *encoding;
-+{
-+ java_lexer *lex = (java_lexer *) xmalloc (sizeof (java_lexer));
-+ int enc_error = 0;
-+
-+ lex->finput = finput;
-+ lex->bs_count = 0;
-+ lex->unget_value = 0;
-+
-+#ifdef HAVE_ICONV
-+ lex->handle = iconv_open ("UCS-2", encoding);
-+ if (lex->handle == (iconv_t) -1)
-+ {
-+ /* FIXME: we should give a nice error based on errno here. */
-+ enc_error = 1;
-+ }
-+ lex->first = -1;
-+ lex->last = -1;
-+#else /* HAVE_ICONV */
-+ if (strcmp (encoding, DEFAULT_ENCODING))
-+ enc_error = 1;
-+#endif /* HAVE_ICONV */
-+
-+ if (enc_error)
-+ fatal ("unknown encoding: `%s'", encoding);
-+
-+ return lex;
-+}
-+
-+void
-+java_destroy_lexer (lex)
-+ java_lexer *lex;
-+{
-+ fclose (lex->finput);
-+#ifdef HAVE_ICONV
-+ iconv_close (lex->handle);
-+#endif
-+ free (lex);
-+}
-
- static unicode_t
--java_read_char ()
-+java_read_char (lex)
-+ java_lexer *lex;
- {
-- int c;
-- int c1, c2;
-+ if (lex->unget_value)
-+ {
-+ unicode_t r = lex->unget_value;
-+ lex->unget_value = 0;
-+ return r;
-+ }
-+
-+#ifdef HAVE_ICONV
-+ {
-+ char out[2];
-+ size_t ir, inbytesleft, in_save, out_count;
-+ char *inp, *outp;
-
-- if (ctxp->unget_utf8_value)
-+ while (1)
- {
-- int to_return = ctxp->unget_utf8_value;
-- ctxp->unget_utf8_value = 0;
-- return (to_return);
-+ /* See if we need to read more data. If FIRST == 0 then the
-+ previous conversion attempt ended in the middle of a
-+ character at the end of the buffer. Otherwise we only have
-+ to read if the buffer is empty. */
-+ if (lex->first == 0 || lex->first >= lex->last)
-+ {
-+ int r;
-+
-+ if (lex->first >= lex->last)
-+ {
-+ lex->first = 0;
-+ lex->last = 0;
-+ }
-+ if (feof (lex->finput))
-+ return UEOF;
-+ r = fread (&lex->buffer[lex->last], 1,
-+ sizeof (lex->buffer) - lex->last,
-+ lex->finput);
-+ lex->last += r;
- }
-
-- c = GETC ();
-+ inbytesleft = lex->last - lex->first;
-+
-+ if (inbytesleft == 0)
-+ {
-+ /* We've tried to read and there is nothing left. */
-+ return UEOF;
-+ }
-+
-+ in_save = inbytesleft;
-+ out_count = 2;
-+ inp = &lex->buffer[lex->first];
-+ outp = out;
-+ ir = iconv (lex->handle, (const char **) &inp, &inbytesleft,
-+ &outp, &out_count);
-+ lex->first += in_save - inbytesleft;
-+
-+ if (out_count == 0)
-+ {
-+ /* Success. We assume that UCS-2 is big-endian. This
-+ appears to be an ok assumption. */
-+ unicode_t result;
-+ result = (((unsigned char) out[0]) << 8) | (unsigned char) out[1];
-+ return result;
-+ }
-+
-+ if (ir == (size_t) -1)
-+ {
-+ if (errno == EINVAL)
-+ {
-+ /* This is ok. This means that the end of our buffer
-+ is in the middle of a character sequence. We just
-+ move the valid part of the buffer to the beginning
-+ to force a read. */
-+ /* We use bcopy() because it should work for
-+ overlapping strings. Use memmove() instead... */
-+ bcopy (&lex->buffer[lex->first], &lex->buffer[0],
-+ lex->last - lex->first);
-+ lex->last -= lex->first;
-+ lex->first = 0;
-+ }
-+ else
-+ {
-+ /* A more serious error. */
-+ java_lex_error ("unrecognized character in input stream", 0);
-+ }
-+ }
-+ }
-+ }
-+#else /* HAVE_ICONV */
-+ {
-+ int c, c1, c2;
-+ c = getc (lex->finput);
-
- if (c < 128)
- return (unicode_t)c;
-@@ -213,17 +336,17 @@
- {
- if ((c & 0xe0) == 0xc0)
- {
-- c1 = GETC ();
-+ c1 = getc (lex->finput);
- if ((c1 & 0xc0) == 0x80)
- return (unicode_t)(((c &0x1f) << 6) + (c1 & 0x3f));
- c = c1;
- }
- else if ((c & 0xf0) == 0xe0)
- {
-- c1 = GETC ();
-+ c1 = getc (lex->finput);
- if ((c1 & 0xc0) == 0x80)
- {
-- c2 = GETC ();
-+ c2 = getc (lex->finput);
- if ((c2 & 0xc0) == 0x80)
- return (unicode_t)(((c & 0xf) << 12) +
- (( c1 & 0x3f) << 6) + (c2 & 0x3f));
-@@ -233,14 +356,15 @@
- else
- c = c1;
- }
-- /* We looked for a UTF8 multi-byte sequence (since we saw an initial
-- byte with the high bit set), but found invalid bytes instead.
-- If the most recent byte was Ascii (and not EOF), we should
-- unget it, in case it was a comment terminator or other delimitor. */
-- if ((c & 0x80) == 0)
-- UNGETC (c);
-- return BAD_UTF8_VALUE;
-+
-+ /* We simply don't support invalid characters. */
-+ java_lex_error ("malformed UTF-8 character", 0);
-+ }
- }
-+#endif /* HAVE_ICONV */
-+
-+ /* We only get here on error. */
-+ return UEOF;
- }
-
- static void
-@@ -261,56 +385,54 @@
- }
-
- static unicode_t
--java_read_unicode (term_context, unicode_escape_p)
-+java_read_unicode (lex, term_context, unicode_escape_p)
-+ java_lexer *lex;
- int term_context;
- int *unicode_escape_p;
- {
- unicode_t c;
-- long i, base;
-
-- c = java_read_char ();
-+ c = java_read_char (lex);
- *unicode_escape_p = 0;
-
- if (c != '\\')
-- return ((term_context ? c :
-- java_lineterminator (c) ? '\n' : (unicode_t)c));
--
-- /* Count the number of preceeding '\' */
-- for (base = ftell (finput), i = base-2; c == '\\';)
- {
-- fseek (finput, i--, SEEK_SET);
-- c = java_read_char (); /* Will fail if reading utf8 stream. FIXME */
-+ lex->bs_count = 0;
-+ return (term_context ? c : (java_lineterminator (c)
-+ ? '\n'
-+ : (unicode_t) c));
- }
-- fseek (finput, base, SEEK_SET);
-- if ((base-i-3)%2 == 0) /* If odd number of \ seen */
-+
-+ ++lex->bs_count;
-+ if ((lex->bs_count) % 2 == 1)
- {
-- c = java_read_char ();
-+ /* Odd number of \ seen. */
-+ c = java_read_char (lex);
- if (c == 'u')
- {
-- unsigned short unicode = 0;
-+ unicode_t unicode = 0;
- int shift = 12;
- /* Next should be 4 hex digits, otherwise it's an error.
- The hex value is converted into the unicode, pushed into
- the Unicode stream. */
- for (shift = 12; shift >= 0; shift -= 4)
- {
-- if ((c = java_read_char ()) == UEOF)
-+ if ((c = java_read_char (lex)) == UEOF)
- return UEOF;
- if (c >= '0' && c <= '9')
- unicode |= (unicode_t)((c-'0') << shift);
- else if ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
- unicode |= (unicode_t)((10+(c | 0x20)-'a') << shift);
- else
-- java_lex_error
-- ("Non hex digit in Unicode escape sequence", 0);
-+ java_lex_error ("Non hex digit in Unicode escape sequence", 0);
- }
- *unicode_escape_p = 1;
-- return (term_context ? unicode :
-- (java_lineterminator (c) ? '\n' : unicode));
-+ return (term_context
-+ ? unicode : (java_lineterminator (c) ? '\n' : unicode));
- }
-- ctxp->unget_utf8_value = c;
-+ lex->unget_value = c;
- }
-- return (unicode_t)'\\';
-+ return (unicode_t) '\\';
- }
-
- static unicode_t
-@@ -325,7 +447,7 @@
- for (;;)
- {
- int unicode_escape_p;
-- c = java_read_unicode (0, &unicode_escape_p);
-+ c = java_read_unicode (ctxp->lexer, 0, &unicode_escape_p);
- java_store_unicode (ctxp->c_line, c, unicode_escape_p);
- if (ctxp->c_line->white_space_only
- && !JAVA_WHITE_SPACE_P (c) && c!='\n')
-@@ -346,7 +468,7 @@
- int unicode_escape_p;
- if (c == '\n') /* CR */
- {
-- if ((c = java_read_unicode (1, &unicode_escape_p)) != '\r')
-+ if ((c = java_read_unicode (ctxp->lexer, 1, &unicode_escape_p)) != '\r')
- {
- ctxp->c_line->ahead [0] = c;
- ctxp->c_line->unicode_escape_ahead_p = unicode_escape_p;
-@@ -355,7 +477,7 @@
- }
- else if (c == '\r') /* LF */
- {
-- if ((c = java_read_unicode (1, &unicode_escape_p)) != '\n')
-+ if ((c = java_read_unicode (ctxp->lexer, 1, &unicode_escape_p)) != '\n')
- {
- ctxp->c_line->ahead [0] = c;
- ctxp->c_line->unicode_escape_ahead_p = unicode_escape_p;
---- gcc/java/lex.h.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/lex.h Sat Apr 8 23:03:56 2000
-@@ -35,6 +35,13 @@
- /* A Unicode character, as read from the input file */
- typedef unsigned short unicode_t;
-
-+#ifdef HAVE_ICONV
-+#include <iconv.h>
-+#endif /* HAVE_ICONV */
-+
-+/* Default encoding to use if no encoding is specified. */
-+#define DEFAULT_ENCODING "UTF-8"
-+
- /* Debug macro to print-out what we match */
- #ifdef JAVA_LEX_DEBUG
- #ifdef JAVA_LEX_DEBUG_CHAR
-@@ -96,12 +103,38 @@
- int col;
- } java_lc;
-
-+typedef struct java_lexer
-+{
-+ /* The file from which we're reading. */
-+ FILE *finput;
-+
-+ /* Number of consecutive backslashes we've read. */
-+ int bs_count;
-+
-+ /* If nonzero, a value that was pushed back. */
-+ unicode_t unget_value;
-+
-+#ifdef HAVE_ICONV
-+ /* The handle for the iconv converter we're using. */
-+ iconv_t handle;
-+
-+ /* Bytes we've read from the file but have not sent to iconv. */
-+ char buffer[1024];
-+
-+ /* Index of first valid character in buffer, -1 if no valid
-+ characters. */
-+ int first;
-+
-+ /* Index of last valid character in buffer, plus one. -1 if no
-+ valid characters in buffer. */
-+ int last;
-+#endif /* HAVE_ICONV */
-+} java_lexer;
-
--#define JAVA_LINE_MAX 80
-+/* Destroy a lexer object. */
-+extern void java_destroy_lexer PARAMS ((java_lexer *));
-
--/* Macro to read and unread bytes */
--#define UNGETC(c) ungetc(c, finput)
--#define GETC() getc(finput)
-+#define JAVA_LINE_MAX 80
-
- /* Build a location compound integer */
- #define BUILD_LOCATION() ((ctxp->elc.line << 12) | (ctxp->elc.col & 0xfff))
---- gcc/java/parse.h.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/parse.h Sat Apr 8 23:15:36 2000
-@@ -586,12 +586,11 @@
- struct parser_ctxt {
-
- char *filename; /* Current filename */
-- FILE *finput; /* Current file input stream */
- struct parser_ctxt *next;
-
-+ java_lexer *lexer; /* Current lexer state */
- struct java_line *p_line, *c_line; /* Previous and current line */
- java_lc elc; /* Error's line column info */
-- unicode_t unget_utf8_value; /* An unget utf8 value */
- int ccb_indent; /* Keep track of {} indent, lexer */
- int first_ccb_indent1; /* First { at ident level 1 */
- int last_ccb_indent1; /* Last } at ident level 1 */
-@@ -668,7 +667,7 @@
- /* Always in use, no matter what you compile */
- void java_push_parser_context PROTO ((void));
- void java_pop_parser_context PROTO ((int));
--void java_init_lex PROTO ((void));
-+void java_init_lex PARAMS ((FILE *, const char *));
- extern void java_parser_context_save_global PROTO ((void));
- extern void java_parser_context_restore_global PROTO ((void));
- int yyparse PROTO ((void));
---- gcc/java/parse.y.orig Sat Apr 8 23:03:03 2000
-+++ gcc/java/parse.y Sat Apr 8 23:03:56 2000
-@@ -2347,7 +2347,6 @@
- java_push_parser_context ();
- extra_ctxp_pushed_p = 1;
- }
-- ctxp->finput = finput;
- ctxp->lineno = lineno;
- ctxp->current_class = current_class;
- ctxp->filename = input_filename;
-@@ -2357,7 +2356,6 @@
- void
- java_parser_context_restore_global ()
- {
-- finput = ctxp->finput;
- lineno = ctxp->lineno;
- current_class = ctxp->current_class;
- input_filename = ctxp->filename;
-@@ -2386,9 +2384,12 @@
- next->incomplete_class = ctxp->incomplete_class;
- next->gclass_list = ctxp->gclass_list;
- lineno = ctxp->lineno;
-- finput = ctxp->finput;
- current_class = ctxp->current_class;
- }
-+
-+ /* If the old and new lexers differ, then free the old one. */
-+ if (ctxp->lexer && next && ctxp->lexer != next->lexer)
-+ java_destroy_lexer (ctxp->lexer);
-
- /* Set the single import class file flag to 0 for the current list
- of imported things */
+++ /dev/null
-Changes for GCC version 2.95.1 for GNU Pascal 2.1
-
-Before applying these diffs, go to the directory gcc-2.95.1
-and use the command
-
- patch -p1
-
-feeding it the following diffs as input.
-
-*** gcc-2.95.1/gcc/expr.c.orig Thu Jul 1 00:59:55 1999
---- gcc-2.95.1/gcc/expr.c Sun Oct 24 14:01:38 1999
-*************** store_constructor (exp, target, cleared)
-*** 4430,4435 ****
---- 4430,4444 ----
-
- domain_min = convert (sizetype, TYPE_MIN_VALUE (domain));
- domain_max = convert (sizetype, TYPE_MAX_VALUE (domain));
-+
-+ #ifdef GPC
-+ /* Align the set. */
-+ if (set_alignment)
-+ domain_min = size_binop (MINUS_EXPR, domain_min,
-+ size_binop (TRUNC_MOD_EXPR, domain_min,
-+ size_int (set_alignment)));
-+ #endif /* GPC */
-+
- bitlength = size_binop (PLUS_EXPR,
- size_binop (MINUS_EXPR, domain_max, domain_min),
- size_one_node);
-*************** store_constructor (exp, target, cleared)
-*** 4444,4450 ****
---- 4453,4461 ----
- if (GET_MODE (target) != BLKmode || nbits <= 2 * BITS_PER_WORD
- || (nbytes <= 32 && TREE_CHAIN (elt) != NULL_TREE))
- {
-+ #ifndef GPC
- int set_word_size = TYPE_ALIGN (TREE_TYPE (exp));
-+ #endif /* not GPC */
- enum machine_mode mode = mode_for_size (set_word_size, MODE_INT, 1);
- char *bit_buffer = (char *) alloca (nbits);
- HOST_WIDE_INT word = 0;
-*************** store_constructor (exp, target, cleared)
-*** 4456,4462 ****
---- 4467,4477 ----
- {
- if (bit_buffer[ibit])
- {
-+ #ifdef GPC
-+ if (set_words_big_endian)
-+ #else /* not GPC */
- if (BYTES_BIG_ENDIAN)
-+ #endif /* not GPC */
- word |= (1 << (set_word_size - 1 - bit_pos));
- else
- word |= 1 << bit_pos;
-*************** store_constructor (exp, target, cleared)
-*** 4570,4575 ****
---- 4585,4596 ----
- else
- #endif
- {
-+ #ifdef GPC
-+ /* The language-specific run time library must provide
-+ a suitable `__setbits()' function whose action coincides
-+ with the values of `set_word_size', `set_alignment', and
-+ `set_words_big_endian'. */
-+ #endif /* GPC */
- emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__setbits"),
- 0, VOIDmode, 4, XEXP (targetx, 0), Pmode,
- bitlength_rtx, TYPE_MODE (sizetype),
-*** gcc-2.95.1/gcc/stor-layout.c.orig Thu Mar 11 14:56:20 1999
---- gcc-2.95.1/gcc/stor-layout.c Wed Oct 27 16:39:10 1999
-*************** int maximum_field_alignment;
-*** 53,58 ****
---- 53,69 ----
- May be overridden by front-ends. */
- int set_alignment = 0;
-
-+ #ifdef GPC
-+ /* The word size of a bitstring or (power-)set value, in bits.
-+ Must be non-zero.
-+ May be overridden by front-ends. */
-+ int set_word_size = BITS_PER_UNIT;
-+
-+ /* If non-zero, bits in (power-)sets start with the highest bit.
-+ May be overridden by front-ends. */
-+ int set_words_big_endian /*= BYTES_BIG_ENDIAN*/; /* @@@ Needn't be a constant! */
-+ #endif /* GPC */
-+
- static tree layout_record PROTO((tree));
- static void layout_union PROTO((tree));
- \f
-*************** static tree pending_sizes;
-*** 65,70 ****
---- 76,88 ----
-
- int immediate_size_expand;
-
-+ #ifdef GPC
-+ /* Nonzero means that the size of a type may vary
-+ within one function context. */
-+
-+ int size_volatile = 0;
-+ #endif /* GPC */
-+
- tree
- get_pending_sizes ()
- {
-*************** variable_size (size)
-*** 102,108 ****
---- 120,131 ----
- || global_bindings_p () < 0 || contains_placeholder_p (size))
- return size;
-
-+ #ifdef GPC
-+ if (! size_volatile)
-+ size = save_expr (size);
-+ #else /* not GPC */
- size = save_expr (size);
-+ #endif
-
- if (global_bindings_p ())
- {
-*************** variable_size (size)
-*** 119,125 ****
---- 142,152 ----
- Also, we would like to pass const0_rtx here, but don't have it. */
- expand_expr (size, expand_expr (integer_zero_node, NULL_PTR, VOIDmode, 0),
- VOIDmode, 0);
-+ #ifdef GPC
-+ else if (! size_volatile)
-+ #else /* not GPC */
- else
-+ #endif
- pending_sizes = tree_cons (NULL_TREE, size, pending_sizes);
-
- return size;
-*************** layout_type (type)
-*** 1040,1045 ****
---- 1067,1086 ----
- abort();
- else
- {
-+ #ifdef GPC
-+ int alignment = set_alignment ? set_alignment : set_word_size;
-+ int lower_bound = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type)));
-+ int upper_bound = TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
-+ int size_in_bits, rounded_size;
-+ if (set_alignment)
-+ size_in_bits = upper_bound - (lower_bound / alignment) * alignment + 1;
-+ else
-+ size_in_bits
-+ = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
-+ - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1);
-+ rounded_size
-+ = ((size_in_bits + alignment - 1) / alignment) * alignment;
-+ #else /* not GPC */
- #ifndef SET_WORD_SIZE
- #define SET_WORD_SIZE BITS_PER_WORD
- #endif
-*************** layout_type (type)
-*** 1049,1054 ****
---- 1090,1096 ----
- - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1);
- int rounded_size
- = ((size_in_bits + alignment - 1) / alignment) * alignment;
-+ #endif /* not GPC */
- if (rounded_size > alignment)
- TYPE_MODE (type) = BLKmode;
- else
-*** gcc-2.95.1/gcc/tree.c.orig Wed Sep 29 19:41:05 1999
---- gcc-2.95.1/gcc/tree.c Tue Oct 19 00:04:25 1999
-*************** get_set_constructor_bits (init, buffer,
-*** 4986,4991 ****
---- 4986,4998 ----
- HOST_WIDE_INT domain_min
- = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))));
- tree non_const_bits = NULL_TREE;
-+
-+ #ifdef GPC
-+ /* Align the set. */
-+ if (set_alignment)
-+ domain_min -= domain_min % set_alignment;
-+ #endif /* GPC */
-+
- for (i = 0; i < bit_size; i++)
- buffer[i] = 0;
-
-*************** get_set_constructor_bytes (init, buffer,
-*** 5038,5045 ****
---- 5045,5056 ----
- int wd_size;
- {
- int i;
-+ #ifdef GPC
-+ int bit_size = wd_size * BITS_PER_UNIT;
-+ #else /* not GPC */
- int set_word_size = BITS_PER_UNIT;
- int bit_size = wd_size * set_word_size;
-+ #endif /* not GPC */
- int bit_pos = 0;
- unsigned char *bytep = buffer;
- char *bit_buffer = (char *) alloca(bit_size);
-*************** get_set_constructor_bytes (init, buffer,
-*** 5050,5055 ****
---- 5061,5084 ----
-
- for (i = 0; i < bit_size; i++)
- {
-+ #ifdef GPC
-+ if (bit_buffer[i])
-+ {
-+ int k = bit_pos / BITS_PER_UNIT;
-+ if (WORDS_BIG_ENDIAN)
-+ k = set_word_size / BITS_PER_UNIT - 1 - k;
-+ if (set_words_big_endian)
-+ bytep[k] |= (1 << (BITS_PER_UNIT - 1 - bit_pos % BITS_PER_UNIT));
-+ else
-+ bytep[k] |= 1 << (bit_pos % BITS_PER_UNIT);
-+ }
-+ bit_pos++;
-+ if (bit_pos >= set_word_size)
-+ {
-+ bit_pos = 0;
-+ bytep += set_word_size / BITS_PER_UNIT;
-+ }
-+ #else /* not GPC */
- if (bit_buffer[i])
- {
- if (BYTES_BIG_ENDIAN)
-*************** get_set_constructor_bytes (init, buffer,
-*** 5060,5065 ****
---- 5089,5095 ----
- bit_pos++;
- if (bit_pos >= set_word_size)
- bit_pos = 0, bytep++;
-+ #endif /* not GPC */
- }
- return non_const_bits;
- }
-*** gcc-2.95.1/gcc/tree.h.orig Mon Oct 18 12:19:46 1999
---- gcc-2.95.1/gcc/tree.h Mon Oct 18 12:36:04 1999
-*************** extern int maximum_field_alignment;
-*** 1630,1635 ****
---- 1630,1643 ----
- /* If non-zero, the alignment of a bitstring or (power-)set value, in bits. */
- extern int set_alignment;
-
-+ #ifdef GPC
-+ /* The word size of a bitstring or (power-)set value, in bits. */
-+ extern int set_word_size;
-+
-+ /* If non-zero, bits in (power-)sets start with the highest bit. */
-+ extern int set_words_big_endian;
-+ #endif /* GPC */
-+
- /* Concatenate two lists (chains of TREE_LIST nodes) X and Y
- by making the last node in X point to Y.
- Returns X, except if X is 0 returns Y. */
-*** gcc-2.95.1/gcc/tree.def.orig Mon May 17 09:21:12 1999
---- gcc-2.95.1/gcc/tree.def Tue Oct 26 04:16:43 1999
-*************** DEFTREECODE (WITH_CLEANUP_EXPR, "with_cl
-*** 490,528 ****
- DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", 'e', 1)
-
- /* The following two codes are used in languages that have types where
-! the position and/or sizes of fields vary from object to object of the
-! same type, i.e., where some other field in the object contains a value
-! that is used in the computation of another field's offset or size.
-!
-! For example, a record type with a discriminant in Ada is such a type.
-! This mechanism is also used to create "fat pointers" for unconstrained
-! array types in Ada; the fat pointer is a structure one of whose fields is
-! a pointer to the actual array type and the other field is a pointer to a
-! template, which is a structure containing the bounds of the array. The
-! bounds in the type pointed to by the first field in the fat pointer refer
-! to the values in the template.
-!
-! These "self-references" are doing using a PLACEHOLDER_EXPR. This is a
-! node that will later be replaced with the object being referenced. Its type
-! is that of the object and selects which object to use from a chain of
-! references (see below).
-!
-! When we wish to evaluate a size or offset, we check it is contains a
-! placeholder. If it does, we construct a WITH_RECORD_EXPR that contains
-! both the expression we wish to evaluate and an expression within which the
-! object may be found. The latter expression is the object itself in
-! the simple case of an Ada record with discriminant, but it can be the
-! array in the case of an unconstrained array.
-!
-! In the latter case, we need the fat pointer, because the bounds of the
-! array can only be accessed from it. However, we rely here on the fact that
-! the expression for the array contains the dereference of the fat pointer
-! that obtained the array pointer.
-
- Accordingly, when looking for the object to substitute in place of
- a PLACEHOLDER_EXPR, we look down the first operand of the expression
-! passed as the second operand to WITH_RECORD_EXPR until we find something
-! of the desired type or reach a constant. */
-
- /* Denotes a record to later be supplied with a WITH_RECORD_EXPR when
- evaluating this expression. The type of this expression is used to
---- 490,547 ----
- DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", 'e', 1)
-
- /* The following two codes are used in languages that have types where
-! some field in an object of the type contains a value that is used in
-! the computation of another field's offset or size and/or the size of
-! the type. The positions and/or sizes of fields can vary from object
-! to object of the same type or even for one and the same object within
-! its scope.
-!
-! Record types with discriminants in Ada or schema types in Pascal are
-! examples of such types. This mechanism is also used to create "fat
-! pointers" for unconstrained array types in Ada; the fat pointer is a
-! structure one of whose fields is a pointer to the actual array type
-! and the other field is a pointer to a template, which is a structure
-! containing the bounds of the array. The bounds in the type pointed
-! to by the first field in the fat pointer refer to the values in the
-! template.
-!
-! When you wish to construct such a type you need "self-references"
-! that allow you to reference the object having this type from the
-! TYPE node, i.e. without having a variable instantiating this type.
-!
-! Such a "self-references" is done using a PLACEHOLDER_EXPR. This is
-! a node that will later be replaced with the object being referenced.
-! Its type is that of the object and selects which object to use from
-! a chain of references (see below). No other slots are used in the
-! PLACEHOLDER_EXPR.
-!
-! For example, if your type FOO is a RECORD_TYPE with a field BAR,
-! and you need the value of <variable>.BAR to calculate TYPE_SIZE
-! (FOO), just substitute <variable> above with a PLACEHOLDER_EXPR
-! whose TREE_TYPE is FOO. Then construct your COMPONENT_REF with
-! the PLACEHOLDER_EXPR as the first operand (which has the correct
-! type). Later, when the size is needed in the program, the back-end
-! will find this PLACEHOLDER_EXPR and generate code to calculate the
-! actual size at run-time. In the following, we describe how this
-! calculation is done.
-!
-! When we wish to evaluate a size or offset, we check whether it
-! contains a PLACEHOLDER_EXPR. If it does, we construct a
-! WITH_RECORD_EXPR that contains both the expression we wish to
-! evaluate and an expression within which the object may be found.
-! The latter expression is the object itself in the simple case of an
-! Ada record with discriminant, but it can be the array in the case of
-! an unconstrained array.
-!
-! In the latter case, we need the fat pointer, because the bounds of
-! the array can only be accessed from it. However, we rely here on the
-! fact that the expression for the array contains the dereference of
-! the fat pointer that obtained the array pointer.
-
- Accordingly, when looking for the object to substitute in place of
- a PLACEHOLDER_EXPR, we look down the first operand of the expression
-! passed as the second operand to WITH_RECORD_EXPR until we find
-! something of the desired type or reach a constant. */
-
- /* Denotes a record to later be supplied with a WITH_RECORD_EXPR when
- evaluating this expression. The type of this expression is used to
+++ /dev/null
-#! /bin/sh -e
-
-# DP: Find header file for Boehm garbage collector.
-
-if [ $# -eq 3 -a "$2" = '-d' ]; then
- pdir="-d $3"
-elif [ $# -ne 1 ]; then
- echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
- exit 1
-fi
-case "$1" in
- -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;;
- -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;;
- *)
- echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
- exit 1
-esac
-exit 0
-
-*** libobjc/Makefile.in~ Tue Nov 10 15:25:36 1998
---- libobjc/Makefile.in Tue Nov 10 13:16:08 1998
-***************
-*** 65,71 ****
- -I$(srcdir)/$(MULTISRCTOP)../gcc/config -I$(MULTIBUILDTOP)../../gcc \
- -I$(srcdir)/$(MULTISRCTOP)../include
-
-! OBJC_GCFLAGS=-DOBJC_WITH_GC=1
- OBJC_THREAD_FILE=thr-@OBJC_THREAD_FILE@
-
- .SUFFIXES:
---- 65,71 ----
- -I$(srcdir)/$(MULTISRCTOP)../gcc/config -I$(MULTIBUILDTOP)../../gcc \
- -I$(srcdir)/$(MULTISRCTOP)../include
-
-! OBJC_GCFLAGS=-I/usr/include/gc -DOBJC_WITH_GC=1
- OBJC_THREAD_FILE=thr-@OBJC_THREAD_FILE@
-
- .SUFFIXES:
+++ /dev/null
-/*
-From: Richard Kettlewell <rjk@sfere.greenend.org.uk>
-To: submit@bugs.debian.org
-Subject: Bug#46550: basic_string<wchar_t> can't be instantiated
-Date: Sun, 3 Oct 1999 22:49:50 +0100
-
-Package: libstdc++2.9-dev
-Version: 2.91.60-5
-
-Hi,
-
-This ought to work, but it doesn't:
-
-------------------------------------------------------------------------
-lyonesse$ cat t.cc
-*/
-
-#include <string>
-
-template basic_string<wchar_t>;
-
-/*
-lyonesse$ c++ -c t.cc
-/usr/include/g++-2/std/bastring.h: In method `const __wchar_t * basic_string<__wchar_t,string_char_traits<__wchar_t>,__default_alloc_template<true,0> >::c_str<__wchar_t, string_char_traits<__wchar_t>, alloc>() const':
-t.cc:3: instantiated from here
-/usr/include/g++-2/std/bastring.h:301: return to `const __wchar_t *' from `char *'
-lyonesse$
-------------------------------------------------------------------------
-
-# DP: Here is a patch to /usr/include/g++-2/std/bastring.h which makes it
-# DP: work for me (though note that I have not tested the c_str() method as
-# DP: such):
-
-------------------------------------------------------------------------
---- libstdc++/std/bastring.h.orig Sun Oct 3 22:32:06 1999
-+++ libstdc++/std/bastring.h Sun Oct 3 22:36:17 1999
-@@ -332,7 +332,8 @@
-
- public:
- const charT* c_str () const
-- { if (length () == 0) return ""; terminate (); return data (); }
-+ { const charT* null_str = "";
-+ if (length () == 0) return null_str; terminate (); return data (); }
- void resize (size_type n, charT c);
- void resize (size_type n)
- { resize (n, eos ()); }
+++ /dev/null
-# DP: Throw exception instead of aborting when out of memory
-
-From: inaky@peloncho.fis.ucm.es
-To: submit@bugs.debian.org
-Subject: Bug#42622: libstdc++2.10-dev: stl_alloc.h: malloc_alloc out of memory handling abort()s instead of using exceptions
-Date: Sat, 7 Aug 1999 04:31:58 +0200
-
-Package: libstdc++2.10-dev
-Version: 1:2.95-2
-Severity: important
-
- Hi
-
- While coding some proof-of-concepts I've come around using a
-vector<> of a big lot of elements. Wanted to push the limits and try
-to recover possible failures. No way. The program was aborting on the
-library's own.
-
- That should not do. You want exceptions to be able to dictate
-how the program should behave on error situations. The thing is at
-stl_alloc.h, instead of throwing an exception on OOM, it was printing
-the message "out of memory" to stderr and aborting. It is also
-prepared for doing it via exceptions, so I think it should be the
-default way.
-
- I think that behaviour should be made extensible to the whole
-libstdc++ library, as as far as I know, exception support in GCC is
-mature enough as to handle it [and I hope so :)]. That's the only way
-to fully control a program's flow. Libraries should not dictate what
-to do on error [I'm sure I'm not telling you anything new].
-
- The changes to make stl_alloc work ok with exceptions are:
-
---- libstdc++/stl/stl_alloc.h~ Fri May 7 12:13:28 1999
-+++ libstdc++/stl/stl_alloc.h Sat Aug 7 04:16:22 1999
-@@ -38,7 +38,7 @@
- // The allocation primitives are intended to allocate individual objects,
- // not larger arenas as with the original STL allocators.
-
--#if 0
-+#ifdef __STL_USE_EXCEPTIONS
- # include <new>
- # define __THROW_BAD_ALLOC throw bad_alloc()
- #elif !defined(__THROW_BAD_ALLOC)
-
- Thanks, anyway, for such nice packages for GCC & Co.
-
- Your happy Debian user,
-
--- System Information
-Debian Release: potato
-Kernel Version: Linux jovian 2.2.7 #1 mar ago 3 02:24:40 CEST 1999 i586 unknown
-
-Versions of the packages libstdc++2.10-dev depends on:
-ii g++ 2.95-2 The GNU C++ compiler.
-ii libc6-dev 2.1.2-0pre4 GNU C Library: Development libraries and hea
-ii libstdc++2.10 2.95-2 The GNU stdc++ library
+++ /dev/null
-# DP: enable definition of wstring type, if __ENABLE_WSTRING is defined.
-
---- libstdc++/string~ Sat Feb 20 13:21:49 1999
-+++ libstdc++/string Sun Dec 5 16:35:27 1999
-@@ -7,7 +7,9 @@
-
- extern "C++" {
- typedef basic_string <char> string;
--// typedef basic_string <wchar_t> wstring;
-+#ifdef __ENABLE_WSTRING
-+typedef basic_string <wchar_t> wstring;
-+#endif
- } // extern "C++"
-
- #endif
+++ /dev/null
-diff -ur gcc-2.95.1.orig/libstdc++/config/linux.ml gcc-2.95.1/libstdc++/config/linux.ml
---- gcc-2.95.1.orig/libstdc++/config/linux.ml Sun Aug 30 23:18:46 1998
-+++ gcc-2.95.1/libstdc++/config/linux.ml Thu Aug 19 20:13:06 1999
-@@ -1,10 +1,5 @@
- # Elf with shared libm, so we can link it into the shared libstdc++.
-
--ARLIB = libstdc++-$(LIBSTDCXX_INTERFACE)$(LIBC_INTERFACE)$(CXX_INTERFACE)-$(VERSION).a
--MARLINK = libstdc++$(LIBC_INTERFACE)$(CXX_INTERFACE).a.$(LIBSTDCXX_INTERFACE)
--SHLIB = libstdc++-$(LIBSTDCXX_INTERFACE)$(LIBC_INTERFACE)$(CXX_INTERFACE)-$(VERSION).so
--MSHLINK = libstdc++$(LIBC_INTERFACE)$(CXX_INTERFACE).so.$(LIBSTDCXX_INTERFACE)
--
- LIBS = $(ARLIB) marlink $(ARLINK) $(SHLIB) mshlink $(SHLINK)
- SHFLAGS = -Wl,-soname,$(MSHLINK)
- SHDEPS = -lm
-diff -ur gcc-2.95.1.orig/libstdc++/configure.in gcc-2.95.1/libstdc++/configure.in
---- gcc-2.95.1.orig/libstdc++/configure.in Tue Jun 8 01:28:10 1999
-+++ gcc-2.95.1/libstdc++/configure.in Thu Aug 19 20:15:53 1999
-@@ -193,7 +193,7 @@
- if test x${enable_version_specific_runtime_libs} = xyes; then
- gxx_include_dir='${libsubdir}/include/g++'
- else
-- gxx_include_dir='${prefix}/include/g++'-${libstdcxx_interface}
-+ gxx_include_dir='${prefix}/include/g++'
- fi
- fi
-
---- gcc-2.95.1/libstdc++/Makefile.in~ Thu Aug 5 10:00:40 1999
-+++ gcc-2.95.1/libstdc++/Makefile.in Fri Aug 20 15:22:06 1999
-@@ -30,8 +30,8 @@
- memory numeric pthread_alloc queue rope set slist stack utility \
- vector fstream iomanip iostream strstream iosfwd bitset valarray
-
--ARLIB = libstdc++.a.$(VERSION)
--ARLINK = libstdc++.a
-+ARLIB = libstdc++.a
-+ARLINK = libstdc++.a.$(VERSION)
- MARLINK = libstdc++.a.`echo $(VERSION) | sed 's/\([0-9]*[.][0-9]*\).*/\1/'`
- SHLIB = libstdc++.so.$(VERSION)
- SHARLIB = libstdc++-sh.a
+++ /dev/null
-# DP: Two patches by Andreas Schwab to fix -fpic and loop optimization.
-# DP: Another patch by Andreas Schwab to fix %a5 restauration in some cases.
-
-------------------------------------------------------------------------------
---- gcc/config/m68k/m68k.c~ Mon Aug 2 06:51:08 1999
-+++ gcc/config/m68k/m68k.c Fri Oct 22 11:47:09 1999
-@@ -356,7 +356,7 @@
- mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM));
- num_saved_regs--;
- }
-- if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
-+ if (flag_pic && current_function_uses_pic_offset_table)
- {
- mask |= 1 << (15 - PIC_OFFSET_TABLE_REGNUM);
- num_saved_regs++;
-@@ -493,7 +493,10 @@
- for (regno = 0 ; regno < FIRST_PSEUDO_REGISTER ; regno++)
- if (regs_ever_live[regno] && ! call_used_regs[regno])
- return 0;
--
-+
-+ if (flag_pic && current_function_uses_pic_offset_table)
-+ return 0;
-+
- return 1;
- }
-
-@@ -568,7 +571,7 @@
- nregs++;
- mask |= 1 << regno;
- }
-- if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
-+ if (flag_pic && current_function_uses_pic_offset_table)
- {
- nregs++;
- mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
-@@ -1334,8 +1337,6 @@
- gen_rtx_PLUS (Pmode,
- pic_offset_table_rtx, orig));
- current_function_uses_pic_offset_table = 1;
-- if (reload_in_progress)
-- regs_ever_live[PIC_OFFSET_TABLE_REGNUM] = 1;
- RTX_UNCHANGING_P (pic_ref) = 1;
- emit_move_insn (reg, pic_ref);
- return reg;
---- gcc/loop.c~ Fri Jun 25 06:38:11 1999
-+++ gcc/loop.c Fri Oct 22 11:45:16 1999
-@@ -4046,11 +4046,11 @@
- in-between when biv_toal_increment returns nonzero both times
- but we test it here in case some day some real cfg analysis
- gets used to set always_computable. */
-- && ((loop_insn_first_p (bl2->biv->insn, bl->biv->insn)
-- && no_labels_between_p (bl2->biv->insn, bl->biv->insn))
-- || (! reg_used_between_p (bl->biv->src_reg, bl->biv->insn,
-- bl2->biv->insn)
-- && no_jumps_between_p (bl->biv->insn, bl2->biv->insn)))
-+ && (loop_insn_first_p (bl2->biv->insn, bl->biv->insn)
-+ ? no_labels_between_p (bl2->biv->insn, bl->biv->insn)
-+ : (! reg_used_between_p (bl->biv->src_reg, bl->biv->insn,
-+ bl2->biv->insn)
-+ && no_jumps_between_p (bl->biv->insn, bl2->biv->insn)))
- && validate_change (bl->biv->insn,
- &SET_SRC (single_set (bl->biv->insn)),
- copy_rtx (src), 0))
+++ /dev/null
-# DP: Document exit codes.
-
-Wed Oct 20 22:55:23 1999 Matthias Klose <doko@debian.org>
-
- * gcc.1: Document exit codes.
-
---- gcc/gcc.1.orig Thu Oct 21 12:52:54 1999
-+++ gcc/gcc.1 Thu Oct 21 12:53:15 1999
-@@ -4141,6 +4141,11 @@
- if available, else
- .B /tmp\c
- \&).
-+.SH "EXIT STATUS"
-+Normally the exit status is 0, if compilation or link edit are successful,
-+and nonzero else. The option
-+.B -Werror
-+treats each warning as an error.
- .SH "SEE ALSO"
- cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
- .br
+++ /dev/null
-2002-08-17 H.J. Lu <hjl@gnu.org>
-
- * calls.c (PUSH_ARGS_REVERSED): Define only if not defined.
- * expr.c (PUSH_ARGS_REVERSED): Likewise.
-
-2002-07-26 H.J. Lu <hjl@gnu.org>
-
- * config/i386/i386.h (PUSH_ARGS_REVERSED): Set to 1.
-
---- gcc/calls.c.var Thu Apr 4 15:28:47 2002
-+++ gcc/calls.c Sat Aug 17 22:45:46 2002
-@@ -46,9 +46,11 @@ Software Foundation, 59 Temple Place - S
-
- #ifdef PUSH_ROUNDING
-
-+#ifndef PUSH_ARGS_REVERSED
- #if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
- #define PUSH_ARGS_REVERSED PUSH_ARGS
- #endif
-+#endif
-
- #endif
-
---- gcc/config/i386/i386.h.var Sun Jul 14 23:54:36 2002
-+++ gcc/config/i386/i386.h Sat Aug 17 19:03:21 2002
-@@ -1581,6 +1581,10 @@ enum reg_class
-
- #define PUSH_ARGS (TARGET_PUSH_ARGS && !ACCUMULATE_OUTGOING_ARGS)
-
-+/* We want the stack and args grow in opposite directions, even if
-+ PUSH_ARGS is 0. */
-+#define PUSH_ARGS_REVERSED 1
-+
- /* Offset of first parameter from the argument pointer register value. */
- #define FIRST_PARM_OFFSET(FNDECL) 0
-
---- gcc/expr.c.var Mon May 6 22:43:11 2002
-+++ gcc/expr.c Sat Aug 17 22:52:27 2002
-@@ -54,9 +54,11 @@ Software Foundation, 59 Temple Place - S
-
- #ifdef PUSH_ROUNDING
-
-+#ifndef PUSH_ARGS_REVERSED
- #if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
- #define PUSH_ARGS_REVERSED /* If it's last to first. */
- #endif
-+#endif
-
- #endif
-
-2002-08-18 H.J. Lu <hjl@gnu.org>
-
- * calls.c (store_one_arg): Remove ATTRIBUTE_UNUSED on
- variable_size. Mark any slots used for the argument as in-use
- only if we can't pass all arguments to a library call in
- registers.
-
---- gcc/calls.c.copy Sun Aug 18 07:35:11 2002
-+++ gcc/calls.c Sun Aug 18 08:27:29 2002
-@@ -4270,7 +4270,7 @@ store_one_arg (arg, argblock, flags, var
- struct arg_data *arg;
- rtx argblock;
- int flags;
-- int variable_size ATTRIBUTE_UNUSED;
-+ int variable_size;
- int reg_parm_stack_space;
- {
- tree pval = arg->tree_value;
-@@ -4345,14 +4345,22 @@ store_one_arg (arg, argblock, flags, var
- emit_move_insn (arg->save_area, stack_area);
- }
- }
-+
-+ /* Now that we have saved any slots that will be overwritten
-+ by this store, mark all slots this store will use. We
-+ must do this before we actually expand the argument since
-+ the expansion itself may trigger library calls which might
-+ need to use the same stack slot. We only do it if we can't
-+ pass all arguments to a library call in registers. */
-+ if (arg->partial)
-+ {
-+ for (i = lower_bound; i < upper_bound; i++)
-+ stack_usage_map[i] = 1;
-+
-+ /* Set it so that we don't do it again. */
-+ variable_size = 1;
-+ }
- }
-- /* Now that we have saved any slots that will be overwritten by this
-- store, mark all slots this store will use. We must do this before
-- we actually expand the argument since the expansion itself may
-- trigger library calls which might need to use the same stack slot. */
-- if (argblock && ! variable_size && arg->stack)
-- for (i = lower_bound; i < upper_bound; i++)
-- stack_usage_map[i] = 1;
- }
-
- /* If this isn't going to be placed on both the stack and in registers,
-@@ -4579,6 +4587,11 @@ store_one_arg (arg, argblock, flags, var
- arg->value = arg->stack_slot;
- }
-
-+ if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL)
-+ && argblock && ! variable_size && arg->stack)
-+ for (i = lower_bound; i < upper_bound; i++)
-+ stack_usage_map[i] = 1;
-+
- /* Once we have pushed something, pops can't safely
- be deferred during the rest of the arguments. */
- NO_DEFER_POP;
+++ /dev/null
-diff -urN gcc-2.95.3.test1.org/gcc/Makefile.in gcc-2.95.3.test1/gcc/Makefile.in
---- gcc-2.95.3.test1.org/gcc/Makefile.in Wed Jan 3 20:34:29 2001
-+++ gcc-2.95.3.test1/gcc/Makefile.in Wed Jan 3 20:37:33 2001
-@@ -368,6 +368,9 @@
- # libgcc1-test target (must also be overridable for a target)
- LIBGCC1_TEST = libgcc1-test
-
-+# The libgcc symbol versioning map.
-+LIBGCC_MAP=
-+
- # List of extra executables that should be compiled for this target machine
- # that are used for compiling from source code to object code.
- # The rules for compiling them should be in the t-* file for the machine.
-@@ -838,14 +841,14 @@
- # Note that we can compile enquire using the cross-compiler just built,
- # although we can't run it on this machine.
- all.cross: native gcc-cross specs stmp-headers $(STMP_FIXPROTO) $(LIBGCC) \
-- $(LIBGCC1_TEST) $(EXTRA_PARTS) lang.all.cross doc
-+ $(LIBGCC_MAP) $(LIBGCC1_TEST) $(EXTRA_PARTS) lang.all.cross doc
- # This is what to compile if making gcc with a cross-compiler.
- all.build: native xgcc$(exeext) cpp$(exeext) $(EXTRA_PARTS) lang.all.build
- # This is what must be made before installing GCC and converting libraries.
- start.encap: native xgcc$(exeext) cpp$(exeext) specs $(LIBGCC1) \
- xlimits.h lang.start.encap
- # These can't be made until after GCC can run.
--rest.encap: stmp-headers $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
-+rest.encap: stmp-headers $(STMP_FIXPROTO) $(LIBGCC) $(LIBGCC_MAP) $(EXTRA_PARTS) lang.rest.encap
- # This is what is made with the host's compiler
- # whether making a cross compiler or not.
- native: config.status auto-host.h intl.all $(LANGUAGES) \
-@@ -860,7 +863,7 @@
-
- # On the target machine, finish building a cross compiler.
- # This does the things that can't be done on the host machine.
--rest.cross: $(LIBGCC) specs
-+rest.cross: $(LIBGCC) $(LIBGCC_MAP) specs
-
- # Verify that it works to compile and link libgcc1-test.
- # If it does, then there are sufficient replacements for libgcc1.a.
-@@ -2353,7 +2356,7 @@
- # Using unprotoize.c is not quite right in the first place,
- # but what better way is there?
- -rm -f libgcc.a libgcc1.a libgcc1-asm.a libgcc2.a libgcc2.ready
-- -rm -f libgcc1.null
-+ -rm -f libgcc1.null libgcc.map
- -rm -f *.dvi
- -rm -f */*.dvi
- -if [ -f md.pre-cpp ]; then \
-@@ -2526,6 +2529,12 @@
- $(INSTALL_DATA) specs $(libsubdir)/specs; \
- chmod a-x $(libsubdir)/specs; \
- fi
-+# Install libgcc.map if it exists.
-+ -if [ -n "$(LIBGCC_MAP)" -a -f libgcc.map ] ; then \
-+ rm -f $(libsubdir)/libgcc.map; \
-+ $(INSTALL_DATA) libgcc.map $(libsubdir)/libgcc.map; \
-+ chmod a-x $(libsubdir)/libgcc.map; \
-+ fi
- # Install protoize if it was compiled.
- -if [ -f protoize$(exeext) ]; \
- then \
-@@ -3032,7 +3041,10 @@
- do \
- if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi ; \
- done
-- -mv $(STAGESTUFF) stage1
-+ -for i in $(STAGESTUFF) ; \
-+ do \
-+ mv $$i stage1 ; \
-+ done
- -mv intl/*$(objext) stage1/intl
- # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
- # dir will work properly.
-@@ -3041,6 +3053,10 @@
- -if [ -f collect-ld$(exeext) ] ; then $(LN_S) ../collect-ld$(exeext) stage1 ; else true ; fi
- -rm -f stage1/libgcc.a
- -cp libgcc.a stage1
-+ -if [ -n "$(LIBGCC_MAP)" -a -f libgcc.map ] ; then \
-+ rm -f stage1/libgcc.map; \
-+ cp libgcc.map stage1; \
-+ fi
- -if $(RANLIB_TEST_FOR_TARGET) ; then \
- $(RANLIB_FOR_TARGET) stage1/libgcc.a; \
- else true; fi
-@@ -3056,7 +3072,10 @@
- do \
- if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi ; \
- done
-- -mv $(STAGESTUFF) stage2
-+ -for i in $(STAGESTUFF) ; \
-+ do \
-+ mv $$i stage2 ; \
-+ done
- -mv intl/*$(objext) stage2/intl
- # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
- # dir will work properly.
-@@ -3065,6 +3084,10 @@
- -if [ -f collect-ld ] ; then $(LN_S) ../collect-ld$(exeext) stage2 ; else true ; fi
- -rm -f stage2/libgcc.a
- -cp libgcc.a stage2
-+ -if [ -n "$(LIBGCC_MAP)" -a -f libgcc.map ] ; then \
-+ rm -f stage2/libgcc.map; \
-+ cp libgcc.map stage2; \
-+ fi
- -if $(RANLIB_TEST_FOR_TARGET) ; then \
- $(RANLIB_FOR_TARGET) stage2/libgcc.a; \
- else true; fi
-@@ -3080,7 +3103,10 @@
- do \
- if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi ; \
- done
-- -mv $(STAGESTUFF) stage3
-+ -for i in $(STAGESTUFF) ; \
-+ do \
-+ mv $$i stage3 ; \
-+ done
- -mv intl/*$(objext) stage3/intl
- # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
- # dir will work properly.
-@@ -3089,6 +3115,10 @@
- -if [ -f collect-ld$(exeext) ] ; then $(LN_S) ../collect-ld$(exeext) stage3 ; else true ; fi
- -rm -f stage3/libgcc.a
- -cp libgcc.a stage3
-+ -if [ -n "$(LIBGCC_MAP)" -a -f libgcc.map ] ; then \
-+ rm -f stage3/libgcc.map; \
-+ cp libgcc.map stage3; \
-+ fi
- -if $(RANLIB_TEST_FOR_TARGET) ; then \
- $(RANLIB_FOR_TARGET) stage3/libgcc.a; \
- else true; fi
-@@ -3104,7 +3134,10 @@
- do \
- if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi ; \
- done
-- -mv $(STAGESTUFF) stage4
-+ -for i in $(STAGESTUFF) ; \
-+ do \
-+ mv $$i stage4 ; \
-+ done
- -mv intl/*$(objext) stage4/intl
- # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
- # dir will work properly.
-@@ -3113,6 +3146,10 @@
- -if [ -f collect-ld$(exeext) ] ; then $(LN_S) ../collect-ld$(exeext) stage4 ; else true ; fi
- -rm -f stage4/libgcc.a
- -cp libgcc.a stage4
-+ -if [ -n "$(LIBGCC_MAP)" -a -f libgcc.map ] ; then \
-+ rm -f stage4/libgcc.map; \
-+ cp libgcc.map stage4; \
-+ fi
- -if $(RANLIB_TEST_FOR_TARGET) ; then \
- $(RANLIB_FOR_TARGET) stage4/libgcc.a; \
- else true; fi
-@@ -3196,3 +3233,9 @@
- echo "#endif" >> t-float.h-cross
- mv t-float.h-cross float.h-cross
-
-+# Rule to generate the libgcc symbol versioning map.
-+libgcc.map:
-+ echo "GCC.INTERNAL {" > $@
-+ echo " local:" >> $@
-+ $(EXTRACT_LIBGCC) >> $@
-+ echo "};" >> $@
-diff -urN gcc-2.95.3.test1.org/gcc/config/i386/i386.md gcc-2.95.3.test1/gcc/config/i386/i386.md
---- gcc-2.95.3.test1.org/gcc/config/i386/i386.md Wed Jan 3 20:34:36 2001
-+++ gcc-2.95.3.test1/gcc/config/i386/i386.md Wed Jan 3 20:35:21 2001
-@@ -1345,7 +1345,8 @@
- else if ((reload_in_progress | reload_completed) == 0
- && GET_CODE (operands[0]) != MEM
- && GET_CODE (operands[1]) == CONST_DOUBLE
-- && !standard_80387_constant_p (operands[1]))
-+ && ((flag_pic && flag_omit_frame_pointer)
-+ || ! standard_80387_constant_p (operands[1])))
- {
- operands[1] = validize_mem (force_const_mem (SFmode, operands[1]));
- }
-@@ -1473,7 +1474,8 @@
- else if ((reload_in_progress | reload_completed) == 0
- && GET_CODE (operands[0]) != MEM
- && GET_CODE (operands[1]) == CONST_DOUBLE
-- && !standard_80387_constant_p (operands[1]))
-+ && ((flag_pic && flag_omit_frame_pointer)
-+ || ! standard_80387_constant_p (operands[1])))
- {
- operands[1] = validize_mem (force_const_mem (DFmode, operands[1]));
- }
-@@ -1601,7 +1603,8 @@
- else if ((reload_in_progress | reload_completed) == 0
- && GET_CODE (operands[0]) != MEM
- && GET_CODE (operands[1]) == CONST_DOUBLE
-- && !standard_80387_constant_p (operands[1]))
-+ && ((flag_pic && flag_omit_frame_pointer)
-+ || ! standard_80387_constant_p (operands[1])))
- {
- operands[1] = validize_mem (force_const_mem (XFmode, operands[1]));
- }
-diff -urN gcc-2.95.3.test1.org/gcc/config/linux.h gcc-2.95.3.test1/gcc/config/linux.h
---- gcc-2.95.3.test1.org/gcc/config/linux.h Wed Jan 3 20:34:33 2001
-+++ gcc-2.95.3.test1/gcc/config/linux.h Wed Jan 3 20:35:22 2001
-@@ -103,7 +103,7 @@
- %{!profile:%{!ggdb:-lc} %{ggdb:-lg}}}"
- #else
- #define LIB_SPEC \
-- "%{shared: -lc} \
-+ "%{shared: -lc --version-script libgcc.map%s} \
- %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \
- %{profile:-lc_p} %{!profile: -lc}}"
- #endif
-diff -urN gcc-2.95.3.test1.org/gcc/config/t-linux gcc-2.95.3.test1/gcc/config/t-linux
---- gcc-2.95.3.test1.org/gcc/config/t-linux Wed Jan 3 20:34:33 2001
-+++ gcc-2.95.3.test1/gcc/config/t-linux Wed Jan 3 20:35:22 2001
-@@ -14,3 +14,17 @@
- LIBGCC1 =
- CROSS_LIBGCC1 =
- LIBGCC1_TEST =
-+
-+# Make glocal functions in libgcc.a local to the shared library with
-+# symbol versioning.
-+LIBGCC_MAP=libgcc.map
-+# This list has to be maintained manually. It should cover the libgcc
-+# functions, which can be safely made local to a shared library, on
-+# all Linux platforms.
-+LIBGCC_MAP_LIST=__ashldi3 __ashrdi3 __builtin_saveregs __clear_cache \
-+ __cmpdi2 __divdi3 __dummy __eprintf __ffsdi2 __fixdfdi __fixsfdi \
-+ __fixunsdfdi __fixunsdfsi __fixunssfdi __fixunssfsi __fixunsxfdi \
-+ __fixunsxfsi __fixxfdi __floatdidf __floatdisf __floatdixf \
-+ __gcc_bcmp __lshrdi3 __moddi3 __muldi3 __negdi2 __pure_virtual \
-+ __ucmpdi2 __udiv_w_sdiv __udivdi3 __udivmoddi4 __umoddi3
-+EXTRACT_LIBGCC=for s in $(LIBGCC_MAP_LIST); do echo " $$s;"; done
-diff -urN gcc-2.95.3.test1.org/gcc/f/Make-lang.in gcc-2.95.3.test1/gcc/f/Make-lang.in
---- gcc-2.95.3.test1.org/gcc/f/Make-lang.in Wed Jan 3 20:34:42 2001
-+++ gcc-2.95.3.test1/gcc/f/Make-lang.in Wed Jan 3 20:35:22 2001
-@@ -212,7 +212,7 @@
-
- f77.all.build: g77$(exeext)
- f77.all.cross: g77-cross$(exeext)
--f77.start.encap: g77$(exeext)
-+f77.start.encap: g77$(exeext) $(srcdir)/f/intdoc.texi
- f77.rest.encap:
-
- f77.info: f/g77.info
-diff -urN gcc-2.95.3.test1.org/libf2c/Makefile.in gcc-2.95.3.test1/libf2c/Makefile.in
---- gcc-2.95.3.test1.org/libf2c/Makefile.in Wed Jan 3 20:34:47 2001
-+++ gcc-2.95.3.test1/libf2c/Makefile.in Wed Jan 3 20:35:22 2001
-@@ -61,18 +61,18 @@
- # Quote this way so that it can be used to set shell variables too.
- # Currently no use for PICFLAG, RUNTESTFLAGS -- check usage.
- FLAGS_TO_PASS= \
-- CC='$(CC)' \
-- CFLAGS='$(CFLAGS)' \
-- CPPFLAGS='$(CPPFLAGS)' \
-- AR='$(AR)' \
-- RANLIB='$(RANLIB)' \
-- PICFLAG='$(PICFLAG)' \
-- RUNTESTFLAGS='$(RUNTESTFLAGS)' \
-- prefix='$(prefix)' \
-- exec_prefix='$(exec_prefix)' \
-- libdir='$(libdir)' \
-- libsubdir='$(libsubdir)' \
-- tooldir='$(tooldir)'
-+ "CC=$(CC)" \
-+ "CFLAGS=$(CFLAGS)" \
-+ "CPPFLAGS=$(CPPFLAGS)" \
-+ "AR=$(AR)" \
-+ "RANLIB=$(RANLIB)" \
-+ "PICFLAG=$(PICFLAG)" \
-+ "RUNTESTFLAGS=$(RUNTESTFLAGS)" \
-+ "prefix=$(prefix)" \
-+ "exec_prefix=$(exec_prefix)" \
-+ "libdir=$(libdir)" \
-+ "libsubdir=$(libsubdir)" \
-+ "tooldir=$(tooldir)"
-
- LIBG2C = libg2c.a
-
+++ /dev/null
-#! /bin/sh -e
-
-if [ $# -eq 3 -a "$2" = '-d' ]; then
- pdir="-d $3"
-elif [ $# -ne 1 ]; then
- echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
- exit 1
-fi
-case "$1" in
- -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;;
- -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;;
- *)
- echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
- exit 1
-esac
-exit 0
-
-# append the patch here and adjust the -p? flag in the patch calls.
-
-From: Jim Kingdon <kingdon@redhat.com>
-To: rth@cygnus.com
-CC: gcc-patches@gcc.gnu.org
-Subject: Re: patch to make -Wpointer-arith work with glibc 2.1.2pre3
-Date: Tue, 21 Sep 1999 15:50:20 -0400
-
-Richard Henderson writes:
-
-> This could all be tidied a bit by creating a couple of macros near
-> the beginning of c-parse.in to do the encoding and decoding. Also,
-> setting the type of `extension' means $<itype>1 can be written $1.
-
-Here you go (sorry for the delay, I plead hurricanes and other
-causes).
-
-Let me know if you still aren't happy :-).
-
-# DP: Wed Sep 1 09:12:02 1999 Jim Kingdon <http://developer.redhat.com>
-# DP:
-# DP: * c-parse.in: save and restore warn_pointer_arith on __extension__
-# DP: along with pedantic.
-# DP: (SAVE_WARN_FLAGS, RESTORE_WARN_FLAGS): Added.
-# DP: Set the type of extension to itype rather than $<itype>1 kludge.
-# DP: * extend.texi (Alternate Keywords): Adjust documentation.
-
-Index: c-parse.in
-===================================================================
-RCS file: /cvs/egcs/egcs/gcc/c-parse.in,v
-retrieving revision 1.23
-diff -u -r1.23 c-parse.in
---- gcc/c-parse.in 1999/09/07 05:47:29 1.23
-+++ gcc/c-parse.in 1999/09/21 19:05:43
-@@ -185,6 +185,8 @@
- %type <ttype> parmlist_or_identifiers parmlist_or_identifiers_1
- %type <ttype> identifiers_or_typenames
-
-+%type <itype> extension
-+
- %type <itype> setspecs
-
- %type <ends_in_label> lineno_stmt_or_label lineno_stmt_or_labels stmt_or_label
-@@ -227,6 +229,15 @@
- /* 1 if we explained undeclared var errors. */
- static int undeclared_variable_notice;
-
-+/* For __extension__, save/restore the warning flags which are
-+ controlled by __extension__. */
-+#define SAVE_WARN_FLAGS() (pedantic | (warn_pointer_arith << 1))
-+#define RESTORE_WARN_FLAGS(val) \
-+ do { \
-+ pedantic = val & 1; \
-+ warn_pointer_arith = (val >> 1) & 1; \
-+ } while (0)
-+
- ifobjc
- /* Objective-C specific information */
-
-@@ -297,7 +308,7 @@
- else
- error ("argument of `asm' is not a constant string"); }
- | extension extdef
-- { pedantic = $<itype>1; }
-+ { RESTORE_WARN_FLAGS ($1); }
- ;
-
- datadef:
-@@ -438,7 +449,7 @@
- /* __extension__ turns off -pedantic for following primary. */
- | extension cast_expr %prec UNARY
- { $$ = $2;
-- pedantic = $<itype>1; }
-+ RESTORE_WARN_FLAGS ($1); }
- | unop cast_expr %prec UNARY
- { $$ = build_unary_op ($1, $2, 0);
- overflow_warning ($$); }
-@@ -1002,7 +1013,7 @@
- | declmods ';'
- { pedwarn ("empty declaration"); }
- | extension decl
-- { pedantic = $<itype>1; }
-+ { RESTORE_WARN_FLAGS ($1); }
- ;
-
- /* Declspecs which contain at least one type specifier or typedef name.
-@@ -1607,7 +1618,7 @@
- { $$ = NULL_TREE; }
- | extension component_decl
- { $$ = $2;
-- pedantic = $<itype>1; }
-+ RESTORE_WARN_FLAGS ($1); }
- ;
-
- components:
-@@ -2441,8 +2452,9 @@
-
- extension:
- EXTENSION
-- { $<itype>$ = pedantic;
-- pedantic = 0; }
-+ { $$ = SAVE_WARN_FLAGS();
-+ pedantic = 0;
-+ warn_pointer_arith = 0; }
- ;
- \f
- ifobjc
+++ /dev/null
-diff -ur gcc-20020311/gcc/ada/targtyps.c gcc-20020311-/gcc/ada/targtyps.c
---- gcc-20020311/gcc/ada/targtyps.c Tue Oct 2 16:57:55 2001
-+++ gcc-20020311-/gcc/ada/targtyps.c Sat Mar 16 15:19:39 2002
-@@ -99,6 +99,8 @@
- #define WIDEST_HARDWARE_FP_SIZE LONG_DOUBLE_TYPE_SIZE
- #endif
-
-+static int rs6000_long_double_type_size = 64;
-+
- /* The following provide a functional interface for the front end Ada code
- to determine the sizes that are used for various C types. */
-
-Only in gcc-20020311-/gcc/ada: targtyps.c~
+++ /dev/null
-# DP: Add descriptions to rs6000.h and sysv4.h to quench warnings.
-# DP: by Franz Sirl
-
-Index: gcc/config/rs6000/rs6000.h
---- rs6000.h 1999/06/09 15:59:37 1.49.4.1
-+++ gcc/config/rs6000/rs6000.h 1999/06/12 18:55:36
-@@ -352,46 +352,81 @@ extern int target_flags;
- #endif
-
- #define TARGET_SWITCHES \
-- {{"power", MASK_POWER | MASK_MULTIPLE | MASK_STRING}, \
-+ {{"power", MASK_POWER | MASK_MULTIPLE | MASK_STRING, \
-+ "Use POWER instruction set"}, \
- {"power2", (MASK_POWER | MASK_MULTIPLE | MASK_STRING \
-- | MASK_POWER2)}, \
-- {"no-power2", - MASK_POWER2}, \
-+ | MASK_POWER2), \
-+ "Use POWER2 instruction set"}, \
-+ {"no-power2", - MASK_POWER2, \
-+ "Do not use POWER2 instruction set"}, \
- {"no-power", - (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE \
-- | MASK_STRING)}, \
-- {"powerpc", MASK_POWERPC}, \
-+ | MASK_STRING), \
-+ "Do not use POWER instruction set"}, \
-+ {"powerpc", MASK_POWERPC, \
-+ "Use PowerPC instruction set"}, \
- {"no-powerpc", - (MASK_POWERPC | MASK_PPC_GPOPT \
-- | MASK_PPC_GFXOPT | MASK_POWERPC64)}, \
-- {"powerpc-gpopt", MASK_POWERPC | MASK_PPC_GPOPT}, \
-- {"no-powerpc-gpopt", - MASK_PPC_GPOPT}, \
-- {"powerpc-gfxopt", MASK_POWERPC | MASK_PPC_GFXOPT}, \
-- {"no-powerpc-gfxopt", - MASK_PPC_GFXOPT}, \
-- {"powerpc64", MASK_POWERPC64}, \
-- {"no-powerpc64", - MASK_POWERPC64}, \
-- {"new-mnemonics", MASK_NEW_MNEMONICS}, \
-- {"old-mnemonics", -MASK_NEW_MNEMONICS}, \
-+ | MASK_PPC_GFXOPT | MASK_POWERPC64), \
-+ "Do not use PowerPC instruction set"}, \
-+ {"powerpc-gpopt", MASK_POWERPC | MASK_PPC_GPOPT, \
-+ "Use PowerPC General Purpose group optional instructions"},\
-+ {"no-powerpc-gpopt", - MASK_PPC_GPOPT, \
-+ "Don't use PowerPC General Purpose group optional instructions"},\
-+ {"powerpc-gfxopt", MASK_POWERPC | MASK_PPC_GFXOPT, \
-+ "Use PowerPC Graphics group optional instructions"},\
-+ {"no-powerpc-gfxopt", - MASK_PPC_GFXOPT, \
-+ "Don't use PowerPC Graphics group optional instructions"},\
-+ {"powerpc64", MASK_POWERPC64, \
-+ "Use PowerPC-64 instruction set"}, \
-+ {"no-powerpc64", - MASK_POWERPC64, \
-+ "Don't use PowerPC-64 instruction set"}, \
-+ {"new-mnemonics", MASK_NEW_MNEMONICS, \
-+ "Use new mnemonics for PowerPC architecture"}, \
-+ {"old-mnemonics", -MASK_NEW_MNEMONICS, \
-+ "Use old mnemonics for PowerPC architecture"}, \
- {"full-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC \
-- | MASK_MINIMAL_TOC)}, \
-- {"fp-in-toc", - MASK_NO_FP_IN_TOC}, \
-- {"no-fp-in-toc", MASK_NO_FP_IN_TOC}, \
-- {"sum-in-toc", - MASK_NO_SUM_IN_TOC}, \
-- {"no-sum-in-toc", MASK_NO_SUM_IN_TOC}, \
-- {"minimal-toc", MASK_MINIMAL_TOC}, \
-- {"minimal-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC)}, \
-- {"no-minimal-toc", - MASK_MINIMAL_TOC}, \
-- {"hard-float", - MASK_SOFT_FLOAT}, \
-- {"soft-float", MASK_SOFT_FLOAT}, \
-- {"multiple", MASK_MULTIPLE | MASK_MULTIPLE_SET}, \
-- {"no-multiple", - MASK_MULTIPLE}, \
-- {"no-multiple", MASK_MULTIPLE_SET}, \
-- {"string", MASK_STRING | MASK_STRING_SET}, \
-- {"no-string", - MASK_STRING}, \
-- {"no-string", MASK_STRING_SET}, \
-- {"update", - MASK_NO_UPDATE}, \
-- {"no-update", MASK_NO_UPDATE}, \
-- {"fused-madd", - MASK_NO_FUSED_MADD}, \
-- {"no-fused-madd", MASK_NO_FUSED_MADD}, \
-+ | MASK_MINIMAL_TOC), \
-+ "no description yet"}, \
-+ {"fp-in-toc", - MASK_NO_FP_IN_TOC, \
-+ "Place floating point constants in TOC"}, \
-+ {"no-fp-in-toc", MASK_NO_FP_IN_TOC, \
-+ "Don't place floating point constants in TOC"}, \
-+ {"sum-in-toc", - MASK_NO_SUM_IN_TOC, \
-+ "Place symbol+offset constants in TOC"}, \
-+ {"no-sum-in-toc", MASK_NO_SUM_IN_TOC, \
-+ "Don't place symbol+offset constants in TOC"}, \
-+ {"minimal-toc", MASK_MINIMAL_TOC, \
-+ "no description yet"}, \
-+ {"minimal-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC), \
-+ "no description yet"}, \
-+ {"no-minimal-toc", - MASK_MINIMAL_TOC, \
-+ "no description yet"}, \
-+ {"hard-float", - MASK_SOFT_FLOAT, \
-+ "Use hardware fp"}, \
-+ {"soft-float", MASK_SOFT_FLOAT, \
-+ "Do not use hardware fp"}, \
-+ {"multiple", MASK_MULTIPLE | MASK_MULTIPLE_SET, \
-+ "Generate load/store multiple instructions"}, \
-+ {"no-multiple", - MASK_MULTIPLE, \
-+ "Do not generate load/store multiple instructions"},\
-+ {"no-multiple", MASK_MULTIPLE_SET, \
-+ "Do not generate load/store multiple instructions"},\
-+ {"string", MASK_STRING | MASK_STRING_SET, \
-+ "Generate string instructions for block moves"},\
-+ {"no-string", - MASK_STRING, \
-+ "Do not generate string instructions for block moves"},\
-+ {"no-string", MASK_STRING_SET, \
-+ "Do not generate string instructions for block moves"},\
-+ {"update", - MASK_NO_UPDATE, \
-+ "Generate load/store with update instructions"},\
-+ {"no-update", MASK_NO_UPDATE, \
-+ "Do not generate load/store with update instructions"},\
-+ {"fused-madd", - MASK_NO_FUSED_MADD, \
-+ "Generate fused multiply/add instructions"}, \
-+ {"no-fused-madd", MASK_NO_FUSED_MADD, \
-+ "Don't generate fused multiply/add instructions"},\
- SUBTARGET_SWITCHES \
-- {"", TARGET_DEFAULT}}
-+ {"", TARGET_DEFAULT, \
-+ ""}}
-
- #define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE | MASK_STRING)
-
-@@ -449,13 +484,13 @@ extern enum processor_type rs6000_cpu;
- #define SUBTARGET_OPTIONS
- #endif
-
--#define TARGET_OPTIONS \
--{ \
-- {"cpu=", &rs6000_select[1].string}, \
-- {"tune=", &rs6000_select[2].string}, \
-- {"debug-", &rs6000_debug_name}, \
-- {"debug=", &rs6000_debug_name}, \
-- SUBTARGET_OPTIONS \
-+#define TARGET_OPTIONS \
-+{ \
-+ {"cpu=", &rs6000_select[1].string, "Use features of and schedule code for given CPU" },\
-+ {"tune=", &rs6000_select[2].string, "Schedule code for given CPU" }, \
-+ {"debug-", &rs6000_debug_name, "Enable debug output" }, \
-+ {"debug=", &rs6000_debug_name, "Enable debug output" }, \
-+ SUBTARGET_OPTIONS \
- }
-
- /* rs6000_select[0] is reserved for the default cpu defined via --with-cpu */
-Index: gcc/config/rs6000/sysv4.h
---- sysv4.h 1999/05/28 02:46:56 1.19.4.1
-+++ gcc/config/rs6000/sysv4.h 1999/06/12 18:55:38
-@@ -66,39 +66,39 @@ extern enum rs6000_sdata_type rs6000_sda
- the same as -mminimal-toc. */
- #undef SUBTARGET_SWITCHES
- #define SUBTARGET_SWITCHES \
-- { "bit-align", -MASK_NO_BITFIELD_TYPE }, \
-- { "no-bit-align", MASK_NO_BITFIELD_TYPE }, \
-- { "strict-align", MASK_STRICT_ALIGN }, \
-- { "no-strict-align", -MASK_STRICT_ALIGN }, \
-- { "relocatable", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \
-- { "no-relocatable", -MASK_RELOCATABLE }, \
-- { "relocatable-lib", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \
-- { "no-relocatable-lib", -MASK_RELOCATABLE }, \
-- { "little-endian", MASK_LITTLE_ENDIAN }, \
-- { "little", MASK_LITTLE_ENDIAN }, \
-- { "big-endian", -MASK_LITTLE_ENDIAN }, \
-- { "big", -MASK_LITTLE_ENDIAN }, \
-- { "no-toc", 0 }, \
-- { "toc", MASK_MINIMAL_TOC }, \
-- { "full-toc", MASK_MINIMAL_TOC }, \
-- { "prototype", MASK_PROTOTYPE }, \
-- { "no-prototype", -MASK_PROTOTYPE }, \
-- { "no-traceback", 0 }, \
-- { "eabi", MASK_EABI }, \
-- { "no-eabi", -MASK_EABI }, \
-- { "regnames", MASK_REGNAMES }, \
-- { "no-regnames", -MASK_REGNAMES }, \
-- { "sdata", 0 }, \
-- { "no-sdata", 0 }, \
-- { "sim", 0 }, \
-- { "ads", 0 }, \
-- { "yellowknife", 0 }, \
-- { "mvme", 0 }, \
-- { "emb", 0 }, \
-- { "solaris-cclib", 0 }, \
-- { "shlib", 0 }, \
-- EXTRA_SUBTARGET_SWITCHES \
-- { "newlib", 0 },
-+ { "bit-align", -MASK_NO_BITFIELD_TYPE, "Align to the base type of the bitfield." },\
-+ { "no-bit-align", MASK_NO_BITFIELD_TYPE, "Don't align to the base type of the bitfield." },\
-+ { "strict-align", MASK_STRICT_ALIGN, "Don't assume that unaligned accesses are handled by the system" },\
-+ { "no-strict-align", -MASK_STRICT_ALIGN, "Assume that unaligned accesses are handled by the system" },\
-+ { "relocatable", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC, "Produce code relocatable at runtime." },\
-+ { "no-relocatable", -MASK_RELOCATABLE, "Don't produce code relocatable at runtime." },\
-+ { "relocatable-lib", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC, "Produce code relocatable at runtime." },\
-+ { "no-relocatable-lib", -MASK_RELOCATABLE, "Don't produce code relocatable at runtime." },\
-+ { "little-endian", MASK_LITTLE_ENDIAN, "Produce little endian code." }, \
-+ { "little", MASK_LITTLE_ENDIAN, "Produce little endian code." }, \
-+ { "big-endian", -MASK_LITTLE_ENDIAN, "Produce big endian code." }, \
-+ { "big", -MASK_LITTLE_ENDIAN, "Produce big endian code." }, \
-+ { "no-toc", 0, "no description yet" }, \
-+ { "toc", MASK_MINIMAL_TOC, "no description yet" }, \
-+ { "full-toc", MASK_MINIMAL_TOC, "no description yet" }, \
-+ { "prototype", MASK_PROTOTYPE, "no description yet" }, \
-+ { "no-prototype", -MASK_PROTOTYPE, "no description yet" }, \
-+ { "no-traceback", 0, "no description yet" }, \
-+ { "eabi", MASK_EABI, "Use EABI." }, \
-+ { "no-eabi", -MASK_EABI, "Don't use EABI." }, \
-+ { "regnames", MASK_REGNAMES, "Use alternate register names." }, \
-+ { "no-regnames", -MASK_REGNAMES, "Don't use alternate register names." },\
-+ { "sdata", 0, "no description yet" }, \
-+ { "no-sdata", 0, "no description yet" }, \
-+ { "sim", 0, "Link with libsim.a, libc.a and sim-crt0.o." }, \
-+ { "ads", 0, "Link with libads.a, libc.a and crt0.o." }, \
-+ { "yellowknife", 0, "Link with libyk.a, libc.a and crt0.o." }, \
-+ { "mvme", 0, "Link with libmvme.a, libc.a and crt0.o." }, \
-+ { "emb", 0, "Set the PPC_EMB bit in the ELF flags header" }, \
-+ { "solaris-cclib", 0, "no description yet" }, \
-+ { "shlib", 0, "no description yet" }, \
-+ EXTRA_SUBTARGET_SWITCHES \
-+ { "newlib", 0, "no description yet" },
-
- /* This is meant to be redefined in the host dependent files */
- #define EXTRA_SUBTARGET_SWITCHES
-@@ -111,8 +111,8 @@ extern const char *rs6000_abi_name;
- extern const char *rs6000_sdata_name;
-
- #define SUBTARGET_OPTIONS \
-- { "call-", &rs6000_abi_name}, \
-- { "sdata=", &rs6000_sdata_name}
-+ { "call-", &rs6000_abi_name, "Select ABI calling convention." }, \
-+ { "sdata=", &rs6000_sdata_name, "Select method for sdata handling." }
-
- /* Max # of bytes for variables to automatically be put into the .sdata
- or .sdata2 sections. */
+++ /dev/null
-# DP: Add "Internal compiler error:" before some errors
-# DP: by Franz Sirl
-
-Index: gcc/toplev.c
---- toplev.c 1999/05/20 10:40:05 1.185.4.1
-+++ gcc/toplev.c 1999/06/12 18:55:32
-@@ -1467,6 +1467,8 @@ fatal_insn VPROTO((const char *msgid, rt
- #endif
- va_list ap;
-
-+ error ("Internal compiler error:");
-+
- VA_START (ap, insn);
-
- #ifndef ANSI_PROTOTYPES
-@@ -1943,6 +1945,8 @@ fatal VPROTO((const char *msgid, ...))
- const char *msgid;
- #endif
- va_list ap;
-+
-+ error ("Internal compiler error:");
-
- VA_START (ap, msgid);
-
+++ /dev/null
-Index: gcc/ChangeLog
-from Alexandre Oliva <aoliva@redhat.com>
-
- 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);
+++ /dev/null
-# DP: Makes it so sparc32 remains binary compatible with older releases
-
---- gcc/crtstuff.c.orig Mon Apr 26 20:11:08 1999
-+++ gcc/crtstuff.c Mon Apr 26 20:12:28 1999
-@@ -89,11 +89,12 @@
-
- /* References to __register_frame_info and __deregister_frame_info should
- be weak in this file if at all possible. */
--extern void __register_frame_info (void *, struct object *)
-- TARGET_ATTRIBUTE_WEAK;
-+extern void __register_frame_info (void *, struct object *);
-
--extern void *__deregister_frame_info (void *)
-- TARGET_ATTRIBUTE_WEAK;
-+extern void *__deregister_frame_info (void *);
-+/* DEBIAN/SPARC - Changed the references to the
-+ * previous for binary compatibility reasons
-+ */
-
- /* Provide default definitions for the pseudo-ops used to switch to the
- .ctors and .dtors sections.
+++ /dev/null
-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)
--\f
-+
-+/* 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)
-
+++ /dev/null
-2002-02-26 Jakub Jelinek <jakub@redhat.com>
-
- * attribs.c (c_common_attribute_table): Add visibility.
- (handle_visibility_attribute): New function.
- * varasm.c (assemble_visibility): New function.
- * output.h (assemble_visibility): Add prototype.
- * tree.h (MODULE_LOCAL_P): Define.
- * crtstuff.c (__dso_handle): Use visibility attribute.
- * config/i386/i386.h (ENCODE_SECTION_INFO): Set SYMBOL_REF_FLAG
- for MODULE_LOCAL_P symbols too.
- * config/ia64/ia64.c (ia64_encode_section_info): Handle
- MODULE_LOCAL_P symbols the same way as local symbols.
- Add SDATA_NAME_FLAG_CHAR even if decl was explicitely forced
- into .sdata/.sbss by the user.
- * doc/extend.texi (Function Attributes): Document visibility
- attribute.
-
- * gcc.dg/ia64-visibility-1.c: New test.
-
---- gcc/attribs.c 2002/02/25 22:38:52 1.14
-+++ gcc/attribs.c 2002/02/26 21:17:14 1.15
-@@ -75,6 +75,8 @@ static tree handle_weak_attribute PARAMS
- bool *));
- static tree handle_alias_attribute PARAMS ((tree *, tree, tree, int,
- bool *));
-+static tree handle_visibility_attribute PARAMS ((tree *, tree, tree, int,
-+ bool *));
- static tree handle_no_instrument_function_attribute PARAMS ((tree *, tree,
- tree, int,
- bool *));
-@@ -148,6 +150,8 @@ static const struct attribute_spec c_com
- handle_deprecated_attribute },
- { "vector_size", 1, 1, false, true, false,
- handle_vector_size_attribute },
-+ { "visibility", 1, 1, true, false, false,
-+ handle_visibility_attribute },
- { NULL, 0, 0, false, false, false, NULL }
- };
-
-@@ -1061,6 +1065,50 @@ handle_alias_attribute (node, name, args
- return NULL_TREE;
- }
-
-+/* Handle an "visibility" attribute; arguments as in
-+ struct attribute_spec.handler. */
-+
-+static tree
-+handle_visibility_attribute (node, name, args, flags, no_add_attrs)
-+ tree *node;
-+ tree name;
-+ tree args;
-+ int flags ATTRIBUTE_UNUSED;
-+ bool *no_add_attrs;
-+{
-+ tree decl = *node;
-+
-+ if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl))
-+ {
-+ warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
-+ *no_add_attrs = true;
-+ }
-+ else
-+ {
-+ tree id;
-+
-+ id = TREE_VALUE (args);
-+ if (TREE_CODE (id) != STRING_CST)
-+ {
-+ error ("visibility arg not a string");
-+ *no_add_attrs = true;
-+ return NULL_TREE;
-+ }
-+ if (strcmp (TREE_STRING_POINTER (id), "hidden")
-+ && strcmp (TREE_STRING_POINTER (id), "protected")
-+ && strcmp (TREE_STRING_POINTER (id), "internal"))
-+ {
-+ error ("visibility arg must be one of \"hidden\", \"protected\" or \"internal\"");
-+ *no_add_attrs = true;
-+ return NULL_TREE;
-+ }
-+
-+ assemble_visibility (decl, TREE_STRING_POINTER (id));
-+ }
-+
-+ return NULL_TREE;
-+}
-+
- /* Handle a "no_instrument_function" attribute; arguments as in
- struct attribute_spec.handler. */
-
---- gcc/varasm.c 2002/02/20 23:19:19 1.250
-+++ gcc/varasm.c 2002/02/26 21:17:14 1.251
-@@ -5160,6 +5160,25 @@ assemble_alias (decl, target)
- #endif
- }
-
-+/* Emit an assembler directive to set symbol for DECL visibility to
-+ VISIBILITY_TYPE. */
-+
-+void
-+assemble_visibility (decl, visibility_type)
-+ tree decl;
-+ const char *visibility_type ATTRIBUTE_UNUSED;
-+{
-+ const char *name;
-+
-+ name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
-+
-+#ifdef HAVE_GAS_HIDDEN
-+ fprintf (asm_out_file, "\t.%s\t%s\n", visibility_type, name);
-+#else
-+ warning ("visibility attribute not supported in this configuration; ignored");
-+#endif
-+}
-+
- /* Returns 1 if the target configuration supports defining public symbols
- so that one of them will be chosen at link time instead of generating a
- multiply-defined symbol error, whether through the use of weak symbols or
---- gcc/output.h 2002/02/17 14:23:50 1.94
-+++ gcc/output.h 2002/02/26 21:17:14 1.95
-@@ -255,6 +255,8 @@ extern void assemble_constant_align PARA
-
- extern void assemble_alias PARAMS ((tree, tree));
-
-+extern void assemble_visibility PARAMS ((tree, const char *));
-+
- /* Output a string of literal assembler code
- for an `asm' keyword used between functions. */
- extern void assemble_asm PARAMS ((tree));
---- gcc/tree.h 2002/02/20 00:19:33 1.308
-+++ gcc/tree.h 2002/02/26 21:17:14 1.309
-@@ -2283,6 +2283,11 @@ extern tree merge_attributes PARAMS ((t
- extern tree merge_dllimport_decl_attributes PARAMS ((tree, tree));
- #endif
-
-+/* Return true if DECL will be always resolved to a symbol defined in the
-+ same module (shared library or program). */
-+#define MODULE_LOCAL_P(DECL) \
-+ (lookup_attribute ("visibility", DECL_ATTRIBUTES (DECL)) != NULL)
-+
- /* Return a version of the TYPE, qualified as indicated by the
- TYPE_QUALS, if one exists. If no qualified version exists yet,
- return NULL_TREE. */
---- gcc/crtstuff.c 2002/02/05 10:31:01 1.54
-+++ gcc/crtstuff.c 2002/02/26 21:17:14 1.55
-@@ -213,13 +213,9 @@ STATIC void *__JCR_LIST__[]
- in one DSO or the main program is not used in another object. The
- dynamic linker takes care of this. */
-
--/* XXX Ideally the following should be implemented using
-- __attribute__ ((__visibility__ ("hidden")))
-- but the __attribute__ support is not yet there. */
- #ifdef HAVE_GAS_HIDDEN
--asm (".hidden\t__dso_handle");
-+extern void *__dso_handle __attribute__ ((__visibility__ ("hidden")));
- #endif
--
- #ifdef CRTSTUFFS_O
- void *__dso_handle = &__dso_handle;
- #else
---- gcc/config/i386/i386.h 2002/02/17 07:52:12 1.243
-+++ gcc/config/i386/i386.h 2002/02/26 21:17:18 1.244
-@@ -2266,7 +2266,9 @@ do { \
- \
- SYMBOL_REF_FLAG (XEXP (rtl, 0)) \
- = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \
-- || ! TREE_PUBLIC (DECL)); \
-+ || ! TREE_PUBLIC (DECL) \
-+ || (TREE_CODE (DECL) == VAR_DECL \
-+ && MODULE_LOCAL_P (DECL))); \
- } \
- } \
- } while (0)
---- gcc/config/ia64/ia64.c 2002/01/21 02:24:02 1.139
-+++ gcc/config/ia64/ia64.c 2002/02/26 22:41:48 1.141
-@@ -6897,13 +6904,14 @@ ia64_encode_section_info (decl)
- statically allocated, but the space is allocated somewhere else. Such
- decls can not be own data. */
- if (! TARGET_NO_SDATA
-- && TREE_STATIC (decl) && ! DECL_EXTERNAL (decl)
-- && ! (DECL_ONE_ONLY (decl) || DECL_WEAK (decl))
-- && ! (TREE_PUBLIC (decl)
-- && (flag_pic
-- || (DECL_COMMON (decl)
-- && (DECL_INITIAL (decl) == 0
-- || DECL_INITIAL (decl) == error_mark_node))))
-+ && ((TREE_STATIC (decl) && ! DECL_EXTERNAL (decl)
-+ && ! (DECL_ONE_ONLY (decl) || DECL_WEAK (decl))
-+ && ! (TREE_PUBLIC (decl)
-+ && (flag_pic
-+ || (DECL_COMMON (decl)
-+ && (DECL_INITIAL (decl) == 0
-+ || DECL_INITIAL (decl) == error_mark_node)))))
-+ || MODULE_LOCAL_P (decl))
- /* Either the variable must be declared without a section attribute,
- or the section must be sdata or sbss. */
- && (DECL_SECTION_NAME (decl) == 0
-@@ -6923,9 +6931,12 @@ ia64_encode_section_info (decl)
- ;
-
- /* If this is an incomplete type with size 0, then we can't put it in
-- sdata because it might be too big when completed. */
-- else if (size > 0
-- && size <= (HOST_WIDE_INT) ia64_section_threshold
-+ sdata because it might be too big when completed.
-+ Objects bigger than threshold should have SDATA_NAME_FLAG_CHAR
-+ added if they are in .sdata or .sbss explicitely. */
-+ else if (((size > 0
-+ && size <= (HOST_WIDE_INT) ia64_section_threshold)
-+ || DECL_SECTION_NAME (decl))
- && symbol_str[0] != SDATA_NAME_FLAG_CHAR)
- {
- size_t len = strlen (symbol_str);
---- gcc/doc/extend.texi 2002/02/23 12:59:07 1.64
-+++ gcc/doc/extend.texi 2002/02/26 21:17:17 1.65
-@@ -2198,7 +2198,7 @@ The @code{alias} attribute causes the de
- alias for another symbol, which must be specified. For instance,
-
- @smallexample
--void __f () @{ /* do something */; @}
-+void __f () @{ /* @r{Do something.} */; @}
- void f () __attribute__ ((weak, alias ("__f")));
- @end smallexample
-
-@@ -2206,6 +2206,19 @@ declares @samp{f} to be a weak alias for
- mangled name for the target must be used.
-
- Not all target machines support this attribute.
-+
-+@item visibility ("@var{visibility_type}")
-+@cindex @code{visibility} attribute
-+The @code{visibility} attribute on ELF targets causes the declaration
-+to be emitted with hidden, protected or internal visibility.
-+
-+@smallexample
-+void __attribute__ ((visibility ("protected")))
-+f () @{ /* @r{Do something.} */; @}
-+int i __attribute__ ((visibility ("hidden")));
-+@end smallexample
-+
-+Not all ELF targets support this attribute.
-
- @item regparm (@var{number})
- @cindex functions that are passed arguments in registers on the 386
---- gcc/testsuite/gcc.dg/ia64-visibility-1.c.jj Tue Feb 26 12:30:32 2002
-+++ gcc/testsuite/gcc.dg/ia64-visibility-1.c Tue Feb 26 12:33:26 2002
-@@ -0,0 +1,36 @@
-+/* Test visibility attribute. */
-+/* { dg-do compile { target ia64*-*-linux* } } */
-+/* { dg-options "-O2 -fpic" } */
-+/* { dg-final { scan-assembler "\\.hidden.*variable_j" } } */
-+/* { dg-final { scan-assembler "\\.hidden.*variable_m" } } */
-+/* { dg-final { scan-assembler "\\.protected.*baz" } } */
-+/* { dg-final { scan-assembler "gprel.*variable_i" } } */
-+/* { dg-final { scan-assembler "gprel.*variable_j" } } */
-+/* { dg-final { scan-assembler "ltoff.*variable_k" } } */
-+/* { dg-final { scan-assembler "gprel.*variable_l" } } */
-+/* { dg-final { scan-assembler "gprel.*variable_m" } } */
-+/* { dg-final { scan-assembler "ltoff.*variable_n" } } */
-+
-+static int variable_i;
-+int variable_j __attribute__((visibility ("hidden")));
-+int variable_k;
-+struct A { char a[64]; };
-+static struct A variable_l __attribute__((section (".sbss")));
-+struct A variable_m __attribute__((visibility ("hidden"), section(".sbss")));
-+struct A variable_n __attribute__((section (".sbss")));
-+
-+int foo (void)
-+{
-+ return variable_i + variable_j + variable_k;
-+}
-+
-+void bar (void)
-+{
-+ variable_l.a[10] = 0;
-+ variable_m.a[10] = 0;
-+ variable_n.a[10] = 0;
-+}
-+
-+void __attribute__((visibility ("protected"))) baz (void)
-+{
-+}
+++ /dev/null
-2002-03-06 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.h (REDO_SECTION_INFO_P): Define.
-
-2002-03-02 Richard Henderson <rth@redhat.com>
-
- * config/i386/i386.h (ENCODE_SECTION_INFO): MODULE_LOCAL_P applies
- to functions as well.
-
-2002-03-02 Richard Henderson <rth@redhat.com>
-
- * attribs.c (handle_visibility_attribute): Don't call
- assemble_visibility.
- * varasm.c (maybe_assemble_visibility): New.
- (assemble_start_function, assemble_variable, assemble_alias): Use it.
-
---- gcc/config/i386/i386.h.jj Tue Jun 4 18:54:32 2002
-+++ gcc/config/i386/i386.h Tue Jun 4 18:54:42 2002
-@@ -2268,12 +2268,13 @@ do { \
- SYMBOL_REF_FLAG (XEXP (rtl, 0)) \
- = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \
- || ! TREE_PUBLIC (DECL) \
-- || (TREE_CODE (DECL) == VAR_DECL \
-- && MODULE_LOCAL_P (DECL))); \
-+ || MODULE_LOCAL_P (DECL)); \
- } \
- } \
- } while (0)
-
-+#define REDO_SECTION_INFO_P(DECL) 1
-+
- /* The `FINALIZE_PIC' macro serves as a hook to emit these special
- codes once the function is being compiled into assembly code, but
- not before. (It is not done before, because in the case of
---- gcc/varasm.c.jj Tue Jun 4 18:54:32 2002
-+++ gcc/varasm.c Tue Jun 4 18:54:42 2002
-@@ -167,6 +167,7 @@ static unsigned min_align PARAMS ((unsi
- static void output_constructor PARAMS ((tree, HOST_WIDE_INT,
- unsigned int));
- static void globalize_decl PARAMS ((tree));
-+static void maybe_assemble_visibility PARAMS ((tree));
- static int in_named_entry_eq PARAMS ((const PTR, const PTR));
- static hashval_t in_named_entry_hash PARAMS ((const PTR));
- #ifdef ASM_OUTPUT_BSS
-@@ -1238,6 +1239,8 @@ assemble_start_function (decl, fnname)
- }
-
- globalize_decl (decl);
-+
-+ maybe_assemble_visibility (decl);
- }
-
- /* Do any machine/system dependent processing of the function name */
-@@ -1591,6 +1594,9 @@ assemble_variable (decl, top_level, at_e
- DECL_ALIGN (decl) = align;
- set_mem_align (decl_rtl, align);
-
-+ if (TREE_PUBLIC (decl))
-+ maybe_assemble_visibility (decl);
-+
- /* Handle uninitialized definitions. */
-
- if ((DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node)
-@@ -5167,7 +5173,11 @@ assemble_alias (decl, target)
- #ifdef ASM_OUTPUT_DEF
- /* Make name accessible from other files, if appropriate. */
- if (TREE_PUBLIC (decl))
-- globalize_decl (decl);
-+ {
-+ globalize_decl (decl);
-+
-+ maybe_assemble_visibility (decl);
-+ }
-
- #ifdef ASM_OUTPUT_DEF_FROM_DECLS
- ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target);
-@@ -5213,6 +5223,21 @@ assemble_visibility (decl, visibility_ty
- #endif
- }
-
-+/* A helper function to call assemble_visibility when needed for a decl. */
-+
-+static void
-+maybe_assemble_visibility (decl)
-+ tree decl;
-+{
-+ tree visibility = lookup_attribute ("visibility", DECL_ATTRIBUTES (decl));
-+ if (visibility)
-+ {
-+ const char *type
-+ = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (visibility)));
-+ assemble_visibility (decl, type);
-+ }
-+}
-+
- /* Returns 1 if the target configuration supports defining public symbols
- so that one of them will be chosen at link time instead of generating a
- multiply-defined symbol error, whether through the use of weak symbols or
---- gcc/attribs.c.jj Tue Jun 4 18:54:32 2002
-+++ gcc/attribs.c Tue Jun 4 18:54:42 2002
-@@ -1101,8 +1101,6 @@ handle_visibility_attribute (node, name,
- *no_add_attrs = true;
- return NULL_TREE;
- }
--
-- assemble_visibility (decl, TREE_STRING_POINTER (id));
- }
-
- return NULL_TREE;
+++ /dev/null
-2002-07-31 Jakub Jelinek <jakub@redhat.com>
-
- * varasm.c (assemble_visibility): Strip name encoding.
-
- * gcc.dg/ia64-visibility-2.c: New test.
-
---- gcc/testsuite/gcc.dg/ia64-visibility-2.c.jj 2002-07-31 16:31:50.000000000 +0200
-+++ gcc/testsuite/gcc.dg/ia64-visibility-2.c 2002-07-31 16:32:36.000000000 +0200
-@@ -0,0 +1,15 @@
-+/* Test visibility attribute. */
-+/* { dg-do link { target ia64*-*-linux* } } */
-+/* { dg-options "-O2 -fpic" } */
-+
-+int foo (int x);
-+int bar (int x) __asm__ ("foo") __attribute__ ((visibility ("hidden")));
-+int bar (int x)
-+{
-+ return x;
-+}
-+
-+int main ()
-+{
-+ return 0;
-+}
---- gcc/varasm.c.jj 2002-07-30 12:49:45.000000000 +0200
-+++ gcc/varasm.c 2002-07-31 16:20:22.000000000 +0200
-@@ -5227,7 +5227,7 @@ assemble_visibility (decl, visibility_ty
- {
- const char *name;
-
-- name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
-+ STRIP_NAME_ENCODING (name, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
-
- #ifdef HAVE_GAS_HIDDEN
- fprintf (asm_out_file, "\t.%s\t%s\n", visibility_type, name);
+++ /dev/null
-2002-08-23 Jakub Jelinek <jakub@redhat.com>
-
- * config/alpha/alpha.c (alpha_encode_section_info): Use
- MODULE_LOCAL_P.
-
---- gcc/config/alpha/alpha.c.jj 2002-05-30 11:12:20.000000000 +0200
-+++ gcc/config/alpha/alpha.c 2002-08-23 12:05:30.000000000 +0200
-@@ -1594,7 +1594,7 @@ alpha_encode_section_info (decl)
- /* Linkonce and weak data is never local. */
- else if (DECL_ONE_ONLY (decl) || DECL_WEAK (decl))
- is_local = false;
-- else if (! TREE_PUBLIC (decl))
-+ else if (! TREE_PUBLIC (decl) || MODULE_LOCAL_P (decl))
- is_local = true;
- /* If PIC, then assume that any global name can be overridden by
- symbols resolved from other modules. */
+++ /dev/null
-2002-08-28 Jakub Jelinek <jakub@redhat.com>
-
- * config/alpha/alpha.c (alpha_encode_section_info): Check static and
- visibility before DECL_EXTERNAL.
-
---- gcc/config/alpha/alpha.c.jj 2002-08-28 11:20:29.000000000 +0200
-+++ gcc/config/alpha/alpha.c 2002-08-28 21:50:55.000000000 +0200
-@@ -1589,13 +1589,13 @@ alpha_encode_section_info (decl)
-
- /* A variable is considered "local" if it is defined in this module. */
-
-- if (DECL_EXTERNAL (decl))
-+ if (! TREE_PUBLIC (decl) || MODULE_LOCAL_P (decl))
-+ is_local = true;
-+ else if (DECL_EXTERNAL (decl))
- is_local = false;
- /* Linkonce and weak data is never local. */
- else if (DECL_ONE_ONLY (decl) || DECL_WEAK (decl))
- is_local = false;
-- else if (! TREE_PUBLIC (decl) || MODULE_LOCAL_P (decl))
-- is_local = true;
- /* If PIC, then assume that any global name can be overridden by
- symbols resolved from other modules. */
- else if (flag_pic)
+++ /dev/null
-2002-05-24 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/6794
- * decl.c (cp_make_fname_decl): If outside of function, emit
- the variable immediately.
- * call.c (build_call): Avoid crashing when noreturn function
- is called outside of function context.
-
- * g++.dg/ext/pretty1.C: New test.
- * g++.dg/ext/pretty2.C: New test.
-
---- gcc/cp/decl.c.jj Tue May 21 20:27:10 2002
-+++ gcc/cp/decl.c Fri May 24 17:28:16 2002
-@@ -6772,7 +6772,10 @@ cp_make_fname_decl (id, type_dep)
- TREE_USED (decl) = 1;
-
- cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
--
-+
-+ if (!current_function_decl)
-+ rest_of_decl_compilation (decl, 0, 1, 0);
-+
- return decl;
- }
-
---- gcc/cp/call.c.jj Mon Apr 15 14:48:51 2002
-+++ gcc/cp/call.c Fri May 24 12:49:22 2002
-@@ -408,7 +408,7 @@ build_call (function, parms)
- nothrow = ((decl && TREE_NOTHROW (decl))
- || TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
-
-- if (decl && TREE_THIS_VOLATILE (decl))
-+ if (decl && TREE_THIS_VOLATILE (decl) && current_function_decl)
- current_function_returns_abnormally = 1;
-
- if (decl && TREE_DEPRECATED (decl))
---- gcc/testsuite/g++.dg/ext/pretty1.C.jj Fri May 24 18:09:27 2002
-+++ gcc/testsuite/g++.dg/ext/pretty1.C Fri May 24 18:13:10 2002
-@@ -0,0 +1,67 @@
-+// PR c++/6794
-+// Test whether __PRETTY_FUNCTION__ works in templates, functions and
-+// in initializers at global scope
-+// { dg-do compile }
-+// { dg-options "" }
-+
-+extern "C" void __assert_fail (const char *, const char *,
-+ unsigned int, const char *)
-+ throw() __attribute__((noreturn));
-+extern "C" void abort (void);
-+extern "C" void exit (int);
-+
-+#define str(expr) #expr
-+#define assert(expr) \
-+ ((expr) ? 0 : (__assert_fail (str(expr), __FILE__, __LINE__, \
-+ __PRETTY_FUNCTION__), 0))
-+
-+int __attribute__((noinline))
-+foo (void)
-+{
-+ return 1;
-+}
-+
-+template<class T> int
-+bar (T)
-+{
-+ return (assert (foo ()), 1);
-+}
-+
-+template<> int
-+bar<int> (int)
-+{
-+ return (assert (foo ()), 2);
-+}
-+
-+int a = (assert (foo ()), 1);
-+int b = (assert (foo ()), 2);
-+
-+int
-+main ()
-+{
-+ double c = 1.0;
-+ unsigned char *d = 0;
-+ int e = (assert (foo ()), 3);
-+
-+ bar (c);
-+ bar (d);
-+ bar (e);
-+}
-+
-+namespace N
-+{
-+ int f = (assert (foo ()), 4);
-+}
-+
-+void __attribute__((noinline))
-+__assert_fail (const char *cond, const char *file, unsigned int line,
-+ const char *pretty) throw ()
-+{
-+ abort ();
-+}
-+
-+// { dg-final { scan-assembler "int bar\\(T\\).*with T = int" } }
-+// { dg-final { scan-assembler "top level" } }
-+// { dg-final { scan-assembler "int main\\(\\)" } }
-+// { dg-final { scan-assembler "int bar\\(T\\).*with T = double" } }
-+// { dg-final { scan-assembler "int bar\\(T\\).*with T = unsigned char\*" } }
---- gcc/testsuite/g++.dg/ext/pretty2.C.jj Fri May 24 18:09:27 2002
-+++ gcc/testsuite/g++.dg/ext/pretty2.C Fri May 24 18:13:42 2002
-@@ -0,0 +1,61 @@
-+// PR c++/6794
-+// Test whether __PRETTY_FUNCTION__ works in templates, functions and
-+// in initializers at global scope
-+// { dg-do run }
-+// { dg-options "" }
-+
-+extern "C" void __assert_fail (const char *, const char *,
-+ unsigned int, const char *)
-+ throw() __attribute__((noreturn));
-+extern "C" void abort (void);
-+extern "C" void exit (int);
-+
-+#define str(expr) #expr
-+#define assert(expr) \
-+ ((expr) ? 0 : (__assert_fail (str(expr), __FILE__, __LINE__, \
-+ __PRETTY_FUNCTION__), 0))
-+
-+int __attribute__((noinline))
-+foo (void)
-+{
-+ return 1;
-+}
-+
-+template<class T> int
-+bar (T)
-+{
-+ return (assert (foo ()), 1);
-+}
-+
-+template<> int
-+bar<int> (int)
-+{
-+ return (assert (foo ()), 2);
-+}
-+
-+int a = (assert (foo ()), 1);
-+int b = (assert (foo ()), 2);
-+
-+int
-+main ()
-+{
-+ double c = 1.0;
-+ unsigned char *d = 0;
-+ int e = (assert (foo ()), 3);
-+
-+ bar (c);
-+ bar (d);
-+ bar (e);
-+}
-+
-+namespace N
-+{
-+ int f = (assert (foo ()), 4);
-+}
-+
-+void __attribute__((noinline))
-+__assert_fail (const char *cond, const char *file, unsigned int line,
-+ const char *pretty) throw ()
-+{
-+ abort ();
-+}
+++ /dev/null
-2002-05-28 Richard Henderson <rth@redhat.com>
-
- * flow.c (calculate_global_regs_live): Rename call_used to
- invalidated_by_call. Initialize from regs_invalidated_by_call
- instead of call_used_regs.
-
-2002-07-20 Jakub Jelinek <jakub@redhat.com>
-
- * g++.dg/opt/life1.C: New test.
-
---- gcc/flow.c 28 May 2002 12:53:39 -0000 1.527
-+++ gcc/flow.c 28 May 2002 20:01:29 -0000 1.528
-@@ -1048,19 +1048,19 @@ calculate_global_regs_live (blocks_in, b
- int flags;
- {
- basic_block *queue, *qhead, *qtail, *qend;
-- regset tmp, new_live_at_end, call_used;
-- regset_head tmp_head, call_used_head;
-+ regset tmp, new_live_at_end, invalidated_by_call;
-+ regset_head tmp_head, invalidated_by_call_head;
- regset_head new_live_at_end_head;
- int i;
-
- tmp = INITIALIZE_REG_SET (tmp_head);
- new_live_at_end = INITIALIZE_REG_SET (new_live_at_end_head);
-- call_used = INITIALIZE_REG_SET (call_used_head);
-+ invalidated_by_call = INITIALIZE_REG_SET (invalidated_by_call_head);
-
- /* Inconveniently, this is only readily available in hard reg set form. */
- for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i)
-- if (call_used_regs[i])
-- SET_REGNO_REG_SET (call_used, i);
-+ if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
-+ SET_REGNO_REG_SET (invalidated_by_call, i);
-
- /* Create a worklist. Allocate an extra slot for ENTRY_BLOCK, and one
- because the `head == tail' style test for an empty queue doesn't
-@@ -1147,7 +1147,7 @@ calculate_global_regs_live (blocks_in, b
- if (e->flags & EDGE_EH)
- {
- bitmap_operation (tmp, sb->global_live_at_start,
-- call_used, BITMAP_AND_COMPL);
-+ invalidated_by_call, BITMAP_AND_COMPL);
- IOR_REG_SET (new_live_at_end, tmp);
- }
- else
-@@ -1315,7 +1315,7 @@ calculate_global_regs_live (blocks_in, b
-
- FREE_REG_SET (tmp);
- FREE_REG_SET (new_live_at_end);
-- FREE_REG_SET (call_used);
-+ FREE_REG_SET (invalidated_by_call);
-
- if (blocks_out)
- {
---- gcc/testsuite/g++.dg/opt/life1.C.jj Sat Jul 20 18:57:05 2002
-+++ gcc/testsuite/g++.dg/opt/life1.C Sat Jul 20 19:00:01 2002
-@@ -0,0 +1,16 @@
-+// This testcase did not set up the pic register on IA-32 due
-+// to bug in calculate_global_regs_live EH edge handling.
-+// { dg-do compile { target i?86-*-linux* } }
-+// { dg-options "-O2 -fPIC" }
-+
-+struct A { };
-+
-+void foo (A (*fn)())
-+{
-+ try {
-+ A a = fn ();
-+ } catch (...) {
-+ }
-+}
-+
-+// { dg-final { scan-assembler "GLOBAL_OFFSET_TABLE" } }
+++ /dev/null
-2002-08-14 Nathan Sidwell <nathan@codesourcery.com>
-
- * doc/invoke.texi (-a): Remove documentation.
- (-fprofile-arcs): Remove reference to -a, -ax options.
- * doc/gcov.texi (Gcov Data Files): Data might be merged.
-
---- gcc/doc/gcov.texi.jj 2001-11-15 11:38:19.000000000 +0100
-+++ gcc/doc/gcov.texi 2002-08-22 11:48:48.000000000 +0200
-@@ -388,7 +388,7 @@ built with the GCC @option{-fprofile-arc
- separate @file{.da} file is created for each source file compiled with
- this option, and the name of the @file{.da} file is stored as an
- absolute pathname in the resulting object file. This path name is
--derived from the source file name by substituting a @file{.da} suffix.
-+derived from the object file name by substituting a @file{.da} suffix.
-
- The format of the @file{.da} file is fairly simple. The first 8-byte
- number is the number of counts in the file, followed by the counts
---- gcc/doc/invoke.texi.jj 2002-08-08 17:55:08.000000000 +0200
-+++ gcc/doc/invoke.texi 2002-08-22 11:46:49.000000000 +0200
-@@ -2831,20 +2831,6 @@ analysis program @code{gprof}. You must
- the source files you want data about, and you must also use it when
- linking.
-
--@cindex @code{tcov}
--@item -a
--@opindex a
--Generate extra code to write profile information for basic blocks, which will
--record the number of times each basic block is executed, the basic block start
--address, and the function name containing the basic block. If @option{-g} is
--used, the line number and filename of the start of the basic block will also be
--recorded. If not overridden by the machine description, the default action is
--to append to the text file @file{bb.out}.
--
--This data could be analyzed by a program like @code{tcov}. Note,
--however, that the format of the data is not what @code{tcov} expects.
--Eventually GNU @code{gprof} should be extended to process this data.
--
- @item -Q
- @opindex Q
- Makes the compiler print out each function name as it is compiled, and
-@@ -2877,18 +2863,7 @@ optimization and code generation options
- Control Optimization}).
-
- The other use of @option{-fprofile-arcs} is for use with @code{gcov},
--when it is used with the @option{-ftest-coverage} option. GCC
--supports two methods of determining code coverage: the options that
--support @code{gcov}, and options @option{-a} and @option{-ax}, which
--write information to text files. The options that support @code{gcov}
--do not need to instrument every arc in the program, so a program compiled
--with them runs faster than a program compiled with @option{-a}, which
--adds instrumentation code to every basic block in the program. The
--tradeoff: since @code{gcov} does not have execution counts for all
--branches, it must start with the execution counts for the instrumented
--branches, and then iterate over the program flow graph until the entire
--graph has been solved. Hence, @code{gcov} runs a little more slowly than
--a program which uses information from @option{-a} and @option{-ax}.
-+when it is used with the @option{-ftest-coverage} option.
-
- With @option{-fprofile-arcs}, for each function of your program GCC
- creates a program flow graph, then finds a spanning tree for the graph.
-@@ -2898,11 +2873,6 @@ executed. When an arc is the only exit
- instrumentation code can be added to the block; otherwise, a new basic
- block must be created to hold the instrumentation code.
-
--This option makes it possible to estimate branch probabilities and to
--calculate basic block execution counts. In general, basic block
--execution counts as provided by @option{-a} do not give enough
--information to estimate all branch probabilities.
--
- @need 2000
- @item -ftest-coverage
- @opindex ftest-coverage
+++ /dev/null
-2002-06-20 Jakub Jelinek <jakub@redhat.com>
-
- * emit-rtl.c (init_emit_once): Register static_regno_reg_rtx
- with GC.
- * alias.c (init_alias_once): Register static_reg_base_value
- with GC.
-
-2002-06-13 Jeffrey Law <law@redhat.com>
-
- * rs6000.c (rs6000_frame_related): Avoid unwanted sharing
- of hard registers.
-
- * emit-rtl.c (static_regno_reg_rtx): Define.
- (init_emit_once): Initialize static_regno_reg_rtx.
- (init_emit): Copy static_regno_reg_rtx into regno_reg_rtx instead
- of building new hard reg objects once per function.
- (gen_rtx_REG): Try to share hard regs.
- * regclass.c (init_fake_stack_mems): New function broken out from
- init_regs.
- * rtl.h (init_fake_stack_mems): Declare.
- * toplev.c (lang_independent_init): Call init_regs before
- init_emit_once. Call init_fake_stack_mems after init_emit_once.
-
- * alias.c (argument_registers): Remove.
- (init_alias_once): Initialize static_reg_base_value here. Remove
- initialization of argument_registers.
- (init_alias_once_per_function): Remove.
- (init_alias_analysis): Copy all the entries from static_reg_base_value
- into new_reg_base_value all at once.
- * rtl.h (init_alias_once_per_function): Remove declaration.
- * function.c (prepare_function_start): Do not call
- init_alias_once_per_function.
-
- * caller-save.c (init_caller_save): Use gen_rtx_INSN instead of
- starting a sequence and emitting an INSN.
-
-2002-06-11 Jeffrey Law <law@redhat.com>
-
- * caller-save.c (init_caller_save): Move creation of SAVEINSN
- and RESTINSN into into the scope of the sequence.
-
- * loop.c (loop_regs_scan): Avoid useless generation of REG objects.
-
-2002-06-10 Jeffrey Law <law@redhat.com>
-
- * alias.c (static_reg_base_value): New to hold RTL for
- items allocated once per function for the aliasing code.
- (init_alias_once_per_function): Initialize static_reg_base_value.
- (init_alias_analysis): Avoid throw-away allocations of RTL by
- using pre-computed values in static_reg_base_value.
- * function.c (prepare_function_start): Call
- init_alias_once_per_function appropriately.
- * rtl.h (init_alias_once_per_function): Declare.
- * caller-save (init_caller_save): Restructure slightly to
- avoid lots of silly RTL generation.
- * expr.c (init_expr_once): Likewise.
- * reload1.c (reload_cse_regs_1): Allocate throw-away register
- RTL object here. Pass it into children.
- (reload_cse_simplify_operands): Use passed-in register RTL
- object.
- (reload_cse_simplify): Pass through throw-away register
- RTL object.
-
-2002-06-07 Jeff Law <law@redhat.com>
-
- * emit-rtl.c (init_emit): Add hard registers to regno_reg_rtx.
- * combine.c (move_deaths): Use regno_reg_rtx for hard regs rather
- than creating a new register.
- (distribute_notes): Likewise.
- * df.c (df_reg_use_gen): Likewise.
- (df_reg_clobber_gen): Likewise.
- (df_ref_record): Likewise.
- * expr.c (use_regs): Likewise.
- * flow.c (propagate_one_insn): Likewise.
- (mark_set_1): Likewise.
- (mark_used_reg): Likewise.
- * reload.c (emit_reload_insns): Likewise.
-
---- gcc/df.c.jj Tue Apr 2 21:23:50 2002
-+++ gcc/df.c Thu Jun 20 14:12:05 2002
-@@ -633,8 +633,7 @@ static rtx df_reg_use_gen (regno)
- rtx reg;
- rtx use;
-
-- reg = regno >= FIRST_PSEUDO_REGISTER
-- ? regno_reg_rtx[regno] : gen_rtx_REG (reg_raw_mode[regno], regno);
-+ reg = regno_reg_rtx[regno];
-
- use = gen_rtx_USE (GET_MODE (reg), reg);
- return use;
-@@ -648,8 +647,7 @@ static rtx df_reg_clobber_gen (regno)
- rtx reg;
- rtx use;
-
-- reg = regno >= FIRST_PSEUDO_REGISTER
-- ? regno_reg_rtx[regno] : gen_rtx_REG (reg_raw_mode[regno], regno);
-+ reg = regno_reg_rtx[regno];
-
- use = gen_rtx_CLOBBER (GET_MODE (reg), reg);
- return use;
-@@ -905,7 +903,7 @@ df_ref_record (df, reg, loc, insn, ref_t
- endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
-
- for (i = regno; i < endregno; i++)
-- df_ref_record_1 (df, gen_rtx_REG (reg_raw_mode[i], i),
-+ df_ref_record_1 (df, regno_reg_rtx[i],
- loc, insn, ref_type, ref_flags);
- }
- else
---- gcc/config/rs6000/rs6000.c.jj Sat May 25 00:01:52 2002
-+++ gcc/config/rs6000/rs6000.c Thu Jun 20 18:23:59 2002
-@@ -8531,6 +8531,14 @@ rs6000_frame_related (insn, reg, val, re
- {
- rtx real, temp;
-
-+ /* copy_rtx will not make unique copies of registers, so we need to
-+ ensure we don't have unwanted sharing here. */
-+ if (reg == reg2)
-+ reg = gen_raw_REG (GET_MODE (reg), REGNO (reg));
-+
-+ if (reg == rreg)
-+ reg = gen_raw_REG (GET_MODE (reg), REGNO (reg));
-+
- real = copy_rtx (PATTERN (insn));
-
- real = replace_rtx (real, reg,
---- gcc/combine.c.jj Tue Jun 4 15:02:15 2002
-+++ gcc/combine.c Thu Jun 20 14:12:38 2002
-@@ -11908,7 +11908,7 @@ move_deaths (x, maybe_kill_insn, from_cu
- if (i < regno || i >= ourend)
- REG_NOTES (where_dead)
- = gen_rtx_EXPR_LIST (REG_DEAD,
-- gen_rtx_REG (reg_raw_mode[i], i),
-+ regno_reg_rtx[i],
- REG_NOTES (where_dead));
- }
-
-@@ -11935,7 +11935,7 @@ move_deaths (x, maybe_kill_insn, from_cu
- offset = 1;
-
- for (i = regno + offset; i < ourend; i++)
-- move_deaths (gen_rtx_REG (reg_raw_mode[i], i),
-+ move_deaths (regno_reg_rtx[i],
- maybe_kill_insn, from_cuid, to_insn, &oldnotes);
- }
-
-@@ -12557,7 +12557,7 @@ distribute_notes (notes, from_insn, i3,
- for (i = regno; i < endregno;
- i += HARD_REGNO_NREGS (i, reg_raw_mode[i]))
- {
-- rtx piece = gen_rtx_REG (reg_raw_mode[i], i);
-+ rtx piece = regno_reg_rtx[i];
- basic_block bb = BASIC_BLOCK (this_basic_block);
-
- if (! dead_or_set_p (place, piece)
---- gcc/emit-rtl.c.jj Thu May 23 10:28:12 2002
-+++ gcc/emit-rtl.c Thu Jun 20 18:38:08 2002
-@@ -92,6 +92,12 @@ static int no_line_numbers;
-
- rtx global_rtl[GR_MAX];
-
-+/* Commonly used RTL for hard registers. These objects are not necessarily
-+ unique, so we allocate them separately from global_rtl. They are
-+ initialized once per compilation unit, then copied into regno_reg_rtx
-+ at the beginning of each function. */
-+static rtx static_regno_reg_rtx[FIRST_PSEUDO_REGISTER];
-+
- /* We record floating-point CONST_DOUBLEs in each floating-point mode for
- the values of 0, 1, and 2. For the integer entries and VOIDmode, we
- record a copy of const[012]_rtx. */
-@@ -427,6 +433,15 @@ gen_rtx_REG (mode, regno)
- return stack_pointer_rtx;
- }
-
-+ /* If the per-function register table has been set up, try to re-use
-+ an existing entry in that table to avoid useless generation of RTL. */
-+ if (0 && cfun
-+ && cfun->emit
-+ && regno_reg_rtx
-+ && regno >= 0 && regno < FIRST_PSEUDO_REGISTER
-+ && reg_raw_mode[regno] == mode)
-+ return regno_reg_rtx[regno];
-+
- return gen_raw_REG (mode, regno);
- }
-
-@@ -4841,6 +4856,11 @@ init_emit ()
- f->emit->regno_decl
- = (tree *) xcalloc (f->emit->regno_pointer_align_length, sizeof (tree));
-
-+ /* Put copies of all the hard registers into regno_reg_rtx. */
-+ memcpy (regno_reg_rtx,
-+ static_regno_reg_rtx,
-+ FIRST_PSEUDO_REGISTER * sizeof (rtx));
-+
- /* Put copies of all the virtual register rtx into regno_reg_rtx. */
- init_virtual_regs (f->emit);
-
-@@ -5015,8 +5035,14 @@ init_emit_once (line_numbers)
- gen_raw_REG (Pmode, VIRTUAL_OUTGOING_ARGS_REGNUM);
- virtual_cfa_rtx = gen_raw_REG (Pmode, VIRTUAL_CFA_REGNUM);
-
-+ /* Initialize RTL for commonly used hard registers. These are
-+ copied into regno_reg_rtx as we begin to compile each function. */
-+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+ static_regno_reg_rtx[i] = gen_raw_REG (reg_raw_mode[i], i);
-+
- /* These rtx must be roots if GC is enabled. */
- ggc_add_rtx_root (global_rtl, GR_MAX);
-+ ggc_add_rtx_root (static_regno_reg_rtx, (int) FIRST_PSEUDO_REGISTER);
-
- #ifdef INIT_EXPANDERS
- /* This is to initialize {init|mark|free}_machine_status before the first
---- gcc/expr.c.jj Tue May 7 12:45:49 2002
-+++ gcc/expr.c Thu Jun 20 17:04:00 2002
-@@ -208,6 +208,7 @@ init_expr_once ()
- enum machine_mode mode;
- int num_clobbers;
- rtx mem, mem1;
-+ rtx reg;
-
- start_sequence ();
-
-@@ -217,6 +218,10 @@ init_expr_once ()
- mem = gen_rtx_MEM (VOIDmode, stack_pointer_rtx);
- mem1 = gen_rtx_MEM (VOIDmode, frame_pointer_rtx);
-
-+ /* A scratch register we can modify in-place below to avoid
-+ useless RTL allocations. */
-+ reg = gen_raw_REG (VOIDmode, -1);
-+
- insn = emit_insn (gen_rtx_SET (0, NULL_RTX, NULL_RTX));
- pat = PATTERN (insn);
-
-@@ -224,11 +229,11 @@ init_expr_once ()
- mode = (enum machine_mode) ((int) mode + 1))
- {
- int regno;
-- rtx reg;
-
- direct_load[(int) mode] = direct_store[(int) mode] = 0;
- PUT_MODE (mem, mode);
- PUT_MODE (mem1, mode);
-+ PUT_MODE (reg, mode);
-
- /* See if there is some register that can be used in this mode and
- directly loaded or stored from memory. */
-@@ -241,7 +246,7 @@ init_expr_once ()
- if (! HARD_REGNO_MODE_OK (regno, mode))
- continue;
-
-- reg = gen_rtx_REG (mode, regno);
-+ REGNO (reg) = regno;
-
- SET_SRC (pat) = mem;
- SET_DEST (pat) = reg;
-@@ -2280,7 +2285,7 @@ use_regs (call_fusage, regno, nregs)
- abort ();
-
- for (i = 0; i < nregs; i++)
-- use_reg (call_fusage, gen_rtx_REG (reg_raw_mode[regno + i], regno + i));
-+ use_reg (call_fusage, regno_reg_rtx[regno + i]);
- }
-
- /* Add USE expressions to *CALL_FUSAGE for each REG contained in the
---- gcc/flow.c.jj Tue Apr 23 20:26:35 2002
-+++ gcc/flow.c Thu Jun 20 14:12:05 2002
-@@ -1721,8 +1721,7 @@ propagate_one_insn (pbi, insn)
- if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
- {
- /* We do not want REG_UNUSED notes for these registers. */
-- mark_set_1 (pbi, CLOBBER, gen_rtx_REG (reg_raw_mode[i], i),
-- cond, insn,
-+ mark_set_1 (pbi, CLOBBER, regno_reg_rtx[i], cond, insn,
- pbi->flags & ~(PROP_DEATH_NOTES | PROP_REG_INFO));
- }
- }
-@@ -1770,8 +1769,7 @@ propagate_one_insn (pbi, insn)
- so they are made live. */
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- if (global_regs[i])
-- mark_used_reg (pbi, gen_rtx_REG (reg_raw_mode[i], i),
-- cond, insn);
-+ mark_used_reg (pbi, regno_reg_rtx[i], cond, insn);
- }
- }
-
-@@ -2769,7 +2767,7 @@ mark_set_1 (pbi, code, reg, cond, insn,
- if (! REGNO_REG_SET_P (pbi->reg_live, i))
- REG_NOTES (insn)
- = alloc_EXPR_LIST (REG_UNUSED,
-- gen_rtx_REG (reg_raw_mode[i], i),
-+ regno_reg_rtx[i],
- REG_NOTES (insn));
- }
- }
-@@ -3577,7 +3575,7 @@ mark_used_reg (pbi, reg, cond, insn)
- && ! dead_or_set_regno_p (insn, i))
- REG_NOTES (insn)
- = alloc_EXPR_LIST (REG_DEAD,
-- gen_rtx_REG (reg_raw_mode[i], i),
-+ regno_reg_rtx[i],
- REG_NOTES (insn));
- }
- }
---- gcc/reload1.c.jj Wed May 22 14:17:55 2002
-+++ gcc/reload1.c Thu Jun 20 17:05:46 2002
-@@ -444,7 +444,7 @@ static int constraint_accepts_reg_p PARA
- static void reload_cse_regs_1 PARAMS ((rtx));
- static int reload_cse_noop_set_p PARAMS ((rtx));
- static int reload_cse_simplify_set PARAMS ((rtx, rtx));
--static int reload_cse_simplify_operands PARAMS ((rtx));
-+static int reload_cse_simplify_operands PARAMS ((rtx, rtx));
- static void reload_combine PARAMS ((void));
- static void reload_combine_note_use PARAMS ((rtx *, rtx));
- static void reload_combine_note_store PARAMS ((rtx, rtx, void *));
-@@ -459,7 +459,7 @@ static HOST_WIDE_INT sext_for_mode PARAM
- static void failed_reload PARAMS ((rtx, int));
- static int set_reload_reg PARAMS ((int, int));
- static void reload_cse_delete_noop_set PARAMS ((rtx, rtx));
--static void reload_cse_simplify PARAMS ((rtx));
-+static void reload_cse_simplify PARAMS ((rtx, rtx));
- void fixup_abnormal_edges PARAMS ((void));
- extern void dump_needs PARAMS ((struct insn_chain *));
- \f
-@@ -7161,8 +7161,7 @@ emit_reload_insns (chain)
- for (k = 1; k < nnr; k++)
- reg_last_reload_reg[nregno + k]
- = (nr == nnr
-- ? gen_rtx_REG (reg_raw_mode[REGNO (rld[r].reg_rtx) + k],
-- REGNO (rld[r].reg_rtx) + k)
-+ ? regno_reg_rtx[REGNO (rld[r].reg_rtx) + k]
- : 0);
-
- /* Now do the inverse operation. */
-@@ -7211,8 +7210,7 @@ emit_reload_insns (chain)
- for (k = 1; k < nnr; k++)
- reg_last_reload_reg[nregno + k]
- = (nr == nnr
-- ? gen_rtx_REG (reg_raw_mode[REGNO (rld[r].reg_rtx) + k],
-- REGNO (rld[r].reg_rtx) + k)
-+ ? regno_reg_rtx[REGNO (rld[r].reg_rtx) + k]
- : 0);
-
- /* Unless we inherited this reload, show we haven't
-@@ -8061,8 +8059,9 @@ reload_cse_noop_set_p (set)
-
- /* Try to simplify INSN. */
- static void
--reload_cse_simplify (insn)
-+reload_cse_simplify (insn, testreg)
- rtx insn;
-+ rtx testreg;
- {
- rtx body = PATTERN (insn);
-
-@@ -8089,7 +8088,7 @@ reload_cse_simplify (insn)
- if (count > 0)
- apply_change_group ();
- else
-- reload_cse_simplify_operands (insn);
-+ reload_cse_simplify_operands (insn, testreg);
- }
- else if (GET_CODE (body) == PARALLEL)
- {
-@@ -8132,7 +8131,7 @@ reload_cse_simplify (insn)
- if (count > 0)
- apply_change_group ();
- else
-- reload_cse_simplify_operands (insn);
-+ reload_cse_simplify_operands (insn, testreg);
- }
- }
-
-@@ -8158,6 +8157,7 @@ reload_cse_regs_1 (first)
- rtx first;
- {
- rtx insn;
-+ rtx testreg = gen_raw_REG (VOIDmode, -1);
-
- cselib_init ();
- init_alias_analysis ();
-@@ -8165,7 +8165,7 @@ reload_cse_regs_1 (first)
- for (insn = first; insn; insn = NEXT_INSN (insn))
- {
- if (INSN_P (insn))
-- reload_cse_simplify (insn);
-+ reload_cse_simplify (insn, testreg);
-
- cselib_process_insn (insn);
- }
-@@ -8336,8 +8336,9 @@ reload_cse_simplify_set (set, insn)
- hard registers. */
-
- static int
--reload_cse_simplify_operands (insn)
-+reload_cse_simplify_operands (insn, testreg)
- rtx insn;
-+ rtx testreg;
- {
- int i, j;
-
-@@ -8357,7 +8358,6 @@ reload_cse_simplify_operands (insn)
- int *op_alt_regno[MAX_RECOG_OPERANDS];
- /* Array of alternatives, sorted in order of decreasing desirability. */
- int *alternative_order;
-- rtx reg = gen_rtx_REG (VOIDmode, -1);
-
- extract_insn (insn);
-
-@@ -8441,8 +8441,8 @@ reload_cse_simplify_operands (insn)
- if (! TEST_HARD_REG_BIT (equiv_regs[i], regno))
- continue;
-
-- REGNO (reg) = regno;
-- PUT_MODE (reg, mode);
-+ REGNO (testreg) = regno;
-+ PUT_MODE (testreg, mode);
-
- /* We found a register equal to this operand. Now look for all
- alternatives that can accept this register and have not been
-@@ -8484,10 +8484,10 @@ reload_cse_simplify_operands (insn)
- alternative yet and the operand being replaced is not
- a cheap CONST_INT. */
- if (op_alt_regno[i][j] == -1
-- && reg_fits_class_p (reg, class, 0, mode)
-+ && reg_fits_class_p (testreg, class, 0, mode)
- && (GET_CODE (recog_data.operand[i]) != CONST_INT
- || (rtx_cost (recog_data.operand[i], SET)
-- > rtx_cost (reg, SET))))
-+ > rtx_cost (testreg, SET))))
- {
- alternative_nregs[j]++;
- op_alt_regno[i][j] = regno;
---- gcc/alias.c.jj Thu Jun 20 12:43:03 2002
-+++ gcc/alias.c Thu Jun 20 18:36:24 2002
-@@ -149,6 +149,10 @@ static rtx *reg_base_value;
- static rtx *new_reg_base_value;
- static unsigned int reg_base_value_size; /* size of reg_base_value array */
-
-+/* Static hunks of RTL used by the aliasing code; these are initialized
-+ once per function to avoid unnecessary RTL allocations. */
-+static rtx static_reg_base_value[FIRST_PSEUDO_REGISTER];
-+
- #define REG_BASE_VALUE(X) \
- (REGNO (X) < reg_base_value_size \
- ? reg_base_value[REGNO (X)] : 0)
-@@ -2429,8 +2433,6 @@ mark_constant_function ()
- }
-
-
--static HARD_REG_SET argument_registers;
--
- void
- init_alias_once ()
- {
-@@ -2439,13 +2441,26 @@ init_alias_once ()
- #ifndef OUTGOING_REGNO
- #define OUTGOING_REGNO(N) N
- #endif
-+ ggc_add_rtx_root (static_reg_base_value, (int) FIRST_PSEUDO_REGISTER);
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- /* Check whether this register can hold an incoming pointer
- argument. FUNCTION_ARG_REGNO_P tests outgoing register
- numbers, so translate if necessary due to register windows. */
- if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
- && HARD_REGNO_MODE_OK (i, Pmode))
-- SET_HARD_REG_BIT (argument_registers, i);
-+ static_reg_base_value[i]
-+ = gen_rtx_ADDRESS (VOIDmode, gen_rtx_REG (Pmode, i));
-+
-+ static_reg_base_value[STACK_POINTER_REGNUM]
-+ = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
-+ static_reg_base_value[ARG_POINTER_REGNUM]
-+ = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
-+ static_reg_base_value[FRAME_POINTER_REGNUM]
-+ = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
-+#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
-+ static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
-+ = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
-+#endif
-
- alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
- }
-@@ -2535,21 +2550,8 @@ init_alias_analysis ()
- The address expression is VOIDmode for an argument and
- Pmode for other registers. */
-
-- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-- if (TEST_HARD_REG_BIT (argument_registers, i))
-- new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
-- gen_rtx_REG (Pmode, i));
--
-- new_reg_base_value[STACK_POINTER_REGNUM]
-- = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
-- new_reg_base_value[ARG_POINTER_REGNUM]
-- = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
-- new_reg_base_value[FRAME_POINTER_REGNUM]
-- = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
--#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
-- new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
-- = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
--#endif
-+ memcpy (new_reg_base_value, static_reg_base_value,
-+ FIRST_PSEUDO_REGISTER * sizeof (rtx));
-
- /* Walk the insns adding values to the new_reg_base_value array. */
- for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
---- gcc/caller-save.c.jj Wed Jan 2 12:47:35 2002
-+++ gcc/caller-save.c Thu Jun 20 17:49:47 2002
-@@ -115,6 +115,9 @@ init_caller_save ()
- rtx address;
- int i, j;
- enum machine_mode mode;
-+ rtx savepat, restpat;
-+ rtx test_reg, test_mem;
-+ rtx saveinsn, restinsn;
-
- /* First find all the registers that we need to deal with and all
- the modes that they can have. If we can't find a mode to use,
-@@ -179,22 +182,30 @@ init_caller_save ()
- address = addr_reg;
-
- /* Next we try to form an insn to save and restore the register. We
-- see if such an insn is recognized and meets its constraints. */
-+ see if such an insn is recognized and meets its constraints.
-
-- start_sequence ();
-+ To avoid lots of unnecessary RTL allocation, we construct all the RTL
-+ once, then modify the memory and register operands in-place. */
-+
-+ test_reg = gen_rtx_REG (VOIDmode, 0);
-+ test_mem = gen_rtx_MEM (VOIDmode, address);
-+ savepat = gen_rtx_SET (VOIDmode, test_mem, test_reg);
-+ restpat = gen_rtx_SET (VOIDmode, test_reg, test_mem);
-+ saveinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, savepat, -1, 0, 0);
-+ restinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, restpat, -1, 0, 0);
-
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- for (mode = 0 ; mode < MAX_MACHINE_MODE; mode++)
- if (HARD_REGNO_MODE_OK (i, mode))
- {
-- rtx mem = gen_rtx_MEM (mode, address);
-- rtx reg = gen_rtx_REG (mode, i);
-- rtx savepat = gen_rtx_SET (VOIDmode, mem, reg);
-- rtx restpat = gen_rtx_SET (VOIDmode, reg, mem);
-- rtx saveinsn = emit_insn (savepat);
-- rtx restinsn = emit_insn (restpat);
- int ok;
-
-+ /* Update the register number and modes of the register
-+ and memory operand. */
-+ REGNO (test_reg) = i;
-+ PUT_MODE (test_reg, mode);
-+ PUT_MODE (test_mem, mode);
-+
- reg_save_code[i][mode] = recog_memoized (saveinsn);
- reg_restore_code[i][mode] = recog_memoized (restinsn);
-
-@@ -232,8 +243,6 @@ init_caller_save ()
- SET_HARD_REG_BIT (call_fixed_reg_set, i);
- }
- }
--
-- end_sequence ();
- }
- \f
- /* Initialize save areas by showing that we haven't allocated any yet. */
---- gcc/rtl.h.jj Tue May 21 20:19:51 2002
-+++ gcc/rtl.h Thu Jun 20 18:01:01 2002
-@@ -1964,6 +1964,7 @@ extern int reg_classes_intersect_p PARAM
- extern int reg_class_subset_p PARAMS ((enum reg_class, enum reg_class));
- extern void globalize_reg PARAMS ((int));
- extern void init_regs PARAMS ((void));
-+extern void init_fake_stack_mems PARAMS ((void));
- extern void init_reg_sets PARAMS ((void));
- extern void regset_release_memory PARAMS ((void));
- extern void regclass_init PARAMS ((void));
---- gcc/regclass.c.jj Wed Jun 19 15:11:11 2002
-+++ gcc/regclass.c Thu Jun 20 18:01:01 2002
-@@ -605,11 +605,16 @@ init_regs ()
- init_reg_sets_1 ();
-
- init_reg_modes ();
-+}
-
-+/* Initialize some fake stack-frame MEM references for use in
-+ memory_move_secondary_cost. */
-+
-+void
-+init_fake_stack_mems ()
-+{
- #ifdef HAVE_SECONDARY_RELOADS
- {
-- /* Make some fake stack-frame MEM references for use in
-- memory_move_secondary_cost. */
- int i;
-
- for (i = 0; i < MAX_MACHINE_MODE; i++)
---- gcc/toplev.c.jj Thu May 30 11:08:44 2002
-+++ gcc/toplev.c Thu Jun 20 18:01:01 2002
-@@ -5058,6 +5058,9 @@ lang_independent_init ()
- init_stringpool ();
- init_obstacks ();
-
-+ /* init_emit_once uses reg_raw_mode and therefore must be called
-+ after init_regs which initialized reg_raw_mode. */
-+ init_regs ();
- init_emit_once (debug_info_level == DINFO_LEVEL_NORMAL
- || debug_info_level == DINFO_LEVEL_VERBOSE
- #ifdef VMS_DEBUGGING_INFO
-@@ -5066,7 +5069,7 @@ lang_independent_init ()
- #endif
- || flag_test_coverage
- || warn_notreached);
-- init_regs ();
-+ init_fake_stack_mems ();
- init_alias_once ();
- init_stmt ();
- init_loop ();
---- gcc/loop.c.jj Wed Jun 19 15:10:51 2002
-+++ gcc/loop.c Thu Jun 20 18:22:01 2002
-@@ -9541,7 +9541,7 @@ loop_regs_scan (loop, extra_size)
- if (LOOP_INFO (loop)->has_call)
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)
-- && rtx_varies_p (gen_rtx_REG (Pmode, i), /*for_alias=*/1))
-+ && rtx_varies_p (regno_reg_rtx[i], 1))
- {
- regs->array[i].may_not_optimize = 1;
- regs->array[i].set_in_loop = 1;
+++ /dev/null
-2002-06-11 Richard Henderson <rth@redhat.com>
-
- * caller-save.c (init_caller_save): Clear INSN_CODE each iteration.
-
---- gcc/caller-save.c.jj Fri Jun 21 01:16:13 2002
-+++ gcc/caller-save.c Thu Jul 11 10:27:57 2002
-@@ -206,6 +206,10 @@ init_caller_save ()
- PUT_MODE (test_reg, mode);
- PUT_MODE (test_mem, mode);
-
-+ /* Force re-recognition of the modified insns. */
-+ INSN_CODE (saveinsn) = -1;
-+ INSN_CODE (restinsn) = -1;
-+
- reg_save_code[i][mode] = recog_memoized (saveinsn);
- reg_restore_code[i][mode] = recog_memoized (restinsn);
-
+++ /dev/null
-2002-05-29 Richard Henderson <rth@redhat.com>
-
- * config/i386/biarch64.h (TARGET_64BIT_DEFAULT): Define with value.
- (TARGET_BI_ARCH): Likewise.
- * config/i386/i386.h: Test TARGET_64BIT_DEFAULT by value.
- (TARGET_SWITCHES): Combine target defaults here not in TARGET_DEFAULT.
- (TARGET_64BIT_DEFAULT): Default to 0.
- (TARGET_DEFAULT): Default to MASK_OMIT_LEAF_FRAME_POINTER.
-
---- gcc/config/i386/biarch64.h.jj Tue Oct 2 12:59:38 2001
-+++ gcc/config/i386/biarch64.h Tue Jun 4 15:11:52 2002
-@@ -21,5 +21,5 @@ along with GNU CC; see the file COPYING.
- the Free Software Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
--#define TARGET_64BIT_DEFAULT
--#define TARGET_BI_ARCH
-+#define TARGET_64BIT_DEFAULT MASK_64BIT
-+#define TARGET_BI_ARCH 1
---- gcc/config/i386/i386.h.jj Thu Apr 18 19:02:03 2002
-+++ gcc/config/i386/i386.h Tue Jun 4 15:13:40 2002
-@@ -192,7 +192,7 @@ extern int target_flags;
- #ifdef TARGET_BI_ARCH
- #define TARGET_64BIT (target_flags & MASK_64BIT)
- #else
--#ifdef TARGET_64BIT_DEFAULT
-+#if TARGET_64BIT_DEFAULT
- #define TARGET_64BIT 1
- #else
- #define TARGET_64BIT 0
-@@ -381,14 +381,14 @@ extern int x86_prefetch_sse;
- { "no-red-zone", MASK_NO_RED_ZONE, \
- N_("Do not use red-zone in the x86-64 code") }, \
- SUBTARGET_SWITCHES \
-- { "", TARGET_DEFAULT, 0 }}
-+ { "", TARGET_DEFAULT | TARGET_64BIT_DEFAULT | TARGET_SUBTARGET_DEFAULT, 0 }}
-
--#ifdef TARGET_64BIT_DEFAULT
--#define TARGET_DEFAULT (MASK_64BIT | TARGET_SUBTARGET_DEFAULT)
--#else
--#define TARGET_DEFAULT TARGET_SUBTARGET_DEFAULT
-+#ifndef TARGET_64BIT_DEFAULT
-+#define TARGET_64BIT_DEFAULT 0
- #endif
-
-+#define TARGET_DEFAULT MASK_OMIT_LEAF_FRAME_POINTER
-+
- /* Which processor to schedule for. The cpu attribute defines a list that
- mirrors this list, so changes to i386.md must be made at the same time. */
-
-@@ -624,13 +624,13 @@ extern int ix86_arch;
-
- #ifndef CPP_CPU_SPEC
- #ifdef TARGET_BI_ARCH
--#ifdef TARGET_64BIT_DEFAULT
-+#if TARGET_64BIT_DEFAULT
- #define CPP_CPU_SPEC "%{m32:%(cpp_cpu32)}%{!m32:%(cpp_cpu64)} %(cpp_cpucommon)"
- #else
- #define CPP_CPU_SPEC "%{m64:%(cpp_cpu64)}%{!m64:%(cpp_cpu32)} %(cpp_cpucommon)"
- #endif
- #else
--#ifdef TARGET_64BIT_DEFAULT
-+#if TARGET_64BIT_DEFAULT
- #define CPP_CPU_SPEC "%(cpp_cpu64) %(cpp_cpucommon)"
- #else
- #define CPP_CPU_SPEC "%(cpp_cpu32) %(cpp_cpucommon)"
-@@ -695,7 +695,7 @@ extern int ix86_arch;
- #define DOUBLE_TYPE_SIZE 64
- #define LONG_LONG_TYPE_SIZE 64
-
--#if defined (TARGET_BI_ARCH) || defined (TARGET_64BIT_DEFAULT)
-+#if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT
- #define MAX_BITS_PER_WORD 64
- #define MAX_LONG_TYPE_SIZE 64
- #else
+++ /dev/null
-Argh, GDB is not ready.
-
---- gcc/config/i386/i386.h.jj 2002-08-28 11:20:27.000000000 +0200
-+++ gcc/config/i386/i386.h 2002-08-28 22:01:26.000000000 +0200
-@@ -390,7 +390,7 @@ extern int x86_prefetch_sse;
- #define TARGET_64BIT_DEFAULT 0
- #endif
-
--#define TARGET_DEFAULT MASK_OMIT_LEAF_FRAME_POINTER
-+#define TARGET_DEFAULT 0
-
- /* Which processor to schedule for. The cpu attribute defines a list that
- mirrors this list, so changes to i386.md must be made at the same time. */
+++ /dev/null
-2002-06-04 Richard Henderson <rth@redhat.com>
- Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.c (USE_HIDDEN_LINKONCE): New.
- (ix86_asm_file_end): If USE_HIDDEN_LINKONCE, emit get_pc thunks
- into linkonce sections.
- (load_pic_register): Set up pic_label_name for it.
-
---- gcc/config/i386/i386.c.jj Mon Jun 3 17:24:13 2002
-+++ gcc/config/i386/i386.c Tue Jun 4 15:49:17 2002
-@@ -3786,6 +3786,12 @@ ix86_setup_frame_addresses ()
- cfun->machine->accesses_prev_frame = 1;
- }
- \f
-+#if defined(HAVE_GAS_HIDDEN) && defined(SUPPORTS_ONE_ONLY)
-+# define USE_HIDDEN_LINKONCE 1
-+#else
-+# define USE_HIDDEN_LINKONCE 0
-+#endif
-+
- static char pic_label_name[32];
-
- /* This function generates code for -fpic that loads %ebx with
-@@ -3800,10 +3806,6 @@ ix86_asm_file_end (file)
- if (! TARGET_DEEP_BRANCH_PREDICTION || pic_label_name[0] == 0)
- return;
-
-- /* ??? Binutils 2.10 and earlier has a linkonce elimination bug related
-- to updating relocations to a section being discarded such that this
-- doesn't work. Ought to detect this at configure time. */
--#if 0
- /* The trick here is to create a linkonce section containing the
- pic label thunk, but to refer to it with an internal label.
- Because the label is internal, we don't have inter-dso name
-@@ -3811,28 +3813,27 @@ ix86_asm_file_end (file)
-
- In order to use these macros, however, we must create a fake
- function decl. */
-- if (targetm.have_named_sections)
-+ if (USE_HIDDEN_LINKONCE && targetm.have_named_sections)
- {
- tree decl = build_decl (FUNCTION_DECL,
-- get_identifier ("i686.get_pc_thunk"),
-+ get_identifier (pic_label_name),
- error_mark_node);
-+ TREE_PUBLIC (decl) = 1;
-+ TREE_STATIC (decl) = 1;
- DECL_ONE_ONLY (decl) = 1;
- UNIQUE_SECTION (decl, 0);
-- named_section (decl, NULL);
-+ named_section (decl, NULL, 0);
-+ ASM_GLOBALIZE_LABEL (file, pic_label_name);
-+ fputs ("\t.hidden\t", file);
-+ assemble_name (file, pic_label_name);
-+ fputc ('\n', file);
-+ ASM_DECLARE_FUNCTION_NAME (file, pic_label_name, decl);
- }
- else
--#else
-- text_section ();
--#endif
--
-- /* This used to call ASM_DECLARE_FUNCTION_NAME() but since it's an
-- internal (non-global) label that's being emitted, it didn't make
-- sense to have .type information for local labels. This caused
-- the SCO OpenServer 5.0.4 ELF assembler grief (why are you giving
-- me debug info for a label that you're declaring non-global?) this
-- was changed to call ASM_OUTPUT_LABEL() instead. */
--
-- ASM_OUTPUT_LABEL (file, pic_label_name);
-+ {
-+ text_section ();
-+ ASM_OUTPUT_LABEL (file, pic_label_name);
-+ }
-
- xops[0] = pic_offset_table_rtx;
- xops[1] = gen_rtx_MEM (SImode, stack_pointer_rtx);
-@@ -3853,7 +3854,12 @@ load_pic_register ()
- if (TARGET_DEEP_BRANCH_PREDICTION)
- {
- if (! pic_label_name[0])
-- ASM_GENERATE_INTERNAL_LABEL (pic_label_name, "LPR", 0);
-+ {
-+ if (USE_HIDDEN_LINKONCE && targetm.have_named_sections)
-+ strcpy (pic_label_name, "__i686.get_pc_thunk.bx");
-+ else
-+ ASM_GENERATE_INTERNAL_LABEL (pic_label_name, "LPR", 0);
-+ }
- pclab = gen_rtx_MEM (QImode, gen_rtx_SYMBOL_REF (Pmode, pic_label_name));
- }
- else
+++ /dev/null
-2002-05-30 Richard Henderson <rth@redhat.com>
-
- * defaults.h (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): Kill.
- * toplev.c (process_options): Don't check it.
- * doc/tm.texi: Don't document it.
- * config/i386/linux.h (SUBTARGET_FRAME_POINTER_REQUIRED): New.
- (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): Kill.
- * config/i386/i386.c (ix86_frame_pointer_required): Suppress leaf
- frame pointer optimization if current_function_profile.
-
---- gcc/doc/tm.texi.jj Fri May 3 19:25:59 2002
-+++ gcc/doc/tm.texi Tue Jun 4 23:18:43 2002
-@@ -4077,22 +4077,6 @@ must not use the @var{labelno} argument
- @item PROFILE_BEFORE_PROLOGUE
- Define this macro if the code for function profiling should come before
- the function prologue. Normally, the profiling code comes after.
--
--
--@findex TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
--@item TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
--On some targets, it is impossible to use profiling when the frame
--pointer has been omitted. For example, on x86 GNU/Linux systems,
--the @code{mcount} routine provided by the GNU C Library finds the
--address of the routine that called the routine that called @code{mcount}
--by looking in the immediate caller's stack frame. If the immediate
--caller has no frame pointer, this lookup will fail.
--
--By default, GCC assumes that the target does allow profiling when the
--frame pointer is omitted. This macro should be defined to a C
--expression that evaluates to @code{false} if the target does not allow
--profiling when the frame pointer is omitted.
--
- @end table
-
- @node Tail Calls
---- gcc/config/i386/i386.c.jj Tue Jun 4 21:13:34 2002
-+++ gcc/config/i386/i386.c Tue Jun 4 23:18:43 2002
-@@ -3827,7 +3827,8 @@ ix86_frame_pointer_required ()
- /* In override_options, TARGET_OMIT_LEAF_FRAME_POINTER turns off
- the frame pointer by default. Turn it back on now if we've not
- got a leaf function. */
-- if (TARGET_OMIT_LEAF_FRAME_POINTER && ! leaf_function_p ())
-+ if (TARGET_OMIT_LEAF_FRAME_POINTER
-+ && (!current_function_is_leaf || current_function_profile))
- return 1;
-
- return 0;
---- gcc/config/i386/linux.h.jj Tue Apr 16 08:15:02 2002
-+++ gcc/config/i386/linux.h Tue Jun 4 23:18:43 2002
-@@ -63,14 +63,11 @@ Boston, MA 02111-1307, USA. */
- fprintf (FILE, "\tcall\tmcount\n"); \
- }
-
--/* True if it is possible to profile code that does not have a frame
-- pointer.
--
-- The GLIBC version of mcount for the x86 assumes that there is a
-+/* The GLIBC version of mcount for the x86 assumes that there is a
- frame, so we cannot allow profiling without a frame pointer. */
-
--#undef TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
--#define TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER false
-+#undef SUBTARGET_FRAME_POINTER_REQUIRED
-+#define SUBTARGET_FRAME_POINTER_REQUIRED current_function_profile
-
- #undef SIZE_TYPE
- #define SIZE_TYPE "unsigned int"
---- gcc/defaults.h.jj Fri May 3 19:24:51 2002
-+++ gcc/defaults.h Tue Jun 4 23:18:43 2002
-@@ -398,13 +398,6 @@ do { \
- ? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta)
- #endif
-
--/* True if it is possible to profile code that does not have a frame
-- pointer. */
--
--#ifndef TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
--#define TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER true
--#endif
--
- #ifndef DEFAULT_GDB_EXTENSIONS
- #define DEFAULT_GDB_EXTENSIONS 1
- #endif
---- gcc/toplev.c.jj Thu May 30 11:08:44 2002
-+++ gcc/toplev.c Tue Jun 4 23:19:11 2002
-@@ -4908,16 +4908,6 @@ process_options ()
- warning ("this target machine does not have delayed branches");
- #endif
-
-- /* Some operating systems do not allow profiling without a frame
-- pointer. */
-- if (!TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
-- && profile_flag
-- && flag_omit_frame_pointer)
-- {
-- error ("profiling does not work without a frame pointer");
-- flag_omit_frame_pointer = 0;
-- }
--
- user_label_prefix = USER_LABEL_PREFIX;
- if (flag_leading_underscore != -1)
- {
+++ /dev/null
-From gcc-patches-return-67062-listarch-gcc-patches=gcc dot gnu dot org at gcc dot gnu dot org Fri Aug 30 10:39:38 2002
-Return-Path: <gcc-patches-return-67062-listarch-gcc-patches=gcc dot gnu dot org at gcc dot gnu dot org>
-Delivered-To: listarch-gcc-patches at gcc dot gnu dot org
-Received: (qmail 32272 invoked by alias); 30 Aug 2002 10:39:36 -0000
-Mailing-List: contact gcc-patches-help at gcc dot gnu dot org; run by ezmlm
-Precedence: bulk
-List-Archive: <http://gcc.gnu.org/ml/gcc-patches/>
-List-Post: <mailto:gcc-patches at gcc dot gnu dot org>
-List-Help: <mailto:gcc-patches-help at gcc dot gnu dot org>
-Sender: gcc-patches-owner at gcc dot gnu dot org
-Delivered-To: mailing list gcc-patches at gcc dot gnu dot org
-Received: (qmail 32195 invoked from network); 30 Aug 2002 10:39:32 -0000
-Received: from unknown (HELO sunsite.mff.cuni.cz) (195.113.19.66)
- by sources dot redhat dot com with SMTP; 30 Aug 2002 10:39:32 -0000
-Received: (from jakub@localhost)
- by sunsite dot mff dot cuni dot cz (8 dot 11 dot 6/8 dot 11 dot 6) id g7UAcS700895;
- Fri, 30 Aug 2002 12:38:28 +0200
-Date: Fri, 30 Aug 2002 12:38:28 +0200
-From: Jakub Jelinek <jakub at redhat dot com>
-To: bkoz at redhat dot com, mark at codesourcery dot com
-Cc: libstdc++ at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org, drepper at redhat dot com,
- roland at redhat dot com
-Subject: [PATCH] Fix libstdc++-v3 on GLIBC 2.3+
-Message-ID: <20020830123828.Y1013@sunsite.ms.mff.cuni.cz>
-Reply-To: Jakub Jelinek <jakub at redhat dot com>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=iso-8859-1
-Content-Disposition: inline
-Content-Transfer-Encoding: 8bit
-User-Agent: Mutt/1.2.5.1i
-
-Hi!
-
-The following patch fixes libstdc++-v3 compilation and use on GLIBC 2.2.9x+.
-It passed libstdc++-v3 make check with 24 XPASSes and 1 FAIL - the remaining
-2 missing XPASSes (ie. the only 2 XFAILs) are:
-XFAIL: 22_locale/messages_byname.cc execution test
-XFAIL: 22_locale/messages_members_char.cc execution test
-which fail because of a glibc bug Roland is working on.
-
-The only difference on libstdc++.so symbols this has is that
-_ZNKSt8messagesIwE6do_getEiiiRKSbIwSt11char_traitsIwESaIwEE
-symbol is no longer weak (ie. T instead of W in nm output),
-which doesn't change anything for binary compatibility IMHO.
-
-Ok to commit? 3.2 branch too?
-
-2002-08-30 Jakub Jelinek <jakub@redhat.com>
-
- * config/locale/generic/c++locale_internal.h: New header.
- * config/locale/gnu/c++locale_internal.h: New header.
- * config/locale/gnu/c_locale.cc: Include it.
- * config/locale/gnu/collate_members.cc: Include it.
- * config/locale/gnu/ctype_members.cc: Include it.
- * config/locale/gnu/messages_members.cc: Include it.
- * config/locale/gnu/monetary_members.cc: Include it.
- * config/locale/gnu/numeric_members.cc: Include it.
- * config/locale/gnu/time_members.cc: Include it.
- (_M_put): Reorder __strftime_l and __wcsftime_l arguments to match
- glibc.
- (_M_initialize_timepunct): Initialize _M_c_locale_timepunct for
- C locale.
- * acinclude.m4: Include string.h when testing strcoll_l.
- For glibc 2.3 provide __-prefixed prototypes.
- (CLOCALE_INTERNAL_H): Set, add AC_LINK_FILES line.
- * aclocal.m4, configure: Rebuilt.
-
-2002-08-29 Benjamin Kosnik <bkoz@redhat.com>
-
- * include/bits/locale_facets.h: Add declaration of specialization
- here.
- * config/locale/gnu/messages_members.cc: Add specialization for
- messages<wchar_t>.
- * config/locale/gnu/messages_members.h: Remove generic definition
- of do_get.
-
---- libstdc++-v3/config/locale/generic/c++locale_internal.h.jj 2002-08-29 14:57:21.000000000 +0200
-+++ libstdc++-v3/config/locale/generic/c++locale_internal.h 2002-08-30 12:05:10.000000000 +0200
-@@ -0,0 +1,30 @@
-+// Locale internal implementation header -*- C++ -*-
-+
-+// Copyright (C) 2002 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.
-+
-+// The generic locale code doesn't need to do anything here (yet)
---- libstdc++-v3/config/locale/gnu/c_locale.cc.jj 2002-04-23 20:30:31.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/c_locale.cc 2002-08-30 12:09:12.000000000 +0200
-@@ -36,6 +36,7 @@
- #include <locale>
- #include <stdexcept>
- #include <langinfo.h>
-+#include "c++locale_internal.h"
-
- namespace std
- {
---- libstdc++-v3/config/locale/gnu/collate_members.cc.jj 2002-04-23 20:30:31.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/collate_members.cc 2002-08-30 12:09:12.000000000 +0200
-@@ -1,6 +1,6 @@
- // std::collate implementation details, GNU version -*- C++ -*-
-
--// Copyright (C) 2001 Free Software Foundation, Inc.
-+// Copyright (C) 2001, 2002 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
-@@ -34,6 +34,7 @@
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- #include <locale>
-+#include "c++locale_internal.h"
-
- namespace std
- {
---- libstdc++-v3/config/locale/gnu/ctype_members.cc.jj 2002-05-25 00:18:17.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/ctype_members.cc 2002-08-30 12:09:12.000000000 +0200
-@@ -34,6 +34,7 @@
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- #include <locale>
-+#include "c++locale_internal.h"
-
- namespace std
- {
---- libstdc++-v3/config/locale/gnu/messages_members.cc.jj 2002-05-22 15:38:28.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/messages_members.cc 2002-08-30 12:09:12.000000000 +0200
-@@ -34,6 +34,7 @@
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- #include <locale>
-+#include "c++locale_internal.h"
-
- namespace std
- {
-@@ -56,4 +57,25 @@ namespace std
- return string(__msg);
- #endif
- }
-+
-+#ifdef _GLIBCPP_USE_WCHAR_T
-+ template<>
-+ wstring
-+ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
-+ {
-+# if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __c_locale __old = __uselocale(_M_c_locale_messages);
-+ char* __msg = gettext(_M_convert_to_char(__dfault));
-+ __uselocale(__old);
-+ return _M_convert_from_char(__msg);
-+# else
-+ char* __old = strdup(setlocale(LC_ALL, NULL));
-+ setlocale(LC_ALL, _M_name_messages);
-+ char* __msg = gettext(_M_convert_to_char(__dfault));
-+ setlocale(LC_ALL, __old);
-+ free(__old);
-+ return _M_convert_from_char(__msg);
-+# endif
-+ }
-+#endif
- }
---- libstdc++-v3/config/locale/gnu/monetary_members.cc.jj 2002-07-27 01:31:05.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/monetary_members.cc 2002-08-30 12:09:12.000000000 +0200
-@@ -34,6 +34,7 @@
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- #include <locale>
-+#include "c++locale_internal.h"
-
- namespace std
- {
---- libstdc++-v3/config/locale/gnu/numeric_members.cc.jj 2002-04-23 20:30:31.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/numeric_members.cc 2002-08-30 12:09:12.000000000 +0200
-@@ -34,6 +34,7 @@
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- #include <locale>
-+#include "c++locale_internal.h"
-
- namespace std
- {
---- libstdc++-v3/config/locale/gnu/time_members.cc.jj 2002-05-22 15:38:30.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/time_members.cc 2002-08-30 12:09:12.000000000 +0200
-@@ -35,6 +35,7 @@
- // Written by Benjamin Kosnik <bkoz@redhat.com>
-
- #include <locale>
-+#include "c++locale_internal.h"
-
- namespace std
- {
-@@ -52,7 +53,7 @@ namespace std
- const tm* __tm) const
- {
- #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-- __strftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
-+ __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
- #else
- char* __old = strdup(setlocale(LC_ALL, NULL));
- setlocale(LC_ALL, _M_name_timepunct);
-@@ -69,6 +70,9 @@ namespace std
- if (__cloc == _S_c_locale)
- {
- // "C" locale
-+
-+ _M_c_locale_timepunct = _S_c_locale;
-+
- _M_date_format = "%m/%d/%y";
- _M_date_era_format = "%m/%d/%y";
- _M_time_format = "%H:%M:%S";
-@@ -202,7 +206,7 @@ namespace std
- const tm* __tm) const
- {
- #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-- __wcsftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
-+ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
- #else
- char* __old = strdup(setlocale(LC_ALL, NULL));
- setlocale(LC_ALL, _M_name_timepunct);
-@@ -219,6 +223,9 @@ namespace std
- if (__cloc == _S_c_locale)
- {
- // "C" locale
-+
-+ _M_c_locale_timepunct = _S_c_locale;
-+
- _M_date_format = L"%m/%d/%y";
- _M_date_era_format = L"%m/%d/%y";
- _M_time_format = L"%H:%M:%S";
---- libstdc++-v3/config/locale/gnu/messages_members.h.jj 2002-05-22 15:38:28.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/messages_members.h 2002-08-29 17:50:14.000000000 +0200
-@@ -55,26 +55,6 @@
- }
-
- template<typename _CharT>
-- typename messages<_CharT>::string_type
-- messages<_CharT>::do_get(catalog, int, int,
-- const string_type& __dfault) const
-- {
--#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-- __c_locale __old = __uselocale(_M_c_locale_messages);
-- char* __msg = gettext(_M_convert_to_char(__dfault));
-- __uselocale(__old);
-- return _M_convert_from_char(__msg);
--#else
-- char* __old = strdup(setlocale(LC_ALL, NULL));
-- setlocale(LC_ALL, _M_name_messages);
-- char* __msg = gettext(_M_convert_to_char(__dfault));
-- setlocale(LC_ALL, __old);
-- free(__old);
-- return _M_convert_from_char(__msg);
--#endif
-- }
--
-- template<typename _CharT>
- void
- messages<_CharT>::do_close(catalog) const
- { }
---- libstdc++-v3/config/locale/gnu/c++locale_internal.h.jj 2002-08-29 14:57:21.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/c++locale_internal.h 2002-08-29 15:21:59.000000000 +0200
-@@ -0,0 +1,59 @@
-+// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
-+
-+// Copyright (C) 2002 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.
-+
-+// Written by Jakub Jelinek <jakub@redhat.com>
-+
-+#include <clocale>
-+
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+
-+extern "C" __typeof(iswctype_l) __iswctype_l;
-+extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
-+extern "C" __typeof(strcoll_l) __strcoll_l;
-+extern "C" __typeof(strftime_l) __strftime_l;
-+extern "C" __typeof(strtod_l) __strtod_l;
-+extern "C" __typeof(strtof_l) __strtof_l;
-+extern "C" __typeof(strtold_l) __strtold_l;
-+extern "C" __typeof(strtol_l) __strtol_l;
-+extern "C" __typeof(strtoll_l) __strtoll_l;
-+extern "C" __typeof(strtoul_l) __strtoul_l;
-+extern "C" __typeof(strtoull_l) __strtoull_l;
-+extern "C" __typeof(strxfrm_l) __strxfrm_l;
-+extern "C" __typeof(towlower_l) __towlower_l;
-+extern "C" __typeof(towupper_l) __towupper_l;
-+extern "C" __typeof(wcscoll_l) __wcscoll_l;
-+extern "C" __typeof(wcsftime_l) __wcsftime_l;
-+extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
-+extern "C" __typeof(wctype_l) __wctype_l;
-+extern "C" __typeof(newlocale) __newlocale;
-+extern "C" __typeof(freelocale) __freelocale;
-+extern "C" __typeof(duplocale) __duplocale;
-+extern "C" __typeof(uselocale) __uselocale;
-+
-+#endif // GLIBC 2.3 and later
---- libstdc++-v3/include/bits/locale_facets.h.jj 2002-08-01 23:43:48.000000000 +0200
-+++ libstdc++-v3/include/bits/locale_facets.h 2002-08-29 17:49:53.000000000 +0200
-@@ -1739,6 +1739,12 @@ namespace std
- string
- messages<char>::do_get(catalog, int, int, const string&) const;
-
-+#ifdef _GLIBCPP_USE_WCHAR_T
-+ template<>
-+ wstring
-+ messages<wchar_t>::do_get(catalog, int, int, const wstring&) const;
-+#endif
-+
- // Include host and configuration specific messages virtual functions.
- #include <bits/messages_members.h>
-
---- libstdc++-v3/acinclude.m4.jj 2002-08-29 13:51:58.000000000 +0200
-+++ libstdc++-v3/acinclude.m4 2002-08-30 11:58:42.000000000 +0200
-@@ -1131,6 +1131,12 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- AC_TRY_RUN([
- #define _GNU_SOURCE 1
- #include <locale.h>
-+ #include <string.h>
-+ #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ extern __typeof(newlocale) __newlocale;
-+ extern __typeof(duplocale) __duplocale;
-+ extern __typeof(strcoll_l) __strcoll_l;
-+ #endif
- int main()
- {
- const char __one[] = "Äuglein Augmen";
-@@ -1179,6 +1185,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- CMONEY_CC=config/locale/generic/monetary_members.cc
- CNUMERIC_CC=config/locale/generic/numeric_members.cc
- CTIME_CC=config/locale/generic/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
- ;;
- xgnu)
- AC_MSG_RESULT(gnu)
-@@ -1211,6 +1218,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- CMONEY_CC=config/locale/gnu/monetary_members.cc
- CNUMERIC_CC=config/locale/gnu/numeric_members.cc
- CTIME_CC=config/locale/gnu/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
- ;;
- xieee_1003.1-2001)
- AC_MSG_RESULT(generic)
-@@ -1225,6 +1233,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- CMONEY_CC=config/locale/generic/monetary_members.cc
- CNUMERIC_CC=config/locale/generic/numeric_members.cc
- CTIME_CC=config/locale/generic/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
- ;;
- *)
- echo "$enable_clocale is an unknown locale package" 1>&2
-@@ -1248,6 +1257,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- AC_LINK_FILES($CMONEY_CC, src/monetary.cc)
- AC_LINK_FILES($CNUMERIC_CC, src/numeric.cc)
- AC_LINK_FILES($CTIME_CC, src/time.cc)
-+ AC_LINK_FILES($CLOCALE_INTERNAL_H, src/c++locale_internal.h)
- ])
-
-
---- libstdc++-v3/aclocal.m4.jj 2002-08-29 13:51:58.000000000 +0200
-+++ libstdc++-v3/aclocal.m4 2002-08-30 11:58:46.000000000 +0200
-@@ -1143,6 +1143,12 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- AC_TRY_RUN([
- #define _GNU_SOURCE 1
- #include <locale.h>
-+ #include <string.h>
-+ #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ extern __typeof(newlocale) __newlocale;
-+ extern __typeof(duplocale) __duplocale;
-+ extern __typeof(strcoll_l) __strcoll_l;
-+ #endif
- int main()
- {
- const char __one[] = "Äuglein Augmen";
-@@ -1191,6 +1197,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- CMONEY_CC=config/locale/generic/monetary_members.cc
- CNUMERIC_CC=config/locale/generic/numeric_members.cc
- CTIME_CC=config/locale/generic/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
- ;;
- xgnu)
- AC_MSG_RESULT(gnu)
-@@ -1223,6 +1230,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- CMONEY_CC=config/locale/gnu/monetary_members.cc
- CNUMERIC_CC=config/locale/gnu/numeric_members.cc
- CTIME_CC=config/locale/gnu/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
- ;;
- xieee_1003.1-2001)
- AC_MSG_RESULT(generic)
-@@ -1237,6 +1245,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- CMONEY_CC=config/locale/generic/monetary_members.cc
- CNUMERIC_CC=config/locale/generic/numeric_members.cc
- CTIME_CC=config/locale/generic/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
- ;;
- *)
- echo "$enable_clocale is an unknown locale package" 1>&2
-@@ -1260,6 +1269,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
- AC_LINK_FILES($CMONEY_CC, src/monetary.cc)
- AC_LINK_FILES($CNUMERIC_CC, src/numeric.cc)
- AC_LINK_FILES($CTIME_CC, src/time.cc)
-+ AC_LINK_FILES($CLOCALE_INTERNAL_H, src/c++locale_internal.h)
- ])
-
-
---- libstdc++-v3/configure.jj 2002-08-29 13:52:46.000000000 +0200
-+++ libstdc++-v3/configure 2002-08-30 12:00:07.000000000 +0200
-@@ -2961,6 +2961,12 @@ else
-
- #define _GNU_SOURCE 1
- #include <locale.h>
-+ #include <string.h>
-+ #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ extern __typeof(newlocale) __newlocale;
-+ extern __typeof(duplocale) __duplocale;
-+ extern __typeof(strcoll_l) __strcoll_l;
-+ #endif
- int main()
- {
- const char __one[] = "Äuglein Augmen";
-@@ -3023,6 +3029,7 @@ fi
- CMONEY_CC=config/locale/generic/monetary_members.cc
- CNUMERIC_CC=config/locale/generic/numeric_members.cc
- CTIME_CC=config/locale/generic/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
- ;;
- xgnu)
- echo "$ac_t""gnu" 1>&6
-@@ -3084,6 +3091,7 @@ fi
- CMONEY_CC=config/locale/gnu/monetary_members.cc
- CNUMERIC_CC=config/locale/gnu/numeric_members.cc
- CTIME_CC=config/locale/gnu/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
- ;;
- xieee_1003.1-2001)
- echo "$ac_t""generic" 1>&6
-@@ -3098,6 +3106,7 @@ fi
- CMONEY_CC=config/locale/generic/monetary_members.cc
- CNUMERIC_CC=config/locale/generic/numeric_members.cc
- CTIME_CC=config/locale/generic/time_members.cc
-+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
- ;;
- *)
- echo "$enable_clocale is an unknown locale package" 1>&2
-@@ -22689,8 +22698,8 @@ fi; done
- EOF
-
- cat >> $CONFIG_STATUS <<EOF
--ac_sources="$BASIC_FILE_CC $CLOCALE_CC $CCOLLATE_CC $CCTYPE_CC $CMESSAGES_CC $CMONEY_CC $CNUMERIC_CC $CTIME_CC $LINKER_MAP"
--ac_dests="src/basic_file.cc src/c++locale.cc src/collate.cc src/ctype.cc src/messages.cc src/monetary.cc src/numeric.cc src/time.cc src/linker.map"
-+ac_sources="$BASIC_FILE_CC $CLOCALE_CC $CCOLLATE_CC $CCTYPE_CC $CMESSAGES_CC $CMONEY_CC $CNUMERIC_CC $CTIME_CC $CLOCALE_INTERNAL_H $LINKER_MAP"
-+ac_dests="src/basic_file.cc src/c++locale.cc src/collate.cc src/ctype.cc src/messages.cc src/monetary.cc src/numeric.cc src/time.cc src/c++locale_internal.h src/linker.map"
- EOF
-
- cat >> $CONFIG_STATUS <<\EOF
-
- Jakub
-
+++ /dev/null
---- libstdc++-v3/config/locale/gnu/ctype_members.cc.jj 2002-08-30 12:09:12.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/ctype_members.cc 2002-09-02 15:25:15.000000000 +0200
-@@ -166,15 +166,30 @@ namespace std
- wchar_t
- ctype<wchar_t>::
- do_widen(char __c) const
-- { return btowc(__c); }
--
-+ {
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __c_locale __old = __uselocale(_M_c_locale_ctype);
-+#endif
-+ wchar_t __ret = btowc(__c);
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __uselocale(__old);
-+#endif
-+ return __ret;
-+ }
-+
- const char*
- ctype<wchar_t>::
- do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
- {
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __c_locale __old = __uselocale(_M_c_locale_ctype);
-+#endif
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __uselocale(__old);
-+#endif
- return __hi;
- }
-
-@@ -182,7 +197,13 @@ namespace std
- ctype<wchar_t>::
- do_narrow(wchar_t __wc, char __dfault) const
- {
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __c_locale __old = __uselocale(_M_c_locale_ctype);
-+#endif
- int __c = wctob(__wc);
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __uselocale(__old);
-+#endif
- return (__c == EOF ? __dfault : static_cast<char>(__c));
- }
-
-@@ -191,6 +212,9 @@ namespace std
- do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
- char* __dest) const
- {
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __c_locale __old = __uselocale(_M_c_locale_ctype);
-+#endif
- size_t __offset = 0;
- while (true)
- {
-@@ -208,6 +232,9 @@ namespace std
- else
- break;
- }
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __uselocale(__old);
-+#endif
- return __hi;
- }
- #endif // _GLIBCPP_USE_WCHAR_T
+++ /dev/null
-From gcc-patches-return-67562-listarch-gcc-patches=gcc dot gnu dot org at gcc dot gnu dot org Fri Sep 06 14:44:59 2002
-Return-Path: <gcc-patches-return-67562-listarch-gcc-patches=gcc dot gnu dot org at gcc dot gnu dot org>
-Delivered-To: listarch-gcc-patches at gcc dot gnu dot org
-Received: (qmail 31503 invoked by alias); 6 Sep 2002 14:44:56 -0000
-Mailing-List: contact gcc-patches-help at gcc dot gnu dot org; run by ezmlm
-Precedence: bulk
-List-Archive: <http://gcc.gnu.org/ml/gcc-patches/>
-List-Post: <mailto:gcc-patches at gcc dot gnu dot org>
-List-Help: <mailto:gcc-patches-help at gcc dot gnu dot org>
-Sender: gcc-patches-owner at gcc dot gnu dot org
-Delivered-To: mailing list gcc-patches at gcc dot gnu dot org
-Received: (qmail 31479 invoked from network); 6 Sep 2002 14:44:52 -0000
-Received: from unknown (HELO devserv.devel.redhat.com) (66.187.233.200)
- by sources dot redhat dot com with SMTP; 6 Sep 2002 14:44:52 -0000
-Received: (from jakub@localhost)
- by devserv dot devel dot redhat dot com (8 dot 11 dot 6/8 dot 11 dot 0) id g86EioP06755;
- Fri, 6 Sep 2002 10:44:50 -0400
-Date: Fri, 6 Sep 2002 10:44:50 -0400
-From: Jakub Jelinek <jakub at redhat dot com>
-To: Benjamin Kosnik <bkoz at redhat dot com>
-Cc: bkoz at nabi dot net, libstdc++ at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
-Subject: [PATCH] Fix libstdc++ usage of __ctype_b/__ctype_to* (take 2)
-Message-ID: <20020906104449.C7920@devserv.devel.redhat.com>
-Reply-To: Jakub Jelinek <jakub at redhat dot com>
-References: <20020901040933.I7886@dhcp187.sf.frob.com> <20020901095711.C7920@devserv.devel.redhat.com> <20020901102055.A5791@devserv.devel.redhat.com> <3D724B9A.6050908@redhat.com> <20020901145657.E7920@devserv.devel.redhat.com> <3D726A72.2080106@redhat.com> <20020901165440.F7920@devserv.devel.redhat.com> <20020904160557.7dbc29f6.bkoz@nabi.net> <20020905041710.P7920@devserv.devel.redhat.com> <20020905103148.7c1381a2.bkoz@redhat.com>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Content-Disposition: inline
-User-Agent: Mutt/1.2.5.1i
-In-Reply-To: <20020905103148 dot 7c1381a2 dot bkoz at redhat dot com>; from bkoz at redhat dot com on Thu, Sep 05, 2002 at 10:31:48AM -0500
-
-On Thu, Sep 05, 2002 at 10:31:48AM -0500, Benjamin Kosnik wrote:
-> > Most probably yes, but as it is a static method I wanted to be sure.
-> > Should I leave it in?
->
-> Sure.
-
-> > > Just remove all this _GLIBCPP_USE_SHADOW_HEADERS cruft.
-> >
-> > You mean the using lines too?
->
-> Yep.
-
-> > BTW: This will have the effect that --enable-clocale=generic will no longer
-> > work with glibc 2.3+. Although for everything but checking the generic
-> > clocale gnu it makes no sense to use anything but --enable-clocale=gnu
-> > with glibc 2.3+, we might as well consider using:
-> >
-> > #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-> > __ret = *__ctype_b_loc();
-> > #else
-> > __ret = __ctype_b;
-> > #endif
-> > here (and similarly with __ctype_tolower and __ctype_toupper).
->
-> Sounds good.
-
-Ok, here is an updated version of the patch.
-Ok to commit (head, branch)?
-
-2002-09-06 Jakub Jelinek <jakub@redhat.com>
-
- * config/os/gnu-linux/bits/ctype_noninline.h
- [_GLIBCPP_USE_SHADOW_HEADERS]: Remove using _C_legacy::__ctype_*.
- (ctype<char>::classic_table): If _GLIBCPP_C_LOCALE_GNU, return
- _S_c_locale->__ctype_b, otherwise temporarily switch to "C" locale
- and return __ctype_b.
- (ctype<char>::ctype(__c_locale, const mask*, bool, size_t)): If not
- _GLIBCPP_C_LOCALE_GNU, temporarily switch to "C" locale and
- initialize using __ctype_{b,tolower,toupper}.
- (ctype<char>::ctype(const mask*, bool, size_t)): If
- _GLIBCPP_C_LOCALE_GNU, initialize using
- _S_c_locale->__ctype_{b,tolower,toupper}, otherwise temporarily
- switch to "C" locale and initialize using __ctype_{b,tolower,toupper}.
-
---- libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h.jj 2002-09-03 11:54:25.000000000 +0200
-+++ libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h 2002-09-06 10:34:59.000000000 +0200
-@@ -34,16 +34,32 @@
-
- // Information as gleaned from /usr/include/ctype.h
-
--#if _GLIBCPP_USE_SHADOW_HEADERS
-- using _C_legacy::__ctype_toupper;
-- using _C_legacy::__ctype_tolower;
-- using _C_legacy::__ctype_b;
--#endif
--
-+#if _GLIBCPP_C_LOCALE_GNU
- const ctype_base::mask*
- ctype<char>::classic_table() throw()
-- { return __ctype_b; }
--
-+ {
-+ if (!_S_c_locale)
-+ _S_create_c_locale(_S_c_locale, "C");
-+ return _S_c_locale->__ctype_b;
-+ }
-+#else
-+ const ctype_base::mask*
-+ ctype<char>::classic_table() throw()
-+ {
-+ const ctype_base::mask* __ret;
-+ char* __old = strdup(setlocale(LC_CTYPE, NULL));
-+ setlocale(LC_CTYPE, "C");
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __ret = *__ctype_b_loc();
-+#else
-+ __ret = __ctype_b;
-+#endif
-+ setlocale(LC_CTYPE, __old);
-+ free(__old);
-+ return __ret;
-+ }
-+#endif
-+
- #if _GLIBCPP_C_LOCALE_GNU
- ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del,
- size_t __refs)
-@@ -57,17 +73,55 @@
- #else
- ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
- size_t __refs)
-- : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del),
-- _M_toupper(__ctype_toupper), _M_tolower(__ctype_tolower),
-- _M_table(__table ? __table : classic_table())
-- { _M_c_locale_ctype = _S_c_locale; }
-+ : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
-+ {
-+ char* __old=strdup(setlocale(LC_CTYPE, NULL));
-+ setlocale(LC_CTYPE, "C");
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ _M_toupper = *__ctype_toupper_loc();
-+ _M_tolower = *__ctype_tolower_loc();
-+ _M_table = __table ? __table : *__ctype_b_loc();
-+#else
-+ _M_toupper = __ctype_toupper;
-+ _M_tolower = __ctype_tolower;
-+ _M_table = __table ? __table : __ctype_b;
-+#endif
-+ setlocale(LC_CTYPE, __old);
-+ free(__old);
-+ _M_c_locale_ctype = _S_c_locale;
-+ }
- #endif
-
-+#if _GLIBCPP_C_LOCALE_GNU
- ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) :
-- __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del),
-- _M_toupper(__ctype_toupper), _M_tolower(__ctype_tolower),
-- _M_table(__table ? __table : classic_table())
-- { _M_c_locale_ctype = _S_c_locale; }
-+ __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
-+ {
-+ _M_c_locale_ctype = _S_c_locale;
-+ _M_toupper = _M_c_locale_ctype->__ctype_toupper;
-+ _M_tolower = _M_c_locale_ctype->__ctype_tolower;
-+ _M_table = __table ? __table : _M_c_locale_ctype->__ctype_b;
-+ }
-+#else
-+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
-+ size_t __refs)
-+ : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
-+ {
-+ char* __old=strdup(setlocale(LC_CTYPE, NULL));
-+ setlocale(LC_CTYPE, "C");
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ _M_toupper = *__ctype_toupper_loc();
-+ _M_tolower = *__ctype_tolower_loc();
-+ _M_table = __table ? __table : *__ctype_b_loc();
-+#else
-+ _M_toupper = __ctype_toupper;
-+ _M_tolower = __ctype_tolower;
-+ _M_table = __table ? __table : __ctype_b;
-+#endif
-+ setlocale(LC_CTYPE, __old);
-+ free(__old);
-+ _M_c_locale_ctype = _S_c_locale;
-+ }
-+#endif
-
- char
- ctype<char>::do_toupper(char __c) const
-
-
- Jakub
-
+++ /dev/null
---- libstdc++-v3/config/locale/gnu/monetary_members.cc.jj 2002-08-30 12:09:12.000000000 +0200
-+++ libstdc++-v3/config/locale/gnu/monetary_members.cc 2002-08-31 23:41:51.000000000 +0200
-@@ -335,9 +335,13 @@ namespace std
- else
- {
- // Named locale.
-- // XXX Fix me. Switch to named locale so that mbsrtowcs will work.
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __c_locale __old = __uselocale(__cloc);
-+#else
-+ // Switch to named locale so that mbsrtowcs will work.
- char* __old = strdup(setlocale(LC_ALL, NULL));
- setlocale(LC_ALL, __name);
-+#endif
-
- _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
-
-@@ -400,9 +404,12 @@ namespace std
- char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
- _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
-
-- // XXX
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __uselocale(__old);
-+#else
- setlocale(LC_ALL, __old);
- free(__old);
-+#endif
- }
- }
-
-@@ -427,9 +434,13 @@ namespace std
- else
- {
- // Named locale.
-- // XXX Fix me. Switch to named locale so that mbsrtowcs will work.
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __c_locale __old = __uselocale(__cloc);
-+#else
-+ // Switch to named locale so that mbsrtowcs will work.
- char* __old = strdup(setlocale(LC_ALL, NULL));
- setlocale(LC_ALL, __name);
-+#endif
-
- _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
- _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
-@@ -491,9 +502,12 @@ namespace std
- char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
- _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
-
-- // XXX
-+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
-+ __uselocale(__old);
-+#else
- setlocale(LC_ALL, __old);
- free(__old);
-+#endif
- }
- }
+++ /dev/null
-2002-05-31 Jakub Jelinek <jakub@redhat.com>
-
- PR optimization/6842
- * combine.c (combine_simplify_rtx) [SUBREG]: Don't ICE if VOIDmode
- operand subreg cannot be simplified.
-
- * gcc.dg/20020531-1.c: New test.
-
---- gcc/testsuite/gcc.dg/20020531-1.c.jj Fri May 31 17:15:15 2002
-+++ gcc/testsuite/gcc.dg/20020531-1.c Fri May 31 17:13:50 2002
-@@ -0,0 +1,21 @@
-+/* PR optimization/6842
-+ This testcase caused ICE when trying to optimize V8QI subreg of VOIDmode
-+ CONST_DOUBLE. */
-+/* { dg-do compile { target i?86-*-* } } */
-+/* { dg-options "-O2 -mmmx" } */
-+
-+typedef int __v8qi __attribute__ ((__mode__ (__V8QI__)));
-+extern void abort (void);
-+extern void exit (int);
-+
-+void foo (void)
-+{
-+ unsigned long long a = 0x0102030405060708LL;
-+ unsigned long long b = 0x1020304050607080LL;
-+ unsigned long long c;
-+
-+ c = (unsigned long long) __builtin_ia32_paddusb ((__v8qi) a, (__v8qi) b);
-+ __builtin_ia32_emms ();
-+ if (c != 0x1122334455667788)
-+ abort ();
-+}
---- gcc/combine.c.jj Thu May 23 10:22:59 2002
-+++ gcc/combine.c Fri May 31 17:05:09 2002
-@@ -3863,7 +3863,12 @@ combine_simplify_rtx (x, op0_mode, last,
-
- /* simplify_subreg can't use gen_lowpart_for_combine. */
- if (CONSTANT_P (SUBREG_REG (x))
-- && subreg_lowpart_offset (mode, op0_mode) == SUBREG_BYTE (x))
-+ && subreg_lowpart_offset (mode, op0_mode) == SUBREG_BYTE (x)
-+ /* Don't call gen_lowpart_for_combine if the inner mode
-+ is VOIDmode and we cannot simplify it, as SUBREG without
-+ inner mode is invalid. */
-+ && (GET_MODE (SUBREG_REG (x)) != VOIDmode
-+ || gen_lowpart_common (mode, SUBREG_REG (x))))
- return gen_lowpart_for_combine (mode, SUBREG_REG (x));
-
- if (GET_MODE_CLASS (GET_MODE (SUBREG_REG (x))) == MODE_CC)
+++ /dev/null
-2002-05-05 Jakub Jelinek <jakub@redhat.com>
-
- * config/sparc/sparc.md (ashlsi3): If shift count is const1_rtx,
- use add instead of shift.
- (ashldi3_sp64): Likewise.
- (ashlsi3_const1, ashldi3_const1): Remove.
- * config/sparc/sparc.h (PREDICATE_CODES): Add const1_operand.
- * config/sparc/sparc.c (const1_operand): New.
-
---- gcc/config/sparc/sparc.md.jj Sun May 5 21:56:45 2002
-+++ gcc/config/sparc/sparc.md Sun May 5 23:33:31 2002
-@@ -7559,18 +7559,13 @@
- && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 31)
- operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
-
-+ if (operands[2] == const1_rtx)
-+ return \"add\\t%1, %1, %0\";
- return \"sll\\t%1, %2, %0\";
- }"
-- [(set_attr "type" "shift")])
--
--;; We special case multiplication by two, as add can be done
--;; in both ALUs, while shift only in IEU0 on UltraSPARC.
--(define_insn "*ashlsi3_const1"
-- [(set (match_operand:SI 0 "register_operand" "=r")
-- (ashift:SI (match_operand:SI 1 "register_operand" "r")
-- (const_int 1)))]
-- ""
-- "add\\t%1, %1, %0")
-+ [(set (attr "type")
-+ (if_then_else (match_operand 2 "const1_operand" "")
-+ (const_string "ialu") (const_string "shift")))])
-
- (define_expand "ashldi3"
- [(set (match_operand:DI 0 "register_operand" "=r")
-@@ -7588,15 +7583,6 @@
- }
- }")
-
--;; We special case multiplication by two, as add can be done
--;; in both ALUs, while shift only in IEU0 on UltraSPARC.
--(define_insn "*ashldi3_const1"
-- [(set (match_operand:DI 0 "register_operand" "=r")
-- (ashift:DI (match_operand:DI 1 "register_operand" "r")
-- (const_int 1)))]
-- "TARGET_ARCH64"
-- "add\\t%1, %1, %0")
--
- (define_insn "*ashldi3_sp64"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (ashift:DI (match_operand:DI 1 "register_operand" "r")
-@@ -7608,9 +7594,13 @@
- && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 63)
- operands[2] = GEN_INT (INTVAL (operands[2]) & 0x3f);
-
-+ if (operands[2] == const1_rtx)
-+ return \"add\\t%1, %1, %0\";
- return \"sllx\\t%1, %2, %0\";
- }"
-- [(set_attr "type" "shift")])
-+ [(set (attr "type")
-+ (if_then_else (match_operand 2 "const1_operand" "")
-+ (const_string "ialu") (const_string "shift")))])
-
- ;; XXX UGH!
- (define_insn "ashldi3_v8plus"
---- gcc/config/sparc/sparc.h.jj Fri May 3 22:57:33 2002
-+++ gcc/config/sparc/sparc.h Sun May 5 23:20:48 2002
-@@ -3014,6 +3014,7 @@ do { \
-
- #define PREDICATE_CODES \
- {"reg_or_0_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE}}, \
-+{"const1_operand", {CONST_INT}}, \
- {"fp_zero_operand", {CONST_DOUBLE}}, \
- {"fp_register_operand", {SUBREG, REG}}, \
- {"intreg_operand", {SUBREG, REG}}, \
---- gcc/config/sparc/sparc.c.jj Fri May 3 22:57:33 2002
-+++ gcc/config/sparc/sparc.c Sun May 5 23:24:18 2002
-@@ -478,6 +478,16 @@ reg_or_0_operand (op, mode)
- return 0;
- }
-
-+/* Return non-zero only if OP is const1_rtx. */
-+
-+int
-+const1_operand (op, mode)
-+ rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ return op == const1_rtx;
-+}
-+
- /* Nonzero if OP is a floating point value with value 0.0. */
-
- int
+++ /dev/null
-2002-08-21 Richard Henderson <rth@redhat.com>
-
- * config/i386/i386-protos.h (i386_output_dwarf_dtprel): Add
- prototype.
- * config/i386/i386.c (i386_output_dwarf_dtprel): New.
- * config/i386/i386.h (ASM_OUTPUT_DWARF_DTPREL): Define.
- * dwarf2.h (DW_OP_GNU_push_tls_address): Add.
- (DW_OP_lo_user): Define to 0xe0.
- * dwarf2out.c (INTERNAL_DW_OP_tls_addr): Define.
- (dwarf_stack_op_name, sizeof_loc_descr): Handle a few more OPs.
- (output_loc_operands): Handle INTERNAL_DW_OP_tls_addr.
- (loc_descriptor_from_tree): Handle DECL_THREAD_LOCAL variables.
- (add_AT_location_description): Pass descr instead of rtl.
- (add_location_or_const_value_attribute, add_bound_info,
- gen_subprogram_die): Adjust its callers.
- (rtl_for_decl_location): Avoid constant pool references.
-
---- gcc/config/i386/i386-protos.h 20 Aug 2002 17:20:36 -0000 1.1.1.1
-+++ gcc/config/i386/i386-protos.h 20 Aug 2002 22:35:02 -0000
-@@ -113,6 +113,7 @@ extern const char *output_fix_trunc PARA
- extern const char *output_fp_compare PARAMS ((rtx, rtx*, int, int));
-
- extern void i386_dwarf_output_addr_const PARAMS ((FILE*, rtx));
-+extern void i386_output_dwarf_dtprel PARAMS ((FILE*, int, rtx));
- extern rtx i386_simplify_dwarf_addr PARAMS ((rtx));
-
- extern void ix86_expand_clear PARAMS ((rtx));
---- gcc/config/i386/i386.c 20 Aug 2002 17:20:36 -0000 1.1.1.1
-+++ gcc/config/i386/i386.c 20 Aug 2002 22:35:02 -0000
-@@ -5921,6 +5921,33 @@ i386_dwarf_output_addr_const (file, x)
- fputc ('\n', file);
- }
-
-+/* This is called from dwarf2out.c via ASM_OUTPUT_DWARF_DTPREL.
-+ We need to emit DTP-relative relocations. */
-+
-+void
-+i386_output_dwarf_dtprel (file, size, x)
-+ FILE *file;
-+ int size;
-+ rtx x;
-+{
-+ switch (size)
-+ {
-+ case 4:
-+ fputs (ASM_LONG, file);
-+ break;
-+ case 8:
-+#ifdef ASM_QUAD
-+ fputs (ASM_QUAD, file);
-+ break;
-+#endif
-+ default:
-+ abort ();
-+ }
-+
-+ output_addr_const (file, x);
-+ fputs ("@DTPOFF", file);
-+}
-+
- /* In the name of slightly smaller debug output, and to cater to
- general assembler losage, recognize PIC+GOTOFF and turn it back
- into a direct symbol reference. */
---- gcc/config/i386/i386.h 20 Aug 2002 17:20:36 -0000 1.1.1.1
-+++ gcc/config/i386/i386.h 20 Aug 2002 22:35:02 -0000
-@@ -2899,6 +2899,13 @@ extern int const svr4_dbx_register_map[F
- #define ASM_SIMPLIFY_DWARF_ADDR(X) \
- i386_simplify_dwarf_addr (X)
-
-+/* Emit a dtp-relative reference to a TLS variable. */
-+
-+#ifdef HAVE_AS_TLS
-+#define ASM_OUTPUT_DWARF_DTPREL(FILE, SIZE, X) \
-+ i386_output_dwarf_dtprel (FILE, SIZE, X)
-+#endif
-+
- /* Switch to init or fini section via SECTION_OP, emit a call to FUNC,
- and switch back. For x86 we do this only to save a few bytes that
- would otherwise be unused in the text section. */
---- gcc/dwarf2.h 20 Aug 2002 17:20:19 -0000 1.1.1.1
-+++ gcc/dwarf2.h 20 Aug 2002 22:35:02 -0000
-@@ -399,10 +399,12 @@ enum dwarf_location_atom
- DW_OP_push_object_address = 0x97,
- DW_OP_call2 = 0x98,
- DW_OP_call4 = 0x99,
-- DW_OP_calli = 0x9a
-+ DW_OP_call_ref = 0x9a,
-+ /* GNU extensions. */
-+ DW_OP_GNU_push_tls_address = 0xe0
- };
-
--#define DW_OP_lo_user 0x80 /* Implementation-defined range start. */
-+#define DW_OP_lo_user 0xe0 /* Implementation-defined range start. */
- #define DW_OP_hi_user 0xff /* Implementation-defined range end. */
-
- /* Type encodings. */
---- gcc/dwarf2out.c 20 Aug 2002 17:20:19 -0000 1.1.1.1
-+++ gcc/dwarf2out.c 20 Aug 2002 22:40:42 -0000
-@@ -2169,6 +2169,11 @@ dwarf2out_frame_finish ()
- /* And now, the subset of the debugging information support code necessary
- for emitting location expressions. */
-
-+/* We need some way to distinguish DW_OP_addr with a direct symbol
-+ relocation from DW_OP_addr with a dtp-relative symbol relocation. */
-+#define INTERNAL_DW_OP_tls_addr (0x100 + DW_OP_addr)
-+
-+
- typedef struct dw_val_struct *dw_val_ref;
- typedef struct die_struct *dw_die_ref;
- typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
-@@ -2294,6 +2299,7 @@ dwarf_stack_op_name (op)
- switch (op)
- {
- case DW_OP_addr:
-+ case INTERNAL_DW_OP_tls_addr:
- return "DW_OP_addr";
- case DW_OP_deref:
- return "DW_OP_deref";
-@@ -2583,6 +2589,16 @@ dwarf_stack_op_name (op)
- return "DW_OP_xderef_size";
- case DW_OP_nop:
- return "DW_OP_nop";
-+ case DW_OP_push_object_address:
-+ return "DW_OP_push_object_address";
-+ case DW_OP_call2:
-+ return "DW_OP_call2";
-+ case DW_OP_call4:
-+ return "DW_OP_call4";
-+ case DW_OP_call_ref:
-+ return "DW_OP_call_ref";
-+ case DW_OP_GNU_push_tls_address:
-+ return "DW_OP_GNU_push_tls_address";
- default:
- return "OP_<unknown>";
- }
-@@ -2640,6 +2656,7 @@ size_of_loc_descr (loc)
- switch (loc->dw_loc_opc)
- {
- case DW_OP_addr:
-+ case INTERNAL_DW_OP_tls_addr:
- size += DWARF2_ADDR_SIZE;
- break;
- case DW_OP_const1u:
-@@ -2725,6 +2742,15 @@ size_of_loc_descr (loc)
- case DW_OP_xderef_size:
- size += 1;
- break;
-+ case DW_OP_call2:
-+ size += 2;
-+ break;
-+ case DW_OP_call4:
-+ size += 4;
-+ break;
-+ case DW_OP_call_ref:
-+ size += DWARF2_ADDR_SIZE;
-+ break;
- default:
- break;
- }
-@@ -2874,6 +2900,17 @@ output_loc_operands (loc)
- case DW_OP_xderef_size:
- dw2_asm_output_data (1, val1->v.val_int, NULL);
- break;
-+
-+ case INTERNAL_DW_OP_tls_addr:
-+#ifdef ASM_OUTPUT_DWARF_DTPREL
-+ ASM_OUTPUT_DWARF_DTPREL (asm_out_file, DWARF2_ADDR_SIZE,
-+ val1->v.val_addr);
-+ fputc ('\n', asm_out_file);
-+#else
-+ abort ();
-+#endif
-+ break;
-+
- default:
- /* Other codes have no operands. */
- break;
-@@ -3598,7 +3635,8 @@ static unsigned int simple_field_decl_al
- static unsigned HOST_WIDE_INT simple_type_size_in_bits PARAMS ((tree));
- static HOST_WIDE_INT field_byte_offset PARAMS ((tree));
- static void add_AT_location_description PARAMS ((dw_die_ref,
-- enum dwarf_attribute, rtx));
-+ enum dwarf_attribute,
-+ dw_loc_descr_ref));
- static void add_data_member_location_attribute PARAMS ((dw_die_ref, tree));
- static void add_const_value_attribute PARAMS ((dw_die_ref, rtx));
- static rtx rtl_for_decl_location PARAMS ((tree));
-@@ -8031,6 +8069,41 @@ loc_descriptor_from_tree (loc, addressp)
- : 0);
-
- case VAR_DECL:
-+ if (DECL_THREAD_LOCAL (loc))
-+ {
-+ rtx rtl;
-+
-+#ifndef ASM_OUTPUT_DWARF_DTPREL
-+ /* If this is not defined, we have no way to emit the data. */
-+ return 0;
-+#endif
-+ /* The way DW_OP_GNU_push_tls_address is specified, we can only
-+ look up addresses of objects in the current module. */
-+ if (DECL_P (loc) && TREE_PUBLIC (loc) && !MODULE_LOCAL_P (loc))
-+ return 0;
-+
-+ rtl = rtl_for_decl_location (loc);
-+ if (rtl == NULL_RTX)
-+ return 0;
-+
-+ if (GET_CODE (rtl) != MEM)
-+ return 0;
-+ rtl = XEXP (rtl, 0);
-+ if (! CONSTANT_P (rtl))
-+ return 0;
-+
-+ ret = new_loc_descr (INTERNAL_DW_OP_tls_addr, 0, 0);
-+ ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
-+ ret->dw_loc_oprnd1.v.val_addr = rtl;
-+
-+ ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
-+ add_loc_descr (&ret, ret1);
-+
-+ indirect_p = 1;
-+ break;
-+ }
-+ /* FALLTHRU */
-+
- case PARM_DECL:
- {
- rtx rtl = rtl_for_decl_location (loc);
-@@ -8531,14 +8604,12 @@ field_byte_offset (decl)
- whole parameters. Note that the location attributes for struct fields are
- generated by the routine `data_member_location_attribute' below. */
-
--static void
--add_AT_location_description (die, attr_kind, rtl)
-+static inline void
-+add_AT_location_description (die, attr_kind, descr)
- dw_die_ref die;
- enum dwarf_attribute attr_kind;
-- rtx rtl;
-+ dw_loc_descr_ref descr;
- {
-- dw_loc_descr_ref descr = loc_descriptor (rtl);
--
- if (descr != 0)
- add_AT_loc (die, attr_kind, descr);
- }
-@@ -8963,6 +9034,13 @@ rtl_for_decl_location (decl)
- if (rtl)
- rtl = ASM_SIMPLIFY_DWARF_ADDR (rtl);
- #endif
-+
-+ /* If we don't look past the constant pool, we risk emitting a
-+ reference to a constant pool entry that isn't referenced from
-+ code, and thus is not emitted. */
-+ if (rtl)
-+ rtl = avoid_constant_pool_reference (rtl);
-+
- return rtl;
- }
-
-@@ -8983,6 +9061,7 @@ add_location_or_const_value_attribute (d
- tree decl;
- {
- rtx rtl;
-+ dw_loc_descr_ref descr;
-
- if (TREE_CODE (decl) == ERROR_MARK)
- return;
-@@ -8993,16 +9072,11 @@ add_location_or_const_value_attribute (d
- if (rtl == NULL_RTX)
- return;
-
-- /* If we don't look past the constant pool, we risk emitting a
-- reference to a constant pool entry that isn't referenced from
-- code, and thus is not emitted. */
-- rtl = avoid_constant_pool_reference (rtl);
--
- switch (GET_CODE (rtl))
- {
- case ADDRESSOF:
-- /* The address of a variable that was optimized away; don't emit
-- anything. */
-+ /* The address of a variable that was optimized away;
-+ don't emit anything. */
- break;
-
- case CONST_INT:
-@@ -9017,12 +9091,24 @@ add_location_or_const_value_attribute (d
- break;
-
- case MEM:
-- case REG:
-- case SUBREG:
-- case CONCAT:
-- add_AT_location_description (die, DW_AT_location, rtl);
-+ if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
-+ {
-+ /* Need loc_descriptor_from_tree since that's where we know
-+ how to handle TLS variables. Want the object's address
-+ since the top-level DW_AT_location assumes such. See
-+ the confusion in loc_descriptor for reference. */
-+ descr = loc_descriptor_from_tree (decl, 1);
-+ }
-+ else
-+ {
-+ case REG:
-+ case SUBREG:
-+ case CONCAT:
-+ descr = loc_descriptor (rtl);
-+ }
-+ add_AT_location_description (die, DW_AT_location, descr);
- break;
--
-+
- default:
- abort ();
- }
-@@ -9154,7 +9240,8 @@ add_bound_info (subrange_die, bound_attr
-
- add_AT_flag (decl_die, DW_AT_artificial, 1);
- add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
-- add_AT_location_description (decl_die, DW_AT_location, loc);
-+ add_AT_location_description (decl_die, DW_AT_location,
-+ loc_descriptor (loc));
- add_AT_die_ref (subrange_die, bound_attr, decl_die);
- }
-
-@@ -10359,7 +10446,7 @@ gen_subprogram_die (decl, context_die)
- is not part of the state saved/restored for inline functions. */
- if (current_function_needs_context)
- add_AT_location_description (subr_die, DW_AT_static_link,
-- lookup_static_chain (decl));
-+ loc_descriptor (lookup_static_chain (decl)));
- #endif
- }
-
+++ /dev/null
---- gcc/cp/lex.c.jj Sat May 25 00:02:23 2002
-+++ gcc/cp/lex.c Wed Jun 19 19:33:51 2002
-@@ -396,6 +396,7 @@ static const struct resword reswords[] =
- { "__restrict__", RID_RESTRICT, 0 },
- { "__signed", RID_SIGNED, 0 },
- { "__signed__", RID_SIGNED, 0 },
-+ { "__thread", RID_THREAD, 0 },
- { "__typeof", RID_TYPEOF, 0 },
- { "__typeof__", RID_TYPEOF, 0 },
- { "__volatile", RID_VOLATILE, 0 },
-@@ -502,6 +503,7 @@ const short rid_to_yy[RID_MAX] =
- /* RID_BOUNDED */ 0,
- /* RID_UNBOUNDED */ 0,
- /* RID_COMPLEX */ TYPESPEC,
-+ /* RID_THREAD */ SCSPEC,
-
- /* C++ */
- /* RID_FRIEND */ SCSPEC,
---- gcc/cp/decl.c.jj Wed Jun 19 19:33:51 2002
-+++ gcc/cp/decl.c Wed Jun 19 19:33:51 2002
-@@ -7122,7 +7122,8 @@ check_tag_decl (declspecs)
- || value == ridpointers[(int) RID_VIRTUAL]
- || value == ridpointers[(int) RID_CONST]
- || value == ridpointers[(int) RID_VOLATILE]
-- || value == ridpointers[(int) RID_EXPLICIT])
-+ || value == ridpointers[(int) RID_EXPLICIT]
-+ || value == ridpointers[(int) RID_THREAD])
- ob_modifier = value;
- }
-
-@@ -7596,6 +7597,12 @@ static tree
- obscure_complex_init (decl, init)
- tree decl, init;
- {
-+ if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
-+ {
-+ error ("run-time initialization of thread-local storage");
-+ return NULL_TREE;
-+ }
-+
- if (! flag_no_inline && TREE_STATIC (decl))
- {
- if (extract_init (decl, init))
-@@ -9290,6 +9297,16 @@ grokvardecl (type, declarator, specbits_
- TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
- }
-
-+ if (RIDBIT_SETP (RID_THREAD, specbits))
-+ {
-+ if (targetm.have_tls)
-+ DECL_THREAD_LOCAL (decl) = 1;
-+ else
-+ /* A mere warning is sure to result in improper semantics
-+ at runtime. Don't bother to allow this to compile. */
-+ error ("thread-local storage not supported for this target");
-+ }
-+
- if (TREE_PUBLIC (decl))
- {
- /* [basic.link]: A name with no linkage (notably, the name of a class
-@@ -10192,10 +10209,22 @@ grokdeclarator (declarator, declspecs, d
- }
- else if (RIDBIT_SETP (i, specbits))
- pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
-+
-+ /* Diagnose "__thread extern". Recall that this list
-+ is in the reverse order seen in the text. */
-+ if (i == (int)RID_THREAD)
-+ {
-+ if (RIDBIT_SETP (RID_EXTERN, specbits))
-+ error ("`__thread' before `extern'");
-+ if (RIDBIT_SETP (RID_STATIC, specbits))
-+ error ("`__thread' before `static'");
-+ }
-+
- if (i == (int)RID_EXTERN
- && TREE_PURPOSE (spec) == error_mark_node)
- /* This extern was part of a language linkage. */
- extern_langp = 1;
-+
- RIDBIT_SET (i, specbits);
- goto found;
- }
-@@ -10492,6 +10521,7 @@ grokdeclarator (declarator, declspecs, d
- {
- if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
- if (RIDBIT_SETP (RID_EXTERN, specbits) && !extern_langp) nclasses++;
-+ if (RIDBIT_SETP (RID_THREAD, specbits)) nclasses++;
- if (decl_context == PARM && nclasses > 0)
- error ("storage class specifiers invalid in parameter declarations");
- if (RIDBIT_SETP (RID_TYPEDEF, specbits))
-@@ -10523,6 +10553,13 @@ grokdeclarator (declarator, declspecs, d
- /* Warn about storage classes that are invalid for certain
- kinds of declarations (parameters, typenames, etc.). */
-
-+ /* "static __thread" and "extern __thread" are allowed. */
-+ if (nclasses == 2
-+ && RIDBIT_SETP (RID_THREAD, specbits)
-+ && (RIDBIT_SETP (RID_EXTERN, specbits)
-+ || RIDBIT_SETP (RID_STATIC, specbits)))
-+ nclasses = 1;
-+
- if (nclasses > 1)
- error ("multiple storage classes in declaration of `%s'", name);
- else if (decl_context != NORMAL && nclasses > 0)
-@@ -10578,6 +10615,7 @@ grokdeclarator (declarator, declspecs, d
- RIDBIT_RESET (RID_REGISTER, specbits);
- RIDBIT_RESET (RID_AUTO, specbits);
- RIDBIT_RESET (RID_EXTERN, specbits);
-+ RIDBIT_RESET (RID_THREAD, specbits);
- }
- }
- else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
-@@ -10600,6 +10638,14 @@ grokdeclarator (declarator, declspecs, d
- if (RIDBIT_SETP (RID_AUTO, specbits))
- error ("top-level declaration of `%s' specifies `auto'", name);
- }
-+ else if (RIDBIT_SETP (RID_THREAD, specbits)
-+ && !RIDBIT_SETP (RID_EXTERN, specbits)
-+ && !RIDBIT_SETP (RID_STATIC, specbits))
-+ {
-+ error ("function-scope `%s' implicitly auto and declared `__thread'",
-+ name);
-+ RIDBIT_RESET (RID_THREAD, specbits);
-+ }
-
- if (nclasses > 0 && friendp)
- error ("storage class specifiers invalid in friend function declarations");
-@@ -11800,6 +11846,8 @@ friend declaration requires class-key, i
- error ("storage class `auto' invalid for function `%s'", name);
- else if (RIDBIT_SETP (RID_REGISTER, specbits))
- error ("storage class `register' invalid for function `%s'", name);
-+ else if (RIDBIT_SETP (RID_THREAD, specbits))
-+ error ("storage class `__thread' invalid for function `%s'", name);
-
- /* Function declaration not at top level.
- Storage classes other than `extern' are not allowed
---- gcc/doc/extend.texi.jj Wed Jun 19 19:33:51 2002
-+++ gcc/doc/extend.texi Wed Jun 19 19:33:51 2002
-@@ -432,6 +432,7 @@ extensions, accepted by GCC in C89 mode
- * Target Builtins:: Built-in functions specific to particular targets.
- * Pragmas:: Pragmas accepted by GCC.
- * Unnamed Fields:: Unnamed struct/union fields within structs/unions.
-+* Thread-Local:: Per-thread variables.
- @end menu
-
- @node Statement Exprs
-@@ -6119,6 +6120,265 @@ It is ambiguous which @code{a} is being
- Such constructs are not supported and must be avoided. In the future,
- such constructs may be detected and treated as compilation errors.
-
-+@node Thread-Local
-+@section Thread-Local Storage
-+@cindex Thread-Local Storage
-+@cindex TLS
-+@cindex __thread
-+
-+Thread-local storage (@acronym{TLS}) is a mechanism by which variables
-+are allocated such that there is one instance of the variable per extant
-+thread. The run-time model GCC uses to implement this originates
-+in the IA-64 processor-specific ABI, but has since been migrated
-+to other processors as well. It requires significant support from
-+the linker (@command{ld}), dynamic linker (@command{ld.so}), and
-+system libraries (@file{libc.so} and @file{libpthread.so}), so it
-+is not available everywhere.
-+
-+At the user level, the extension is visible with a new storage
-+class keyword: @code{__thread}. For example:
-+
-+@example
-+__thread int i;
-+extern __thread struct state s;
-+static __thread char *p;
-+@end example
-+
-+The @code{__thread} specifier may be used alone, with the @code{extern}
-+or @code{static} specifiers, but with no other storage class specifier.
-+When used with @code{extern} or @code{static}, @code{__thread} must appear
-+immediately after the other storage class specifier.
-+
-+The @code{__thread} specifier may be applied to any global, file-scoped
-+static, function-scoped static, or static data member of a class. It may
-+not be applied to block-scoped automatic or non-static data member.
-+
-+When the address-of operator is applied to a thread-local variable, it is
-+evaluated at run-time and returns the address of the current thread's
-+instance of that variable. An address so obtained may be used by any
-+thread. When a thread terminates, any pointers to thread-local variables
-+in that thread become invalid.
-+
-+No static initialization may refer to the address of a thread-local variable.
-+
-+In C++, if an initializer is present for a thread-local variable, it must
-+be a @var{constant-expression}, as defined in 5.19.2 of the ANSI/ISO C++
-+standard.
-+
-+See @uref{http://people.redhat.com/drepper/tls.pdf,
-+ELF Handling For Thread-Local Storage} for a detailed explanation of
-+the four thread-local storage addressing models, and how the run-time
-+is expected to function.
-+
-+@menu
-+* C99 Thread-Local Edits::
-+* C++98 Thread-Local Edits::
-+@end menu
-+
-+@node C99 Thread-Local Edits
-+@subsection ISO/IEC 9899:1999 Edits for Thread-Local Storage
-+
-+The following are a set of changes to ISO/IEC 9899:1999 (aka C99)
-+that document the exact semantics of the language extension.
-+
-+@itemize @bullet
-+@item
-+@cite{5.1.2 Execution environments}
-+
-+Add new text after paragraph 1
-+
-+@quotation
-+Within either execution environment, a @dfn{thread} is a flow of
-+control within a program. It is implementation defined whether
-+or not there may be more than one thread associated with a program.
-+It is implementation defined how threads beyond the first are
-+created, the name and type of the function called at thread
-+startup, and how threads may be terminated. However, objects
-+with thread storage duration shall be initialized before thread
-+startup.
-+@end quotation
-+
-+@item
-+@cite{6.2.4 Storage durations of objects}
-+
-+Add new text before paragraph 3
-+
-+@quotation
-+An object whose identifier is declared with the storage-class
-+specifier @w{@code{__thread}} has @dfn{thread storage duration}.
-+Its lifetime is the entire execution of the thread, and its
-+stored value is initialized only once, prior to thread startup.
-+@end quotation
-+
-+@item
-+@cite{6.4.1 Keywords}
-+
-+Add @code{__thread}.
-+
-+@item
-+@cite{6.7.1 Storage-class specifiers}
-+
-+Add @code{__thread} to the list of storage class specifiers in
-+paragraph 1.
-+
-+Change paragraph 2 to
-+
-+@quotation
-+With the exception of @code{__thread}, at most one storage-class
-+specifier may be given [@dots{}]. The @code{__thread} specifier may
-+be used alone, or immediately following @code{extern} or
-+@code{static}.
-+@end quotation
-+
-+Add new text after paragraph 6
-+
-+@quotation
-+The declaration of an identifier for a variable that has
-+block scope that specifies @code{__thread} shall also
-+specify either @code{extern} or @code{static}.
-+
-+The @code{__thread} specifier shall be used only with
-+variables.
-+@end quotation
-+@end itemize
-+
-+@node C++98 Thread-Local Edits
-+@subsection ISO/IEC 14882:1998 Edits for Thread-Local Storage
-+
-+The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
-+that document the exact semantics of the language extension.
-+
-+@itemize @bullet
-+@b{[intro.execution]}
-+
-+New text after paragraph 4
-+
-+@quotation
-+A @dfn{thread} is a flow of control within the abstract machine.
-+It is implementation defined whether or not there may be more than
-+one thread.
-+@end quotation
-+
-+New text after paragraph 7
-+
-+@quotation
-+It is unspecified whether additional action must be taken to
-+ensure when and whether side effects are visible to other threads.
-+@end quotation
-+
-+@item
-+@b{[lex.key]}
-+
-+Add @code{__thread}.
-+
-+@item
-+@b{[basic.start.main]}
-+
-+Add after paragraph 5
-+
-+@quotation
-+The thread that begins execution at the @code{main} function is called
-+the @dfn{main thread}. It is implementation defined how functions
-+beginning threads other than the main thread are designated or typed.
-+A function so designated, as well as the @code{main} function, is called
-+a @dfn{thread startup function}. It is implementation defined what
-+happens if a thread startup function returns. It is implementation
-+defined what happens to other threads when any thread calls @code{exit}.
-+@end quotation
-+
-+@item
-+@b{[basic.start.init]}
-+
-+Add after paragraph 4
-+
-+@quotation
-+The storage for an object of thread storage duration shall be
-+staticly initialized before the first statement of the thread startup
-+function. An object of thread storage duration shall not require
-+dynamic initialization.
-+@end quotation
-+
-+@item
-+@b{[basic.start.term]}
-+
-+Add after paragraph 3
-+
-+@quotation
-+The type of an object with thread storage duration shall not have a
-+non-trivial destructor, nor shall it be an array type whose elements
-+(directly or indirectly) have non-trivial destructors.
-+@end quotation
-+
-+@item
-+@b{[basic.stc]}
-+
-+Add ``thread storage duration'' to the list in paragraph 1.
-+
-+Change paragraph 2
-+
-+@quotation
-+Thread, static, and automatic storage durations are associated with
-+objects introduced by declarations [@dots{}].
-+@end quotation
-+
-+Add @code{__thread} to the list of specifiers in paragraph 3.
-+
-+@item
-+@b{[basic.stc.thread]}
-+
-+New section before @b{[basic.stc.static]}
-+
-+@quotation
-+The keyword @code{__thread} applied to an non-local object gives the
-+object thread storage duration.
-+
-+A local variable or class data member declared both @code{static}
-+and @code{__thread} gives the variable or member thread storage
-+duration.
-+@end quotation
-+
-+@item
-+@b{[basic.stc.static]}
-+
-+Change paragraph 1
-+
-+@quotation
-+All objects which have neither thread storage duration, dynamic
-+storage duration nor are local [@dots{}].
-+@end quotation
-+
-+@item
-+@b{[dcl.stc]}
-+
-+Add @code{__thread} to the list in paragraph 1.
-+
-+Change paragraph 1
-+
-+@quotation
-+With the exception of @code{__thread}, at most one
-+@var{storage-class-specifier} shall appear in a given
-+@var{decl-specifier-seq}. The @code{__thread} specifier may
-+be used alone, or immediately following the @code{extern} or
-+@code{static} specifiers. [@dots{}]
-+@end quotation
-+
-+Add after paragraph 5
-+
-+@quotation
-+The @code{__thread} specifier can be applied only to the names of objects
-+and to anonymous unions.
-+@end quotation
-+
-+@item
-+@b{[class.mem]}
-+
-+Add after paragraph 6
-+
-+@quotation
-+Non-@code{static} members shall not be @code{__thread}.
-+@end quotation
-+@end itemize
-+
- @node C++ Extensions
- @chapter Extensions to the C++ Language
- @cindex extensions, C++ language
---- gcc/doc/invoke.texi.jj Tue May 21 20:27:44 2002
-+++ gcc/doc/invoke.texi Wed Jun 19 19:33:52 2002
-@@ -674,7 +674,7 @@ in the following sections.
- -fverbose-asm -fpack-struct -fstack-check @gol
- -fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol
- -fargument-alias -fargument-noalias @gol
---fargument-noalias-global -fleading-underscore}
-+-fargument-noalias-global -fleading-underscore -ftls-model=@var{model}}
- @end table
-
- @menu
-@@ -9988,6 +9988,14 @@
- generate code that is not binary compatible with code generated without that
- switch. Use it to conform to a non-default application binary interface.
- Not all targets provide complete support for this switch.
-+
-+@item -ftls-model=@var{model}
-+Alter the thread-local storage model to be used (@pxref{Thread-Local}).
-+The @var{model} argument should be one of @code{global-dynamic},
-+@code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
-+
-+The default without @option{-fpic} is @code{initial-exec}; with
-+@option{-fpic} the default is @code{global-dynamic}.
- @end table
-
- @c man end
---- gcc/config/i386/i386.c.jj Wed Jun 19 19:33:51 2002
-+++ gcc/config/i386/i386.c Wed Jun 19 23:18:18 2002
-@@ -536,6 +536,10 @@ int const svr4_dbx_register_map[FIRST_PS
- rtx ix86_compare_op0 = NULL_RTX;
- rtx ix86_compare_op1 = NULL_RTX;
-
-+/* The encoding characters for the four TLS models present in ELF. */
-+
-+static char const tls_model_chars[] = " GLil";
-+
- #define MAX_386_STACK_LOCALS 3
- /* Size of the register save area. */
- #define X86_64_VARARGS_SIZE (REGPARM_MAX * UNITS_PER_WORD + SSE_REGPARM_MAX * 16)
-@@ -544,6 +548,7 @@ rtx ix86_compare_op1 = NULL_RTX;
- struct machine_function
- {
- rtx stack_locals[(int) MAX_MACHINE_MODE][MAX_386_STACK_LOCALS];
-+ const char *some_ld_name;
- int save_varrargs_registers;
- int accesses_prev_frame;
- };
-@@ -596,6 +601,9 @@ enum cmodel ix86_cmodel;
- /* Asm dialect. */
- const char *ix86_asm_string;
- enum asm_dialect ix86_asm_dialect = ASM_ATT;
-+/* TLS dialext. */
-+const char *ix86_tls_dialect_string;
-+enum tls_dialect ix86_tls_dialect = TLS_DIALECT_GNU;
-
- /* which cpu are we scheduling for */
- enum processor_type ix86_cpu;
-@@ -646,12 +654,17 @@ static char internal_label_prefix[16];
- static int internal_label_prefix_len;
- \f
- static int local_symbolic_operand PARAMS ((rtx, enum machine_mode));
-+static int tls_symbolic_operand_1 PARAMS ((rtx, enum tls_model));
- static void output_pic_addr_const PARAMS ((FILE *, rtx, int));
- static void put_condition_code PARAMS ((enum rtx_code, enum machine_mode,
- int, int, FILE *));
-+static const char *get_some_local_dynamic_name PARAMS ((void));
-+static int get_some_local_dynamic_name_1 PARAMS ((rtx *, void *));
-+static rtx maybe_get_pool_constant PARAMS ((rtx));
- static rtx ix86_expand_int_compare PARAMS ((enum rtx_code, rtx, rtx));
- static enum rtx_code ix86_prepare_fp_compare_args PARAMS ((enum rtx_code,
- rtx *, rtx *));
-+static rtx get_thread_pointer PARAMS ((void));
- static rtx gen_push PARAMS ((rtx));
- static int memory_address_length PARAMS ((rtx addr));
- static int ix86_flags_dependant PARAMS ((rtx, rtx, enum attr_type));
-@@ -820,6 +833,11 @@ static enum x86_64_reg_class merge_class
- #undef TARGET_SCHED_REORDER
- #define TARGET_SCHED_REORDER ix86_sched_reorder
-
-+#ifdef HAVE_AS_TLS
-+#undef TARGET_HAVE_TLS
-+#define TARGET_HAVE_TLS true
-+#endif
-+
- struct gcc_target targetm = TARGET_INITIALIZER;
- \f
- /* Sometimes certain combinations of command options do not make
-@@ -1109,6 +1127,17 @@ override_options ()
- ix86_branch_cost = i;
- }
-
-+ if (ix86_tls_dialect_string)
-+ {
-+ if (strcmp (ix86_tls_dialect_string, "gnu") == 0)
-+ ix86_tls_dialect = TLS_DIALECT_GNU;
-+ else if (strcmp (ix86_tls_dialect_string, "sun") == 0)
-+ ix86_tls_dialect = TLS_DIALECT_SUN;
-+ else
-+ error ("bad value (%s) for -mtls-dialect= switch",
-+ ix86_tls_dialect_string);
-+ }
-+
- /* Keep nonleaf frame pointers. */
- if (TARGET_OMIT_LEAF_FRAME_POINTER)
- flag_omit_frame_pointer = 1;
-@@ -3007,6 +3036,70 @@ local_symbolic_operand (op, mode)
- return 0;
- }
-
-+/* Test for various thread-local symbols. See ix86_encode_section_info. */
-+
-+int
-+tls_symbolic_operand (op, mode)
-+ register rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ const char *symbol_str;
-+
-+ if (GET_CODE (op) != SYMBOL_REF)
-+ return 0;
-+ symbol_str = XSTR (op, 0);
-+
-+ if (symbol_str[0] != '%')
-+ return 0;
-+ return strchr (tls_model_chars, symbol_str[1]) - tls_model_chars;
-+}
-+
-+static int
-+tls_symbolic_operand_1 (op, kind)
-+ rtx op;
-+ enum tls_model kind;
-+{
-+ const char *symbol_str;
-+
-+ if (GET_CODE (op) != SYMBOL_REF)
-+ return 0;
-+ symbol_str = XSTR (op, 0);
-+
-+ return symbol_str[0] == '%' && symbol_str[1] == tls_model_chars[kind];
-+}
-+
-+int
-+global_dynamic_symbolic_operand (op, mode)
-+ register rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ return tls_symbolic_operand_1 (op, TLS_MODEL_GLOBAL_DYNAMIC);
-+}
-+
-+int
-+local_dynamic_symbolic_operand (op, mode)
-+ register rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ return tls_symbolic_operand_1 (op, TLS_MODEL_LOCAL_DYNAMIC);
-+}
-+
-+int
-+initial_exec_symbolic_operand (op, mode)
-+ register rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ return tls_symbolic_operand_1 (op, TLS_MODEL_INITIAL_EXEC);
-+}
-+
-+int
-+local_exec_symbolic_operand (op, mode)
-+ register rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ return tls_symbolic_operand_1 (op, TLS_MODEL_LOCAL_EXEC);
-+}
-+
- /* Test for a valid operand for a call instruction. Don't allow the
- arg pointer register or virtual regs since they may decay into
- reg + const, which the patterns can't handle. */
-@@ -3858,7 +3951,7 @@ ix86_asm_file_end (file)
- {
- rtx xops[2];
-
-- if (! TARGET_DEEP_BRANCH_PREDICTION || pic_label_name[0] == 0)
-+ if (pic_label_name[0] == 0)
- return;
-
- /* The trick here is to create a linkonce section containing the
-@@ -3896,17 +3989,33 @@ ix86_asm_file_end (file)
- output_asm_insn ("ret", xops);
- }
-
--void
--load_pic_register ()
-+/* Emit code for the SET_GOT patterns. */
-+
-+const char *
-+output_set_got (dest)
-+ rtx dest;
- {
-- rtx gotsym, pclab;
-+ rtx xops[3];
-
-- if (TARGET_64BIT)
-- abort ();
-+ xops[0] = dest;
-+ xops[1] = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
-+
-+ if (! TARGET_DEEP_BRANCH_PREDICTION || !flag_pic)
-+ {
-+ xops[2] = gen_rtx_LABEL_REF (Pmode, gen_label_rtx ());
-+
-+ if (!flag_pic)
-+ output_asm_insn ("mov{l}\t{%2, %0|%0, %2}", xops);
-+ else
-+ output_asm_insn ("call\t%a2", xops);
-
-- gotsym = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
-+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
-+ CODE_LABEL_NUMBER (XEXP (xops[2], 0)));
-
-- if (TARGET_DEEP_BRANCH_PREDICTION)
-+ if (flag_pic)
-+ output_asm_insn ("pop{l}\t%0", xops);
-+ }
-+ else
- {
- if (! pic_label_name[0])
- {
-@@ -3915,16 +4024,17 @@ load_pic_register ()
- else
- ASM_GENERATE_INTERNAL_LABEL (pic_label_name, "LPR", 0);
- }
-- pclab = gen_rtx_MEM (QImode, gen_rtx_SYMBOL_REF (Pmode, pic_label_name));
-- }
-+ xops[2] = gen_rtx_SYMBOL_REF (Pmode, pic_label_name);
-+ xops[2] = gen_rtx_MEM (QImode, xops[2]);
-+ output_asm_insn ("call\t%X2", xops);
-+ }
-+
-+ if (!flag_pic || TARGET_DEEP_BRANCH_PREDICTION)
-+ output_asm_insn ("add{l}\t{%1, %0|%0, %1}", xops);
- else
-- {
-- pclab = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
-- }
--
-- emit_insn (gen_prologue_get_pc (pic_offset_table_rtx, pclab));
--
-- emit_insn (gen_prologue_set_got (pic_offset_table_rtx, gotsym, pclab));
-+ output_asm_insn ("add{l}\t{%1+[.-%a2], %0|%0, %a1+(.-%a2)}", xops);
-+
-+ return "";
- }
-
- /* Generate an "push" pattern for input ARG. */
-@@ -4253,7 +4363,15 @@ ix86_expand_prologue ()
- #endif
-
- if (pic_reg_used)
-- load_pic_register ();
-+ {
-+ insn = emit_insn (gen_set_got (pic_offset_table_rtx));
-+
-+ /* ??? The current_function_uses_pic_offset_table flag is woefully
-+ inaccurate, as it isn't updated as code gets deleted. Allow the
-+ thing to be removed. A better solution would be to actually get
-+ proper liveness for ebx, as then we won't save/restore it too. */
-+ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD, const0_rtx, NULL);
-+ }
-
- /* If we are profiling, make sure no instructions are scheduled before
- the call to mcount. However, if -fpic, the above call will have
-@@ -4694,6 +4812,114 @@ ix86_find_base_term (x)
- return term;
- }
- \f
-+/* Determine if a given RTX is a valid constant. We already know this
-+ satisfies CONSTANT_P. */
-+
-+bool
-+legitimate_constant_p (x)
-+ rtx x;
-+{
-+ rtx inner;
-+
-+ switch (GET_CODE (x))
-+ {
-+ case SYMBOL_REF:
-+ /* TLS symbols are not constant. */
-+ if (tls_symbolic_operand (x, Pmode))
-+ return false;
-+ break;
-+
-+ case CONST:
-+ inner = XEXP (x, 0);
-+
-+ /* Offsets of TLS symbols are never valid.
-+ Discourage CSE from creating them. */
-+ if (GET_CODE (inner) == PLUS
-+ && tls_symbolic_operand (XEXP (inner, 0), Pmode))
-+ return false;
-+
-+ /* Only some unspecs are valid as "constants". */
-+ if (GET_CODE (inner) == UNSPEC)
-+ switch (XINT (inner, 1))
-+ {
-+ case UNSPEC_TPOFF:
-+ return local_exec_symbolic_operand (XVECEXP (inner, 0, 0), Pmode);
-+ case UNSPEC_TP:
-+ return true;
-+ default:
-+ return false;
-+ }
-+ break;
-+
-+ default:
-+ break;
-+ }
-+
-+ /* Otherwise we handle everything else in the move patterns. */
-+ return true;
-+}
-+
-+/* Determine if a given RTX is a valid constant address. */
-+
-+bool
-+constant_address_p (x)
-+ rtx x;
-+{
-+ switch (GET_CODE (x))
-+ {
-+ case LABEL_REF:
-+ case CONST_INT:
-+ return true;
-+
-+ case CONST_DOUBLE:
-+ return TARGET_64BIT;
-+
-+ case CONST:
-+ case SYMBOL_REF:
-+ return !flag_pic && legitimate_constant_p (x);
-+
-+ default:
-+ return false;
-+ }
-+}
-+
-+/* Nonzero if the constant value X is a legitimate general operand
-+ when generating PIC code. It is given that flag_pic is on and
-+ that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
-+
-+bool
-+legitimate_pic_operand_p (x)
-+ rtx x;
-+{
-+ rtx inner;
-+
-+ switch (GET_CODE (x))
-+ {
-+ case CONST:
-+ inner = XEXP (x, 0);
-+
-+ /* Only some unspecs are valid as "constants". */
-+ if (GET_CODE (inner) == UNSPEC)
-+ switch (XINT (inner, 1))
-+ {
-+ case UNSPEC_TPOFF:
-+ return local_exec_symbolic_operand (XVECEXP (inner, 0, 0), Pmode);
-+ case UNSPEC_TP:
-+ return true;
-+ default:
-+ return false;
-+ }
-+ /* FALLTHRU */
-+
-+ case SYMBOL_REF:
-+ case LABEL_REF:
-+ return legitimate_pic_address_disp_p (x);
-+
-+ default:
-+ return true;
-+ }
-+}
-+
- /* Determine if a given CONST RTX is a valid memory displacement
- in PIC mode. */
-
-@@ -4701,6 +4927,8 @@ int
- legitimate_pic_address_disp_p (disp)
- register rtx disp;
- {
-+ bool saw_plus;
-+
- /* In 64bit mode we can allow direct addresses of symbols and labels
- when they are not dynamic symbols. */
- if (TARGET_64BIT)
-@@ -4737,25 +4965,39 @@ legitimate_pic_address_disp_p (disp)
- return 1;
- }
-
-+ saw_plus = false;
- if (GET_CODE (disp) == PLUS)
- {
- if (GET_CODE (XEXP (disp, 1)) != CONST_INT)
- return 0;
- disp = XEXP (disp, 0);
-+ saw_plus = true;
- }
-
- if (GET_CODE (disp) != UNSPEC
- || XVECLEN (disp, 0) != 1)
- return 0;
-
-- /* Must be @GOT or @GOTOFF. */
- switch (XINT (disp, 1))
- {
-- case 6: /* @GOT */
-+ case UNSPEC_GOT:
-+ if (saw_plus)
-+ return false;
- return GET_CODE (XVECEXP (disp, 0, 0)) == SYMBOL_REF;
--
-- case 7: /* @GOTOFF */
-+ case UNSPEC_GOTOFF:
- return local_symbolic_operand (XVECEXP (disp, 0, 0), Pmode);
-+ case UNSPEC_GOTTPOFF:
-+ if (saw_plus)
-+ return false;
-+ return initial_exec_symbolic_operand (XVECEXP (disp, 0, 0), Pmode);
-+ case UNSPEC_NTPOFF:
-+ if (saw_plus)
-+ return false;
-+ return local_exec_symbolic_operand (XVECEXP (disp, 0, 0), Pmode);
-+ case UNSPEC_DTPOFF:
-+ if (saw_plus)
-+ return false;
-+ return local_dynamic_symbolic_operand (XVECEXP (disp, 0, 0), Pmode);
- }
-
- return 0;
-@@ -4882,12 +5124,6 @@ legitimate_address_p (mode, addr, strict
- {
- reason_rtx = disp;
-
-- if (!CONSTANT_ADDRESS_P (disp))
-- {
-- reason = "displacement is not constant";
-- goto report_error;
-- }
--
- if (TARGET_64BIT)
- {
- if (!x86_64_sign_extended_value (disp))
-@@ -4905,8 +5141,30 @@ legitimate_address_p (mode, addr, strict
- }
- }
-
-- if (flag_pic && SYMBOLIC_CONST (disp))
-+ if (GET_CODE (disp) == CONST
-+ && GET_CODE (XEXP (disp, 0)) == UNSPEC)
-+ switch (XINT (XEXP (disp, 0), 1))
-+ {
-+ case UNSPEC_GOT:
-+ case UNSPEC_GOTOFF:
-+ case UNSPEC_GOTPCREL:
-+ if (!flag_pic)
-+ abort ();
-+ goto is_legitimate_pic;
-+
-+ case UNSPEC_GOTTPOFF:
-+ case UNSPEC_NTPOFF:
-+ case UNSPEC_DTPOFF:
-+ break;
-+
-+ default:
-+ reason = "invalid address unspec";
-+ goto report_error;
-+ }
-+
-+ else if (flag_pic && SYMBOLIC_CONST (disp))
- {
-+ is_legitimate_pic:
- if (TARGET_64BIT && (index || base))
- {
- reason = "non-constant pic memory reference";
-@@ -4949,6 +5207,11 @@ legitimate_address_p (mode, addr, strict
- goto report_error;
- }
- }
-+ else if (!CONSTANT_ADDRESS_P (disp))
-+ {
-+ reason = "displacement is not constant";
-+ goto report_error;
-+ }
- }
-
- /* Everything looks valid. */
-@@ -5129,7 +5392,102 @@ legitimize_pic_address (orig, reg)
- }
- return new;
- }
-+
-+void
-+ix86_encode_section_info (decl)
-+ tree decl;
-+{
-+ bool local_p;
-+ rtx rtl, symbol;
-+
-+ rtl = DECL_P (decl) ? DECL_RTL (decl) : TREE_CST_RTL (decl);
-+ if (GET_CODE (rtl) != MEM)
-+ return;
-+ symbol = XEXP (rtl, 0);
-+ if (GET_CODE (symbol) != SYMBOL_REF)
-+ return;
-+
-+ local_p = !DECL_P (decl) || !TREE_PUBLIC (decl) || MODULE_LOCAL_P (decl);
-+
-+ /* For basic x86, if using PIC, mark a SYMBOL_REF for a non-global
-+ symbol so that we may access it directly in the GOT. */
-+
-+ if (flag_pic)
-+ SYMBOL_REF_FLAG (symbol) = local_p;
-+
-+ /* For ELF, encode thread-local data with %[GLil] for "global dynamic",
-+ "local dynamic", "initial exec" or "local exec" TLS models
-+ respectively. */
-+
-+ if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
-+ {
-+ const char *symbol_str;
-+ char *newstr;
-+ size_t len;
-+ enum tls_model kind;
-+
-+ if (!flag_pic)
-+ {
-+ if (local_p)
-+ kind = TLS_MODEL_LOCAL_EXEC;
-+ else
-+ kind = TLS_MODEL_INITIAL_EXEC;
-+ }
-+ /* Local dynamic is inefficient when we're not combining the
-+ parts of the address. */
-+ else if (optimize && local_p)
-+ kind = TLS_MODEL_LOCAL_DYNAMIC;
-+ else
-+ kind = TLS_MODEL_GLOBAL_DYNAMIC;
-+ if (kind < flag_tls_default)
-+ kind = flag_tls_default;
-+
-+ symbol_str = XSTR (symbol, 0);
-+
-+ if (symbol_str[0] == '%')
-+ {
-+ if (symbol_str[1] == tls_model_chars[kind])
-+ return;
-+ symbol_str += 2;
-+ }
-+ len = strlen (symbol_str) + 1;
-+ newstr = alloca (len + 2);
-+
-+ newstr[0] = '%';
-+ newstr[1] = tls_model_chars[kind];
-+ memcpy (newstr + 2, symbol_str, len);
-+
-+ XSTR (symbol, 0) = ggc_alloc_string (newstr, len + 2 - 1);
-+ }
-+}
-+
-+/* Undo the above when printing symbol names. */
-+
-+const char *
-+ix86_strip_name_encoding (str)
-+ const char *str;
-+{
-+ if (str[0] == '%')
-+ str += 2;
-+ if (str [0] == '*')
-+ str += 1;
-+ return str;
-+}
- \f
-+/* Load the thread pointer into a register. */
-+
-+static rtx
-+get_thread_pointer ()
-+{
-+ rtx tp;
-+
-+ tp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx), UNSPEC_TP);
-+ tp = gen_rtx_CONST (Pmode, tp);
-+ tp = force_reg (Pmode, tp);
-+
-+ return tp;
-+}
-+
- /* Try machine-dependent ways of modifying an illegitimate address
- to be legitimate. If we find one, return the new, valid address.
- This macro is used in only one place: `memory_address' in explow.c.
-@@ -5167,6 +5525,84 @@ legitimize_address (x, oldx, mode)
- debug_rtx (x);
- }
-
-+ log = tls_symbolic_operand (x, mode);
-+ if (log)
-+ {
-+ rtx dest, base, off, pic;
-+
-+ switch (log)
-+ {
-+ case TLS_MODEL_GLOBAL_DYNAMIC:
-+ dest = gen_reg_rtx (Pmode);
-+ emit_insn (gen_tls_global_dynamic (dest, x));
-+ break;
-+
-+ case TLS_MODEL_LOCAL_DYNAMIC:
-+ base = gen_reg_rtx (Pmode);
-+ emit_insn (gen_tls_local_dynamic_base (base));
-+
-+ off = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, x), UNSPEC_DTPOFF);
-+ off = gen_rtx_CONST (Pmode, off);
-+
-+ return gen_rtx_PLUS (Pmode, base, off);
-+
-+ case TLS_MODEL_INITIAL_EXEC:
-+ if (flag_pic)
-+ {
-+ current_function_uses_pic_offset_table = 1;
-+ pic = pic_offset_table_rtx;
-+ }
-+ else
-+ {
-+ pic = gen_reg_rtx (Pmode);
-+ emit_insn (gen_set_got (pic));
-+ }
-+
-+ base = get_thread_pointer ();
-+
-+ off = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, x), UNSPEC_GOTTPOFF);
-+ off = gen_rtx_CONST (Pmode, off);
-+ off = gen_rtx_PLUS (Pmode, pic, off);
-+ off = gen_rtx_MEM (Pmode, off);
-+ RTX_UNCHANGING_P (off) = 1;
-+ set_mem_alias_set (off, ix86_GOT_alias_set ());
-+
-+ /* Damn Sun for specifing a set of dynamic relocations without
-+ considering the two-operand nature of the architecture!
-+ We'd be much better off with a "GOTNTPOFF" relocation that
-+ already contained the negated constant. */
-+ /* ??? Using negl and reg+reg addressing appears to be a lose
-+ size-wise. The negl is two bytes, just like the extra movl
-+ incurred by the two-operand subl, but reg+reg addressing
-+ uses the two-byte modrm form, unlike plain reg. */
-+
-+ dest = gen_reg_rtx (Pmode);
-+ emit_insn (gen_subsi3 (dest, base, off));
-+ break;
-+
-+ case TLS_MODEL_LOCAL_EXEC:
-+ base = get_thread_pointer ();
-+
-+ off = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, x),
-+ TARGET_GNU_TLS ? UNSPEC_NTPOFF : UNSPEC_TPOFF);
-+ off = gen_rtx_CONST (Pmode, off);
-+
-+ if (TARGET_GNU_TLS)
-+ return gen_rtx_PLUS (Pmode, base, off);
-+ else
-+ {
-+ dest = gen_reg_rtx (Pmode);
-+ emit_insn (gen_subsi3 (dest, base, off));
-+ }
-+ break;
-+
-+ default:
-+ abort ();
-+ }
-+
-+ return dest;
-+ }
-+
- if (flag_pic && SYMBOLIC_CONST (x))
- return legitimize_pic_address (x, 0);
-
-@@ -5410,18 +5846,30 @@ output_pic_addr_const (file, x, code)
- output_pic_addr_const (file, XVECEXP (x, 0, 0), code);
- switch (XINT (x, 1))
- {
-- case 6:
-+ case UNSPEC_GOT:
- fputs ("@GOT", file);
- break;
-- case 7:
-+ case UNSPEC_GOTOFF:
- fputs ("@GOTOFF", file);
- break;
-- case 8:
-+ case UNSPEC_PLT:
- fputs ("@PLT", file);
- break;
-- case 15:
-+ case UNSPEC_GOTPCREL:
- fputs ("@GOTPCREL(%RIP)", file);
- break;
-+ case UNSPEC_GOTTPOFF:
-+ fputs ("@GOTTPOFF", file);
-+ break;
-+ case UNSPEC_TPOFF:
-+ fputs ("@TPOFF", file);
-+ break;
-+ case UNSPEC_NTPOFF:
-+ fputs ("@NTPOFF", file);
-+ break;
-+ case UNSPEC_DTPOFF:
-+ fputs ("@DTPOFF", file);
-+ break;
- default:
- output_operand_lossage ("invalid UNSPEC as operand");
- break;
-@@ -5710,6 +6158,43 @@ print_reg (x, code, file)
- }
- }
-
-+/* Locate some local-dynamic symbol still in use by this function
-+ so that we can print its name in some tls_local_dynamic_base
-+ pattern. */
-+
-+static const char *
-+get_some_local_dynamic_name ()
-+{
-+ rtx insn;
-+
-+ if (cfun->machine->some_ld_name)
-+ return cfun->machine->some_ld_name;
-+
-+ for (insn = get_insns (); insn ; insn = NEXT_INSN (insn))
-+ if (INSN_P (insn)
-+ && for_each_rtx (&PATTERN (insn), get_some_local_dynamic_name_1, 0))
-+ return cfun->machine->some_ld_name;
-+
-+ abort ();
-+}
-+
-+static int
-+get_some_local_dynamic_name_1 (px, data)
-+ rtx *px;
-+ void *data ATTRIBUTE_UNUSED;
-+{
-+ rtx x = *px;
-+
-+ if (GET_CODE (x) == SYMBOL_REF
-+ && local_dynamic_symbolic_operand (x, Pmode))
-+ {
-+ cfun->machine->some_ld_name = XSTR (x, 0);
-+ return 1;
-+ }
-+
-+ return 0;
-+}
-+
- /* Meaning of CODE:
- L,W,B,Q,S,T -- print the opcode suffix for specified size of operand.
- C -- print opcode suffix for set/cmov insn.
-@@ -5734,6 +6219,7 @@ print_reg (x, code, file)
- D -- print condition for SSE cmp instruction.
- P -- if PIC, print an @PLT suffix.
- X -- don't print any sort of PIC '@' suffix for a symbol.
-+ & -- print some in-use local-dynamic symbol name.
- */
-
- void
-@@ -5751,6 +6237,10 @@ print_operand (file, x, code)
- putc ('*', file);
- return;
-
-+ case '&':
-+ assemble_name (file, get_some_local_dynamic_name ());
-+ return;
-+
- case 'A':
- if (ASSEMBLER_DIALECT == ASM_ATT)
- putc ('*', file);
-@@ -6078,6 +6568,18 @@ print_operand (file, x, code)
- REAL_VALUE_TO_DECIMAL (r, "%.22e", dstr);
- fprintf (file, "%s", dstr);
- }
-+
-+ else if (GET_CODE (x) == CONST
-+ && GET_CODE (XEXP (x, 0)) == UNSPEC
-+ && XINT (XEXP (x, 0), 1) == UNSPEC_TP)
-+ {
-+ if (ASSEMBLER_DIALECT == ASM_INTEL)
-+ fputs ("DWORD PTR ", file);
-+ if (ASSEMBLER_DIALECT == ASM_ATT || USER_LABEL_PREFIX[0] == 0)
-+ putc ('%', file);
-+ fputs ("gs:0", file);
-+ }
-+
- else
- {
- if (code != 'P')
-@@ -6226,6 +6728,43 @@ print_operand_address (file, addr)
- }
- }
- }
-+
-+bool
-+output_addr_const_extra (file, x)
-+ FILE *file;
-+ rtx x;
-+{
-+ rtx op;
-+
-+ if (GET_CODE (x) != UNSPEC)
-+ return false;
-+
-+ op = XVECEXP (x, 0, 0);
-+ switch (XINT (x, 1))
-+ {
-+ case UNSPEC_GOTTPOFF:
-+ output_addr_const (file, op);
-+ fputs ("@GOTTPOFF", file);
-+ break;
-+ case UNSPEC_TPOFF:
-+ output_addr_const (file, op);
-+ fputs ("@TPOFF", file);
-+ break;
-+ case UNSPEC_NTPOFF:
-+ output_addr_const (file, op);
-+ fputs ("@NTPOFF", file);
-+ break;
-+ case UNSPEC_DTPOFF:
-+ output_addr_const (file, op);
-+ fputs ("@DTPOFF", file);
-+ break;
-+
-+ default:
-+ return false;
-+ }
-+
-+ return true;
-+}
- \f
- /* Split one or more DImode RTL references into pairs of SImode
- references. The RTL can be REG, offsettable MEM, integer constant, or
-@@ -6763,51 +7302,117 @@ ix86_expand_clear (dest)
- emit_insn (tmp);
- }
-
-+/* X is an unchanging MEM. If it is a constant pool reference, return
-+ the constant pool rtx, else NULL. */
-+
-+static rtx
-+maybe_get_pool_constant (x)
-+ rtx x;
-+{
-+ x = XEXP (x, 0);
-+
-+ if (flag_pic)
-+ {
-+ if (GET_CODE (x) != PLUS)
-+ return NULL_RTX;
-+ if (XEXP (x, 0) != pic_offset_table_rtx)
-+ return NULL_RTX;
-+ x = XEXP (x, 1);
-+ if (GET_CODE (x) != CONST)
-+ return NULL_RTX;
-+ x = XEXP (x, 0);
-+ if (GET_CODE (x) != UNSPEC)
-+ return NULL_RTX;
-+ if (XINT (x, 1) != UNSPEC_GOTOFF)
-+ return NULL_RTX;
-+ x = XVECEXP (x, 0, 0);
-+ }
-+
-+ if (GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x))
-+ return get_pool_constant (x);
-+
-+ return NULL_RTX;
-+}
-+
- void
- ix86_expand_move (mode, operands)
- enum machine_mode mode;
- rtx operands[];
- {
- int strict = (reload_in_progress || reload_completed);
-- rtx insn;
-+ rtx insn, op0, op1, tmp;
-+
-+ op0 = operands[0];
-+ op1 = operands[1];
-
-- if (flag_pic && mode == Pmode && symbolic_operand (operands[1], Pmode))
-+ /* ??? We have a slight problem. We need to say that tls symbols are
-+ not legitimate constants so that reload does not helpfully reload
-+ these constants from a REG_EQUIV, which we cannot handle. (Recall
-+ that general- and local-dynamic address resolution requires a
-+ function call.)
-+
-+ However, if we say that tls symbols are not legitimate constants,
-+ then emit_move_insn helpfully drop them into the constant pool.
-+
-+ It is far easier to work around emit_move_insn than reload. Recognize
-+ the MEM that we would have created and extract the symbol_ref. */
-+
-+ if (mode == Pmode
-+ && GET_CODE (op1) == MEM
-+ && RTX_UNCHANGING_P (op1))
- {
-- /* Emit insns to move operands[1] into operands[0]. */
-+ tmp = maybe_get_pool_constant (op1);
-+ /* Note that we only care about symbolic constants here, which
-+ unlike CONST_INT will always have a proper mode. */
-+ if (tmp && GET_MODE (tmp) == Pmode)
-+ op1 = tmp;
-+ }
-
-- if (GET_CODE (operands[0]) == MEM)
-- operands[1] = force_reg (Pmode, operands[1]);
-+ if (tls_symbolic_operand (op1, Pmode))
-+ {
-+ op1 = legitimize_address (op1, op1, VOIDmode);
-+ if (GET_CODE (op0) == MEM)
-+ {
-+ tmp = gen_reg_rtx (mode);
-+ emit_insn (gen_rtx_SET (VOIDmode, tmp, op1));
-+ op1 = tmp;
-+ }
-+ }
-+ else if (flag_pic && mode == Pmode && symbolic_operand (op1, Pmode))
-+ {
-+ if (GET_CODE (op0) == MEM)
-+ op1 = force_reg (Pmode, op1);
- else
- {
-- rtx temp = operands[0];
-+ rtx temp = op0;
- if (GET_CODE (temp) != REG)
- temp = gen_reg_rtx (Pmode);
-- temp = legitimize_pic_address (operands[1], temp);
-- if (temp == operands[0])
-+ temp = legitimize_pic_address (op1, temp);
-+ if (temp == op0)
- return;
-- operands[1] = temp;
-+ op1 = temp;
- }
- }
- else
- {
-- if (GET_CODE (operands[0]) == MEM
-+ if (GET_CODE (op0) == MEM
- && (PUSH_ROUNDING (GET_MODE_SIZE (mode)) != GET_MODE_SIZE (mode)
-- || !push_operand (operands[0], mode))
-- && GET_CODE (operands[1]) == MEM)
-- operands[1] = force_reg (mode, operands[1]);
--
-- if (push_operand (operands[0], mode)
-- && ! general_no_elim_operand (operands[1], mode))
-- operands[1] = copy_to_mode_reg (mode, operands[1]);
-+ || !push_operand (op0, mode))
-+ && GET_CODE (op1) == MEM)
-+ op1 = force_reg (mode, op1);
-+
-+ if (push_operand (op0, mode)
-+ && ! general_no_elim_operand (op1, mode))
-+ op1 = copy_to_mode_reg (mode, op1);
-
- /* Force large constants in 64bit compilation into register
- to get them CSEed. */
- if (TARGET_64BIT && mode == DImode
-- && immediate_operand (operands[1], mode)
-- && !x86_64_zero_extended_value (operands[1])
-- && !register_operand (operands[0], mode)
-+ && immediate_operand (op1, mode)
-+ && !x86_64_zero_extended_value (op1)
-+ && !register_operand (op0, mode)
- && optimize && !reload_completed && !reload_in_progress)
-- operands[1] = copy_to_mode_reg (mode, operands[1]);
-+ op1 = copy_to_mode_reg (mode, op1);
-
- if (FLOAT_MODE_P (mode))
- {
-@@ -6817,13 +7422,13 @@ ix86_expand_move (mode, operands)
-
- if (strict)
- ;
-- else if (GET_CODE (operands[1]) == CONST_DOUBLE
-- && register_operand (operands[0], mode))
-- operands[1] = validize_mem (force_const_mem (mode, operands[1]));
-+ else if (GET_CODE (op1) == CONST_DOUBLE
-+ && register_operand (op0, mode))
-+ op1 = validize_mem (force_const_mem (mode, op1));
- }
- }
-
-- insn = gen_rtx_SET (VOIDmode, operands[0], operands[1]);
-+ insn = gen_rtx_SET (VOIDmode, op0, op1);
-
- emit_insn (insn);
- }
-@@ -8588,13 +9193,14 @@ ix86_split_to_parts (operand, parts, mod
- if (size < 2 || size > 3)
- abort ();
-
-- /* Optimize constant pool reference to immediates. This is used by fp moves,
-- that force all constants to memory to allow combining. */
--
-- if (GET_CODE (operand) == MEM
-- && GET_CODE (XEXP (operand, 0)) == SYMBOL_REF
-- && CONSTANT_POOL_ADDRESS_P (XEXP (operand, 0)))
-- operand = get_pool_constant (XEXP (operand, 0));
-+ /* Optimize constant pool reference to immediates. This is used by fp
-+ moves, that force all constants to memory to allow combining. */
-+ if (GET_CODE (operand) == MEM && RTX_UNCHANGING_P (operand))
-+ {
-+ rtx tmp = maybe_get_pool_constant (operand);
-+ if (tmp)
-+ operand = tmp;
-+ }
-
- if (GET_CODE (operand) == MEM && !offsettable_memref_p (operand))
- {
-@@ -9790,6 +10396,55 @@ ix86_expand_strlensi_unroll_1 (out, alig
-
- emit_label (end_0_label);
- }
-+
-+void
-+ix86_expand_call (retval, fnaddr, callarg1, callarg2, pop)
-+ rtx retval, fnaddr, callarg1, callarg2, pop;
-+{
-+ rtx use = NULL, call;
-+
-+ if (pop == const0_rtx)
-+ pop = NULL;
-+ if (TARGET_64BIT && pop)
-+ abort ();
-+
-+ /* Static functions and indirect calls don't need the pic register. */
-+ if (! TARGET_64BIT && flag_pic
-+ && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF
-+ && ! SYMBOL_REF_FLAG (XEXP (fnaddr, 0)))
-+ {
-+ current_function_uses_pic_offset_table = 1;
-+ use_reg (&use, pic_offset_table_rtx);
-+ }
-+
-+ if (TARGET_64BIT && INTVAL (callarg2) >= 0)
-+ {
-+ rtx al = gen_rtx_REG (QImode, 0);
-+ emit_move_insn (al, callarg2);
-+ use_reg (&use, al);
-+ }
-+
-+ if (! call_insn_operand (XEXP (fnaddr, 0), Pmode))
-+ {
-+ fnaddr = copy_to_mode_reg (Pmode, XEXP (fnaddr, 0));
-+ fnaddr = gen_rtx_MEM (QImode, fnaddr);
-+ }
-+
-+ call = gen_rtx_CALL (VOIDmode, fnaddr, callarg1);
-+ if (retval)
-+ call = gen_rtx_SET (VOIDmode, retval, call);
-+ if (pop)
-+ {
-+ pop = gen_rtx_PLUS (Pmode, stack_pointer_rtx, pop);
-+ pop = gen_rtx_SET (VOIDmode, stack_pointer_rtx, pop);
-+ call = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, call, pop));
-+ }
-+
-+ call = emit_call_insn (call);
-+ if (use)
-+ CALL_INSN_FUNCTION_USAGE (call) = use;
-+}
-+
- \f
- /* Clear stack slot assignments remembered from previous functions.
- This is called from INIT_EXPANDERS once before RTL is emitted for each
-@@ -9849,6 +10504,24 @@ assign_386_stack_local (mode, n)
-
- return ix86_stack_locals[(int) mode][n];
- }
-+
-+/* Construct the SYMBOL_REF for the tls_get_addr function. */
-+
-+rtx
-+ix86_tls_get_addr ()
-+{
-+ static rtx symbol;
-+
-+ if (!symbol)
-+ {
-+ symbol = gen_rtx_SYMBOL_REF (Pmode, (TARGET_GNU_TLS
-+ ? "___tls_get_addr"
-+ : "__tls_get_addr"));
-+ ggc_add_rtx_root (&symbol, 1);
-+ }
-+
-+ return symbol;
-+}
- \f
- /* Calculate the length of the memory address in the instruction
- encoding. Does not include the one-byte modrm, opcode, or prefix. */
---- gcc/config/i386/i386-protos.h.jj Wed Jun 19 15:18:02 2002
-+++ gcc/config/i386/i386-protos.h Wed Jun 19 19:33:52 2002
-@@ -28,7 +28,6 @@ extern int ix86_frame_pointer_required P
- extern void ix86_setup_frame_addresses PARAMS ((void));
-
- extern void ix86_asm_file_end PARAMS ((FILE *));
--extern void load_pic_register PARAMS ((void));
- extern HOST_WIDE_INT ix86_initial_elimination_offset PARAMS((int, int));
- extern void ix86_expand_prologue PARAMS ((void));
- extern void ix86_expand_epilogue PARAMS ((int));
-@@ -36,6 +35,9 @@ extern void ix86_expand_epilogue PARAMS
- extern void ix86_output_addr_vec_elt PARAMS ((FILE *, int));
- extern void ix86_output_addr_diff_elt PARAMS ((FILE *, int, int));
-
-+extern void ix86_encode_section_info PARAMS ((tree));
-+extern const char *ix86_strip_name_encoding PARAMS ((const char *));
-+
- #ifdef RTX_CODE
- extern int ix86_aligned_p PARAMS ((rtx));
-
-@@ -51,6 +53,11 @@ extern int x86_64_immediate_operand PARA
- extern int x86_64_zext_immediate_operand PARAMS ((rtx, enum machine_mode));
- extern int const_int_1_operand PARAMS ((rtx, enum machine_mode));
- extern int symbolic_operand PARAMS ((rtx, enum machine_mode));
-+extern int tls_symbolic_operand PARAMS ((rtx, enum machine_mode));
-+extern int global_dynamic_symbolic_operand PARAMS ((rtx, enum machine_mode));
-+extern int local_dynamic_symbolic_operand PARAMS ((rtx, enum machine_mode));
-+extern int initial_exec_symbolic_operand PARAMS ((rtx, enum machine_mode));
-+extern int local_exec_symbolic_operand PARAMS ((rtx, enum machine_mode));
- extern int pic_symbolic_operand PARAMS ((rtx, enum machine_mode));
- extern int call_insn_operand PARAMS ((rtx, enum machine_mode));
- extern int constant_call_address_operand PARAMS ((rtx, enum machine_mode));
-@@ -84,6 +91,9 @@ extern int ix86_expand_movstr PARAMS ((r
- extern int ix86_expand_clrstr PARAMS ((rtx, rtx, rtx));
- extern int ix86_expand_strlen PARAMS ((rtx, rtx, rtx, rtx));
-
-+extern bool legitimate_constant_p PARAMS ((rtx));
-+extern bool constant_address_p PARAMS ((rtx));
-+extern bool legitimate_pic_operand_p PARAMS ((rtx));
- extern int legitimate_pic_address_disp_p PARAMS ((rtx));
- extern int legitimate_address_p PARAMS ((enum machine_mode, rtx, int));
- extern rtx legitimize_pic_address PARAMS ((rtx, rtx));
-@@ -92,10 +102,12 @@ extern rtx legitimize_address PARAMS ((r
- extern void print_reg PARAMS ((rtx, int, FILE*));
- extern void print_operand PARAMS ((FILE*, rtx, int));
- extern void print_operand_address PARAMS ((FILE*, rtx));
-+extern bool output_addr_const_extra PARAMS ((FILE*, rtx));
-
- extern void split_di PARAMS ((rtx[], int, rtx[], rtx[]));
- extern void split_ti PARAMS ((rtx[], int, rtx[], rtx[]));
-
-+extern const char *output_set_got PARAMS ((rtx));
- extern const char *output_387_binary_op PARAMS ((rtx, rtx*));
- extern const char *output_fix_trunc PARAMS ((rtx, rtx*));
- extern const char *output_fp_compare PARAMS ((rtx, rtx*, int, int));
-@@ -121,6 +133,7 @@ extern void ix86_expand_branch PARAMS ((
- extern int ix86_expand_setcc PARAMS ((enum rtx_code, rtx));
- extern int ix86_expand_int_movcc PARAMS ((rtx[]));
- extern int ix86_expand_fp_movcc PARAMS ((rtx[]));
-+extern void ix86_expand_call PARAMS ((rtx, rtx, rtx, rtx, rtx));
- extern void x86_initialize_trampoline PARAMS ((rtx, rtx, rtx));
- extern rtx ix86_zero_extend_to_Pmode PARAMS ((rtx));
- extern void ix86_split_long_move PARAMS ((rtx[]));
-@@ -181,6 +194,8 @@ extern rtx ix86_expand_builtin PARAMS ((
-
- #endif
-
-+extern rtx ix86_tls_get_addr PARAMS ((void));
-+
- #ifdef TREE_CODE
- extern int ix86_return_pops_args PARAMS ((tree, tree, int));
- extern tree ix86_build_va_list PARAMS ((void));
---- gcc/config/i386/i386.h.jj Wed Jun 19 19:33:51 2002
-+++ gcc/config/i386/i386.h Wed Jun 19 20:20:56 2002
-@@ -282,6 +282,9 @@ extern int x86_prefetch_sse;
-
- #define TARGET_RED_ZONE (!(target_flags & MASK_NO_RED_ZONE))
-
-+#define TARGET_GNU_TLS (ix86_tls_dialect == TLS_DIALECT_GNU)
-+#define TARGET_SUN_TLS (ix86_tls_dialect == TLS_DIALECT_SUN)
-+
- /* WARNING: Do not mark empty strings for translation, as calling
- gettext on an empty string does NOT return an empty
- string. */
-@@ -451,6 +454,8 @@ extern int ix86_arch;
- "" /* Undocumented. */ }, \
- { "asm=", &ix86_asm_string, \
- N_("Use given assembler dialect") }, \
-+ { "tls-dialect=", &ix86_tls_dialect_string, \
-+ N_("Use given thread-local storage dialect") }, \
- SUBTARGET_OPTIONS \
- }
-
-@@ -1934,15 +1939,12 @@ do { \
-
- #define MAX_REGS_PER_ADDRESS 2
-
--#define CONSTANT_ADDRESS_P(X) \
-- (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
-- || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
-- || GET_CODE (X) == CONST_DOUBLE)
-+#define CONSTANT_ADDRESS_P(X) constant_address_p (X)
-
- /* Nonzero if the constant value X is a legitimate general operand.
- It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
-
--#define LEGITIMATE_CONSTANT_P(X) 1
-+#define LEGITIMATE_CONSTANT_P(X) legitimate_constant_p (X)
-
- #ifdef REG_OK_STRICT
- #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
-@@ -2005,9 +2007,7 @@ do { \
- when generating PIC code. It is given that flag_pic is on and
- that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
-
--#define LEGITIMATE_PIC_OPERAND_P(X) \
-- (! SYMBOLIC_CONST (X) \
-- || legitimate_pic_address_disp_p (X))
-+#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X)
-
- #define SYMBOLIC_CONST(X) \
- (GET_CODE (X) == SYMBOL_REF \
-@@ -2251,33 +2251,23 @@ enum ix86_builtins
- On i386, if using PIC, mark a SYMBOL_REF for a non-global symbol
- so that we may access it directly in the GOT. */
-
--#define ENCODE_SECTION_INFO(DECL) \
--do { \
-- if (flag_pic) \
-- { \
-- rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \
-- ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \
-- \
-- if (GET_CODE (rtl) == MEM) \
-- { \
-- if (TARGET_DEBUG_ADDR \
-- && TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd') \
-- { \
-- fprintf (stderr, "Encode %s, public = %d\n", \
-- IDENTIFIER_POINTER (DECL_NAME (DECL)), \
-- TREE_PUBLIC (DECL)); \
-- } \
-- \
-- SYMBOL_REF_FLAG (XEXP (rtl, 0)) \
-- = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \
-- || ! TREE_PUBLIC (DECL) \
-- || MODULE_LOCAL_P (DECL)); \
-- } \
-- } \
--} while (0)
--
-+#define ENCODE_SECTION_INFO(DECL) ix86_encode_section_info(DECL)
- #define REDO_SECTION_INFO_P(DECL) 1
-
-+#define STRIP_NAME_ENCODING(VAR,STR) ((VAR) = ix86_strip_name_encoding (STR))
-+
-+#define ASM_OUTPUT_LABELREF(FILE,NAME) \
-+ do { \
-+ const char *xname = (NAME); \
-+ if (xname[0] == '%') \
-+ xname += 2; \
-+ if (xname[0] == '*') \
-+ xname += 1; \
-+ else \
-+ fputs (user_label_prefix, FILE); \
-+ fputs (xname, FILE); \
-+ } while (0)
-+
- /* The `FINALIZE_PIC' macro serves as a hook to emit these special
- codes once the function is being compiled into assembly code, but
- not before. (It is not done before, because in the case of
-@@ -2923,7 +2913,7 @@ extern int const svr4_dbx_register_map[F
- print_operand function. */
-
- #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
-- ((CODE) == '*' || (CODE) == '+')
-+ ((CODE) == '*' || (CODE) == '+' || (CODE) == '&')
-
- /* Print the name of a register based on its machine mode and number.
- If CODE is 'w', pretend the mode is HImode.
-@@ -2942,6 +2932,12 @@ extern int const svr4_dbx_register_map[F
- #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
- print_operand_address ((FILE), (ADDR))
-
-+#define OUTPUT_ADDR_CONST_EXTRA(FILE, X, FAIL) \
-+do { \
-+ if (! output_addr_const_extra (FILE, (X))) \
-+ goto FAIL; \
-+} while (0);
-+
- /* Print the name of a register for based on its machine mode and number.
- This macro is used to print debugging output.
- This macro is different from PRINT_REG in that it may be used in
-@@ -3071,7 +3067,12 @@ extern int const svr4_dbx_register_map[F
- {"memory_displacement_operand", {MEM}}, \
- {"cmpsi_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \
- LABEL_REF, SUBREG, REG, MEM, AND}}, \
-- {"long_memory_operand", {MEM}},
-+ {"long_memory_operand", {MEM}}, \
-+ {"tls_symbolic_operand", {SYMBOL_REF}}, \
-+ {"global_dynamic_symbolic_operand", {SYMBOL_REF}}, \
-+ {"local_dynamic_symbolic_operand", {SYMBOL_REF}}, \
-+ {"initial_exec_symbolic_operand", {SYMBOL_REF}}, \
-+ {"local_exec_symbolic_operand", {SYMBOL_REF}},
-
- /* A list of predicates that do special things with modes, and so
- should not elicit warnings for VOIDmode match_operand. */
-@@ -3112,6 +3113,16 @@ enum asm_dialect {
- };
- extern const char *ix86_asm_string;
- extern enum asm_dialect ix86_asm_dialect;
-+
-+enum tls_dialect
-+{
-+ TLS_DIALECT_GNU,
-+ TLS_DIALECT_SUN
-+};
-+
-+extern enum tls_dialect ix86_tls_dialect;
-+extern const char *ix86_tls_dialect_string;
-+
- /* Value of -mcmodel specified by user. */
- extern const char *ix86_cmodel_string;
- extern enum cmodel ix86_cmodel;
---- gcc/config/i386/i386.md.jj Tue Jun 4 20:28:36 2002
-+++ gcc/config/i386/i386.md Wed Jun 19 19:33:52 2002
-@@ -49,55 +49,59 @@
- ;; 'k' Likewise, print the SImode name of the register.
- ;; 'h' Print the QImode name for a "high" register, either ah, bh, ch or dh.
- ;; 'y' Print "st(0)" instead of "st" as a register.
--;;
-+
- ;; UNSPEC usage:
--;; 0 This is a `scas' operation. The mode of the UNSPEC is always SImode.
--;; operand 0 is the memory address to scan.
--;; operand 1 is a register containing the value to scan for. The mode
--;; of the scas opcode will be the same as the mode of this operand.
--;; operand 2 is the known alignment of operand 0.
--;; 1 This is a `sin' operation. The mode of the UNSPEC is MODE_FLOAT.
--;; operand 0 is the argument for `sin'.
--;; 2 This is a `cos' operation. The mode of the UNSPEC is MODE_FLOAT.
--;; operand 0 is the argument for `cos'.
--;; 3 This is part of a `stack probe' operation. The mode of the UNSPEC is
--;; always SImode. operand 0 is the size of the stack allocation.
--;; 4 This is the source of a fake SET of the frame pointer which is used to
--;; prevent insns referencing it being scheduled across the initial
--;; decrement of the stack pointer.
--;; 5 This is a `bsf' operation.
--;; 6 This is the @GOT offset of a PIC address.
--;; 7 This is the @GOTOFF offset of a PIC address.
--;; 8 This is a reference to a symbol's @PLT address.
--;; 9 This is an `fnstsw' operation.
--;; 10 This is a `sahf' operation.
--;; 11 This is a `fstcw' operation
--;; 12 This is behaviour of add when setting carry flag.
--;; 13 This is a `eh_return' placeholder.
--
--;; For SSE/MMX support:
--;; 30 This is `fix', guaranteed to be truncating.
--;; 31 This is a `emms' operation.
--;; 32 This is a `maskmov' operation.
--;; 33 This is a `movmsk' operation.
--;; 34 This is a `non-temporal' move.
--;; 36 This is used to distinguish COMISS from UCOMISS.
--;; 37 This is a `ldmxcsr' operation.
--;; 38 This is a forced `movaps' instruction (rather than whatever movti does)
--;; 39 This is a forced `movups' instruction (rather than whatever movti does)
--;; 40 This is a `stmxcsr' operation.
--;; 41 This is a `shuffle' operation.
--;; 42 This is a `rcp' operation.
--;; 43 This is a `rsqsrt' operation.
--;; 44 This is a `sfence' operation.
--;; 45 This is a noop to prevent excessive combiner cleverness.
--;; 46 This is a `femms' operation.
--;; 49 This is a 'pavgusb' operation.
--;; 50 This is a `pfrcp' operation.
--;; 51 This is a `pfrcpit1' operation.
--;; 52 This is a `pfrcpit2' operation.
--;; 53 This is a `pfrsqrt' operation.
--;; 54 This is a `pfrsqrit1' operation.
-+;; ??? Note that the 3.1 branch, unlike mainline, has not had all
-+;; of the uses of UNSPEC replaced with their symbolic constants.
-+;; Thus you cannot change these arbitrarily without pain.
-+
-+(define_constants
-+ [(UNSPEC_SCAS 0)
-+ (UNSPEC_SIN 1)
-+ (UNSPEC_COS 2)
-+ (UNSPEC_STACK_PROBE 3)
-+ (UNSPEC_STACK_ALLOC 4)
-+ (UNSPEC_BSF 5)
-+ (UNSPEC_GOT 6)
-+ (UNSPEC_GOTOFF 7)
-+ (UNSPEC_PLT 8)
-+ (UNSPEC_FNSTSW 9)
-+ (UNSPEC_SAHF 10)
-+ (UNSPEC_FSTCW 11)
-+ (UNSPEC_FLDCW 12)
-+ (UNSPEC_ADD_CARRY 12)
-+ (UNSPEC_EH_RETURN 13)
-+ (UNSPEC_GOTPCREL 15)
-+ (UNSPEC_SET_GOT 16)
-+
-+ ; For TLS support:
-+ (UNSPEC_GOTTPOFF 20)
-+ (UNSPEC_TPOFF 21)
-+ (UNSPEC_NTPOFF 22)
-+ (UNSPEC_DTPOFF 23)
-+ (UNSPEC_TP 24)
-+ (UNSPEC_TLS_GD 25)
-+ (UNSPEC_TLS_LD_BASE 26)
-+
-+ ; For SSE/MMX support:
-+ (UNSPEC_FIX 30)
-+ (UNSPEC_MASKMOV 32)
-+ (UNSPEC_MOVMSK 33)
-+ (UNSPEC_MOVNT 34)
-+ (UNSPEC_MOVA 38)
-+ (UNSPEC_MOVU 39)
-+ (UNSPEC_SHUFFLE 41)
-+ (UNSPEC_RCP 42)
-+ (UNSPEC_RSQRT 43)
-+ (UNSPEC_SFENCE 44)
-+ (UNSPEC_NOP 45) ; prevents combiner cleverness
-+ (UNSPEC_PAVGUSB 49)
-+ (UNSPEC_PFRCP 50)
-+ (UNSPEC_PFRCPIT1 51)
-+ (UNSPEC_PFRCPIT2 52)
-+ (UNSPEC_PFRSQRT 53)
-+ (UNSPEC_PFRSQIT1 54)
-+ ])
-
- ;; Insns whose names begin with "x86_" are emitted by gen_FOO calls
- ;; from i386.c.
-@@ -1759,7 +1763,7 @@
- return "lea{l}\t{%1, %0|%0, %1}";
-
- default:
-- if (flag_pic && SYMBOLIC_CONST (operands[1]))
-+ if (flag_pic && !LEGITIMATE_PIC_OPERAND_P (operands[1]))
- abort();
- return "mov{l}\t{%1, %0|%0, %1}";
- }
-@@ -2525,7 +2529,7 @@
- case TYPE_LEA:
- return "lea{q}\t{%a1, %0|%0, %a1}";
- default:
-- if (flag_pic && SYMBOLIC_CONST (operands[1]))
-+ if (flag_pic && !LEGITIMATE_PIC_OPERAND_P (operands[1]))
- abort ();
- if (get_attr_mode (insn) == MODE_SI)
- return "mov{l}\t{%k1, %k0|%k0, %k1}";
-@@ -13474,21 +13478,8 @@
- (match_operand:SI 3 "" "")))])]
- "!TARGET_64BIT"
- {
-- if (operands[3] == const0_rtx)
-- {
-- emit_insn (gen_call (operands[0], operands[1], constm1_rtx));
-- DONE;
-- }
-- /* Static functions and indirect calls don't need
-- current_function_uses_pic_offset_table. */
-- if (flag_pic
-- && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF
-- && ! SYMBOL_REF_FLAG (XEXP (operands[0], 0)))
-- current_function_uses_pic_offset_table = 1;
-- if (! call_insn_operand (XEXP (operands[0], 0), Pmode))
-- XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
-- if (TARGET_64BIT)
-- abort();
-+ ix86_expand_call (NULL, operands[0], operands[1], operands[2], operands[3]);
-+ DONE;
- })
-
- (define_insn "*call_pop_0"
-@@ -13530,37 +13521,12 @@
- [(call (match_operand:QI 0 "" "")
- (match_operand 1 "" ""))
- (use (match_operand 2 "" ""))]
-- ;; Operand 1 not used on the i386.
- ""
- {
-- rtx insn;
-- /* Static functions and indirect calls don't need
-- current_function_uses_pic_offset_table. */
-- if (flag_pic
-- && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF
-- && ! SYMBOL_REF_FLAG (XEXP (operands[0], 0)))
-- current_function_uses_pic_offset_table = 1;
--
-- if (! call_insn_operand (XEXP (operands[0], 0), Pmode))
-- XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
-- if (TARGET_64BIT && INTVAL (operands[2]) >= 0)
-- {
-- rtx reg = gen_rtx_REG (QImode, 0);
-- emit_move_insn (reg, operands[2]);
-- insn = emit_call_insn (gen_call_exp (operands[0], operands[1]));
-- use_reg (&CALL_INSN_FUNCTION_USAGE (insn), reg);
-- DONE;
-- }
-- insn = emit_call_insn (gen_call_exp (operands[0], operands[1]));
-- DONE;
-+ ix86_expand_call (NULL, operands[0], operands[1], operands[2], NULL);
-+ DONE;
- })
-
--(define_expand "call_exp"
-- [(call (match_operand:QI 0 "" "")
-- (match_operand 1 "" ""))]
-- ""
-- "")
--
- (define_insn "*call_0"
- [(call (mem:QI (match_operand 0 "constant_call_address_operand" ""))
- (match_operand 1 "" ""))]
-@@ -13612,7 +13578,6 @@
- [(set_attr "type" "call")])
-
- ;; Call subroutine, returning value in operand 0
--;; (which must be a hard register).
-
- (define_expand "call_value_pop"
- [(parallel [(set (match_operand 0 "" "")
-@@ -13623,20 +13588,9 @@
- (match_operand:SI 4 "" "")))])]
- "!TARGET_64BIT"
- {
-- if (operands[4] == const0_rtx)
-- {
-- emit_insn (gen_call_value (operands[0], operands[1], operands[2],
-- constm1_rtx));
-- DONE;
-- }
-- /* Static functions and indirect calls don't need
-- current_function_uses_pic_offset_table. */
-- if (flag_pic
-- && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
-- && ! SYMBOL_REF_FLAG (XEXP (operands[1], 0)))
-- current_function_uses_pic_offset_table = 1;
-- if (! call_insn_operand (XEXP (operands[1], 0), Pmode))
-- XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
-+ ix86_expand_call (operands[0], operands[1], operands[2],
-+ operands[3], operands[4]);
-+ DONE;
- })
-
- (define_expand "call_value"
-@@ -13647,36 +13601,10 @@
- ;; Operand 2 not used on the i386.
- ""
- {
-- rtx insn;
-- /* Static functions and indirect calls don't need
-- current_function_uses_pic_offset_table. */
-- if (flag_pic
-- && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
-- && ! SYMBOL_REF_FLAG (XEXP (operands[1], 0)))
-- current_function_uses_pic_offset_table = 1;
-- if (! call_insn_operand (XEXP (operands[1], 0), Pmode))
-- XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
-- if (TARGET_64BIT && INTVAL (operands[3]) >= 0)
-- {
-- rtx reg = gen_rtx_REG (QImode, 0);
-- emit_move_insn (reg, operands[3]);
-- insn = emit_call_insn (gen_call_value_exp (operands[0], operands[1],
-- operands[2]));
-- use_reg (&CALL_INSN_FUNCTION_USAGE (insn), reg);
-- DONE;
-- }
-- insn = emit_call_insn (gen_call_value_exp (operands[0], operands[1],
-- operands[2]));
-+ ix86_expand_call (operands[0], operands[1], operands[2], operands[3], NULL);
- DONE;
- })
-
--(define_expand "call_value_exp"
-- [(set (match_operand 0 "" "")
-- (call (match_operand:QI 1 "" "")
-- (match_operand:SI 2 "" "")))]
-- ""
-- "")
--
- ;; Call subroutine returning any type.
-
- (define_expand "untyped_call"
-@@ -13693,12 +13621,10 @@
- simply pretend the untyped call returns a complex long double
- value. */
-
-- emit_call_insn (TARGET_FLOAT_RETURNS_IN_80387
-- ? gen_call_value (gen_rtx_REG (XCmode, FIRST_FLOAT_REG),
-- operands[0], const0_rtx,
-- GEN_INT (SSE_REGPARM_MAX - 1))
-- : gen_call (operands[0], const0_rtx,
-- GEN_INT (SSE_REGPARM_MAX - 1)));
-+ ix86_expand_call ((TARGET_FLOAT_RETURNS_IN_80387
-+ ? gen_rtx_REG (XCmode, FIRST_FLOAT_REG) : NULL),
-+ operands[0], const0_rtx, GEN_INT (SSE_REGPARM_MAX - 1),
-+ NULL);
-
- for (i = 0; i < XVECLEN (operands[2], 0); i++)
- {
-@@ -13781,45 +13707,39 @@
- ""
- "ix86_expand_prologue (); DONE;")
-
--(define_insn "prologue_set_got"
-+(define_expand "set_got"
-+ [(parallel [(set (match_operand:SI 0 "register_operand" "")
-+ (unspec:SI [(const_int 0)] UNSPEC_SET_GOT))
-+ (clobber (reg:CC 17))])]
-+ "!TARGET_64BIT"
-+ "")
-+
-+(define_insn "*set_got_nopic"
- [(set (match_operand:SI 0 "register_operand" "=r")
-- (unspec_volatile:SI
-- [(plus:SI (match_dup 0)
-- (plus:SI (match_operand:SI 1 "symbolic_operand" "")
-- (minus:SI (pc) (match_operand 2 "" ""))))] 1))
-+ (unspec:SI [(const_int 0)] UNSPEC_SET_GOT))
- (clobber (reg:CC 17))]
-- "!TARGET_64BIT"
--{
-- if (GET_CODE (operands[2]) == LABEL_REF)
-- operands[2] = XEXP (operands[2], 0);
-- if (TARGET_DEEP_BRANCH_PREDICTION)
-- return "add{l}\t{%1, %0|%0, %1}";
-- else
-- return "add{l}\t{%1+[.-%X2], %0|%0, %a1+(.-%X2)}";
--}
-- [(set_attr "type" "alu")
-- ; Since this insn may have two constant operands, we must set the
-- ; length manually.
-- (set_attr "length_immediate" "4")
-- (set_attr "mode" "SI")])
-+ "!TARGET_64BIT && !flag_pic"
-+ { return output_set_got (operands[0]); }
-+ [(set_attr "type" "multi")
-+ (set_attr "length" "11")])
-+
-+(define_insn "*set_got_deep"
-+ [(set (match_operand:SI 0 "register_operand" "=b")
-+ (unspec:SI [(const_int 0)] UNSPEC_SET_GOT))
-+ (clobber (reg:CC 17))]
-+ "!TARGET_64BIT && TARGET_DEEP_BRANCH_PREDICTION"
-+ { return output_set_got (operands[0]); }
-+ [(set_attr "type" "multi")
-+ (set_attr "length" "11")])
-
--(define_insn "prologue_get_pc"
-+(define_insn "*set_got_nodeep"
- [(set (match_operand:SI 0 "register_operand" "=r")
-- (unspec_volatile:SI [(plus:SI (pc) (match_operand 1 "" ""))] 2))]
-+ (unspec:SI [(const_int 0)] UNSPEC_SET_GOT))
-+ (clobber (reg:CC 17))]
- "!TARGET_64BIT"
--{
-- if (GET_CODE (operands[1]) == LABEL_REF)
-- operands[1] = XEXP (operands[1], 0);
-- output_asm_insn ("call\t%X1", operands);
-- if (! TARGET_DEEP_BRANCH_PREDICTION)
-- {
-- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
-- CODE_LABEL_NUMBER (operands[1]));
-- return "pop{l}\t%0";
-- }
-- RET;
--}
-- [(set_attr "type" "multi")])
-+ { return output_set_got (operands[0]); }
-+ [(set_attr "type" "multi")
-+ (set_attr "length" "12")])
-
- (define_expand "epilogue"
- [(const_int 1)]
-@@ -13996,6 +13916,127 @@
- ;; ffshi2 is not useful -- 4 word prefix ops are needed, which is larger
- ;; and slower than the two-byte movzx insn needed to do the work in SImode.
- \f
-+;; Thread-local storage patterns for ELF.
-+;;
-+;; Note that these code sequences must appear exactly as shown
-+;; in order to allow linker relaxation.
-+
-+(define_insn "*tls_global_dynamic_gnu"
-+ [(set (match_operand:SI 0 "register_operand" "=a")
-+ (unspec:SI [(match_operand:SI 1 "register_operand" "b")
-+ (match_operand:SI 2 "tls_symbolic_operand" "")
-+ (match_operand:SI 3 "call_insn_operand" "")]
-+ UNSPEC_TLS_GD))
-+ (clobber (match_scratch:SI 4 "=d"))
-+ (clobber (match_scratch:SI 5 "=c"))
-+ (clobber (reg:CC 17))]
-+ "TARGET_GNU_TLS"
-+ "lea{l}\t{%a2@TLSGD(,%1,1), %0|%0, %a2@TLSGD[%1*1]}\;call\t%P3"
-+ [(set_attr "type" "multi")
-+ (set_attr "length" "12")])
-+
-+(define_insn "*tls_global_dynamic_sun"
-+ [(set (match_operand:SI 0 "register_operand" "=a")
-+ (unspec:SI [(match_operand:SI 1 "register_operand" "b")
-+ (match_operand:SI 2 "tls_symbolic_operand" "")
-+ (match_operand:SI 3 "call_insn_operand" "")]
-+ UNSPEC_TLS_GD))
-+ (clobber (match_scratch:SI 4 "=d"))
-+ (clobber (match_scratch:SI 5 "=c"))
-+ (clobber (reg:CC 17))]
-+ "TARGET_SUN_TLS"
-+ "lea{l}\t{%a2@DTLNDX(%1), %4|%4, %a2@DTLNDX[%1]}
-+ push{l}\t%4\;call\t%a2@TLSPLT\;pop{l}\t%4\;nop"
-+ [(set_attr "type" "multi")
-+ (set_attr "length" "14")])
-+
-+(define_expand "tls_global_dynamic"
-+ [(parallel [(set (match_operand:SI 0 "register_operand" "")
-+ (unspec:SI
-+ [(match_dup 2)
-+ (match_operand:SI 1 "tls_symbolic_operand" "")
-+ (match_dup 3)]
-+ UNSPEC_TLS_GD))
-+ (clobber (match_scratch:SI 4 ""))
-+ (clobber (match_scratch:SI 5 ""))
-+ (clobber (reg:CC 17))])]
-+ ""
-+{
-+ if (!flag_pic)
-+ abort ();
-+ current_function_uses_pic_offset_table = 1;
-+ operands[2] = pic_offset_table_rtx;
-+ operands[3] = ix86_tls_get_addr ();
-+})
-+
-+(define_insn "*tls_local_dynamic_base_gnu"
-+ [(set (match_operand:SI 0 "register_operand" "=a")
-+ (unspec:SI [(match_operand:SI 1 "register_operand" "b")
-+ (match_operand:SI 2 "call_insn_operand" "")]
-+ UNSPEC_TLS_LD_BASE))
-+ (clobber (match_scratch:SI 3 "=d"))
-+ (clobber (match_scratch:SI 4 "=c"))
-+ (clobber (reg:CC 17))]
-+ "TARGET_GNU_TLS"
-+ "lea{l}\t{%&@TLSLDM(%1), %0|%0, %&@TLSLDM[%1]}\;call\t%P2"
-+ [(set_attr "type" "multi")
-+ (set_attr "length" "11")])
-+
-+(define_insn "*tls_local_dynamic_base_sun"
-+ [(set (match_operand:SI 0 "register_operand" "=a")
-+ (unspec:SI [(match_operand:SI 1 "register_operand" "b")
-+ (match_operand:SI 2 "call_insn_operand" "")]
-+ UNSPEC_TLS_LD_BASE))
-+ (clobber (match_scratch:SI 3 "=d"))
-+ (clobber (match_scratch:SI 4 "=c"))
-+ (clobber (reg:CC 17))]
-+ "TARGET_SUN_TLS"
-+ "lea{l}\t{%&@TMDNX(%1), %3|%3, %&@TMDNX[%1]}
-+ push{l}\t%3\;call\t%&@TLSPLT\;pop{l}\t%3"
-+ [(set_attr "type" "multi")
-+ (set_attr "length" "13")])
-+
-+(define_expand "tls_local_dynamic_base"
-+ [(parallel [(set (match_operand:SI 0 "register_operand" "")
-+ (unspec:SI [(match_dup 1) (match_dup 2)]
-+ UNSPEC_TLS_LD_BASE))
-+ (clobber (match_scratch:SI 3 ""))
-+ (clobber (match_scratch:SI 4 ""))
-+ (clobber (reg:CC 17))])]
-+ ""
-+{
-+ if (!flag_pic)
-+ abort ();
-+ current_function_uses_pic_offset_table = 1;
-+ operands[1] = pic_offset_table_rtx;
-+ operands[2] = ix86_tls_get_addr ();
-+})
-+
-+;; Local dynamic of a single variable is a lose. Show combine how
-+;; to convert that back to global dynamic.
-+
-+(define_insn_and_split "*tls_local_dynamic_once"
-+ [(set (match_operand:SI 0 "register_operand" "=a")
-+ (plus:SI (unspec:SI [(match_operand:SI 1 "register_operand" "b")
-+ (match_operand:SI 2 "call_insn_operand" "")]
-+ UNSPEC_TLS_LD_BASE)
-+ (const:SI (unspec:SI
-+ [(match_operand:SI 3 "tls_symbolic_operand" "")]
-+ UNSPEC_DTPOFF))))
-+ (clobber (match_scratch:SI 4 "=d"))
-+ (clobber (match_scratch:SI 5 "=c"))
-+ (clobber (reg:CC 17))]
-+ ""
-+ "#"
-+ ""
-+ [(parallel [(set (match_dup 0)
-+ (unspec:SI [(match_dup 1) (match_dup 3) (match_dup 2)]
-+ UNSPEC_TLS_GD))
-+ (clobber (match_dup 4))
-+ (clobber (match_dup 5))
-+ (clobber (reg:CC 17))])]
-+ "")
-+\f
- ;; These patterns match the binary 387 instructions for addM3, subM3,
- ;; mulM3 and divM3. There are three patterns for each of DFmode and
- ;; SFmode. The first is the normal insn, the second the same insn but
-@@ -16835,7 +16876,7 @@
- [(label_ref (match_operand 0 "" ""))]
- "!TARGET_64BIT && flag_pic"
- {
-- load_pic_register ();
-+ emit_insn (gen_set_got (pic_offset_table_rtx));
- DONE;
- })
- \f
---- gcc/config/ia64/ia64-protos.h.jj Tue Apr 23 20:28:20 2002
-+++ gcc/config/ia64/ia64-protos.h Wed Jun 19 19:33:52 2002
-@@ -31,6 +31,7 @@ extern int call_operand PARAMS((rtx, enu
- extern int sdata_symbolic_operand PARAMS((rtx, enum machine_mode));
- extern int got_symbolic_operand PARAMS((rtx, enum machine_mode));
- extern int symbolic_operand PARAMS((rtx, enum machine_mode));
-+extern int tls_symbolic_operand PARAMS((rtx, enum machine_mode));
- extern int function_operand PARAMS((rtx, enum machine_mode));
- extern int setjmp_operand PARAMS((rtx, enum machine_mode));
- extern int move_operand PARAMS((rtx, enum machine_mode));
-@@ -67,6 +68,7 @@ extern int general_tfmode_operand PARAMS
- extern int destination_tfmode_operand PARAMS((rtx, enum machine_mode));
- extern int tfreg_or_fp01_operand PARAMS((rtx, enum machine_mode));
-
-+extern rtx ia64_expand_move PARAMS ((rtx, rtx));
- extern int ia64_move_ok PARAMS((rtx, rtx));
- extern int ia64_depz_field_mask PARAMS((rtx, rtx));
- extern rtx ia64_gp_save_reg PARAMS((int));
---- gcc/config/ia64/ia64.c.jj Wed Jun 19 22:36:54 2002
-+++ gcc/config/ia64/ia64.c Wed Jun 19 22:46:07 2002
-@@ -95,6 +95,13 @@ static const char * const ia64_output_re
- /* String used with the -mfixed-range= option. */
- const char *ia64_fixed_range_string;
-
-+/* Determines whether we use adds, addl, or movl to generate our
-+ TLS immediate offsets. */
-+int ia64_tls_size = 22;
-+
-+/* String used with the -mtls-size= option. */
-+const char *ia64_tls_size_string;
-+
- /* Determines whether we run our final scheduling pass or not. We always
- avoid the normal second scheduling pass. */
- static int ia64_flag_schedule_insns2;
-@@ -104,6 +111,8 @@ static int ia64_flag_schedule_insns2;
-
- unsigned int ia64_section_threshold;
- \f
-+static rtx gen_tls_get_addr PARAMS ((void));
-+static rtx gen_thread_pointer PARAMS ((void));
- static int find_gr_spill PARAMS ((int));
- static int next_scratch_gr_reg PARAMS ((void));
- static void mark_reg_gr_used_mask PARAMS ((rtx, void *));
-@@ -214,6 +223,11 @@ static const struct attribute_spec ia64_
- #undef TARGET_SCHED_CYCLE_DISPLAY
- #define TARGET_SCHED_CYCLE_DISPLAY ia64_cycle_display
-
-+#ifdef HAVE_AS_TLS
-+#undef TARGET_HAVE_TLS
-+#define TARGET_HAVE_TLS true
-+#endif
-+
- struct gcc_target targetm = TARGET_INITIALIZER;
- \f
- /* Return 1 if OP is a valid operand for the MEM of a CALL insn. */
-@@ -250,7 +264,10 @@ sdata_symbolic_operand (op, mode)
- if (CONSTANT_POOL_ADDRESS_P (op))
- return GET_MODE_SIZE (get_pool_mode (op)) <= ia64_section_threshold;
- else
-- return XSTR (op, 0)[0] == SDATA_NAME_FLAG_CHAR;
-+ {
-+ const char *str = XSTR (op, 0);
-+ return (str[0] == ENCODE_SECTION_INFO_CHAR && str[1] == 's');
-+ }
-
- default:
- break;
-@@ -324,6 +341,35 @@ symbolic_operand (op, mode)
- return 0;
- }
-
-+/* Return tls_model if OP refers to a TLS symbol. */
-+
-+int
-+tls_symbolic_operand (op, mode)
-+ rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ const char *str;
-+
-+ if (GET_CODE (op) != SYMBOL_REF)
-+ return 0;
-+ str = XSTR (op, 0);
-+ if (str[0] != ENCODE_SECTION_INFO_CHAR)
-+ return 0;
-+ switch (str[1])
-+ {
-+ case 'G':
-+ return TLS_MODEL_GLOBAL_DYNAMIC;
-+ case 'L':
-+ return TLS_MODEL_LOCAL_DYNAMIC;
-+ case 'i':
-+ return TLS_MODEL_INITIAL_EXEC;
-+ case 'l':
-+ return TLS_MODEL_LOCAL_EXEC;
-+ }
-+ return 0;
-+}
-+
-+
- /* Return 1 if OP refers to a function. */
-
- int
-@@ -922,6 +968,9 @@ ia64_expand_load_address (dest, src, scr
- else
- temp = dest;
-
-+ if (tls_symbolic_operand (src, Pmode))
-+ abort ();
-+
- if (TARGET_AUTO_PIC)
- emit_insn (gen_load_gprel64 (temp, src));
- else if (GET_CODE (src) == SYMBOL_REF && SYMBOL_REF_FLAG (src))
-@@ -964,6 +1013,185 @@ ia64_expand_load_address (dest, src, scr
- emit_move_insn (dest, temp);
- }
-
-+static rtx
-+gen_tls_get_addr ()
-+{
-+ static rtx tga;
-+ if (!tga)
-+ {
-+ tga = init_one_libfunc ("__tls_get_addr");
-+ ggc_add_rtx_root (&tga, 1);
-+ }
-+ return tga;
-+}
-+
-+static rtx
-+gen_thread_pointer ()
-+{
-+ static rtx tp;
-+ if (!tp)
-+ {
-+ tp = gen_rtx_REG (Pmode, 13);
-+ RTX_UNCHANGING_P (tp) = 1;
-+ ggc_add_rtx_root (&tp, 1);
-+ }
-+ return tp;
-+}
-+
-+rtx
-+ia64_expand_move (op0, op1)
-+ rtx op0, op1;
-+{
-+ enum machine_mode mode = GET_MODE (op0);
-+
-+ if (!reload_in_progress && !reload_completed && !ia64_move_ok (op0, op1))
-+ op1 = force_reg (mode, op1);
-+
-+ if (mode == Pmode)
-+ {
-+ enum tls_model tls_kind;
-+ if ((tls_kind = tls_symbolic_operand (op1, Pmode)))
-+ {
-+ rtx tga_op1, tga_op2, tga_ret, tga_eqv, tmp, insns;
-+
-+ switch (tls_kind)
-+ {
-+ case TLS_MODEL_GLOBAL_DYNAMIC:
-+ start_sequence ();
-+
-+ tga_op1 = gen_reg_rtx (Pmode);
-+ emit_insn (gen_load_ltoff_dtpmod (tga_op1, op1));
-+ tga_op1 = gen_rtx_MEM (Pmode, tga_op1);
-+ RTX_UNCHANGING_P (tga_op1) = 1;
-+
-+ tga_op2 = gen_reg_rtx (Pmode);
-+ emit_insn (gen_load_ltoff_dtprel (tga_op2, op1));
-+ tga_op2 = gen_rtx_MEM (Pmode, tga_op2);
-+ RTX_UNCHANGING_P (tga_op2) = 1;
-+
-+ tga_ret = emit_library_call_value (gen_tls_get_addr (), NULL_RTX,
-+ LCT_CONST, Pmode, 2, tga_op1,
-+ Pmode, tga_op2, Pmode);
-+
-+ insns = get_insns ();
-+ end_sequence ();
-+
-+ emit_libcall_block (insns, op0, tga_ret, op1);
-+ return NULL_RTX;
-+
-+ case TLS_MODEL_LOCAL_DYNAMIC:
-+ /* ??? This isn't the completely proper way to do local-dynamic
-+ If the call to __tls_get_addr is used only by a single symbol,
-+ then we should (somehow) move the dtprel to the second arg
-+ to avoid the extra add. */
-+ start_sequence ();
-+
-+ tga_op1 = gen_reg_rtx (Pmode);
-+ emit_insn (gen_load_ltoff_dtpmod (tga_op1, op1));
-+ tga_op1 = gen_rtx_MEM (Pmode, tga_op1);
-+ RTX_UNCHANGING_P (tga_op1) = 1;
-+
-+ tga_op2 = const0_rtx;
-+
-+ tga_ret = emit_library_call_value (gen_tls_get_addr (), NULL_RTX,
-+ LCT_CONST, Pmode, 2, tga_op1,
-+ Pmode, tga_op2, Pmode);
-+
-+ insns = get_insns ();
-+ end_sequence ();
-+
-+ tga_eqv = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx),
-+ UNSPEC_LD_BASE);
-+ tmp = gen_reg_rtx (Pmode);
-+ emit_libcall_block (insns, tmp, tga_ret, tga_eqv);
-+
-+ if (register_operand (op0, Pmode))
-+ tga_ret = op0;
-+ else
-+ tga_ret = gen_reg_rtx (Pmode);
-+ if (TARGET_TLS64)
-+ {
-+ emit_insn (gen_load_dtprel (tga_ret, op1));
-+ emit_insn (gen_adddi3 (tga_ret, tmp, tga_ret));
-+ }
-+ else
-+ emit_insn (gen_add_dtprel (tga_ret, tmp, op1));
-+ if (tga_ret == op0)
-+ return NULL_RTX;
-+ op1 = tga_ret;
-+ break;
-+
-+ case TLS_MODEL_INITIAL_EXEC:
-+ tmp = gen_reg_rtx (Pmode);
-+ emit_insn (gen_load_ltoff_tprel (tmp, op1));
-+ tmp = gen_rtx_MEM (Pmode, tmp);
-+ RTX_UNCHANGING_P (tmp) = 1;
-+ tmp = force_reg (Pmode, tmp);
-+
-+ if (register_operand (op0, Pmode))
-+ op1 = op0;
-+ else
-+ op1 = gen_reg_rtx (Pmode);
-+ emit_insn (gen_adddi3 (op1, tmp, gen_thread_pointer ()));
-+ if (op1 == op0)
-+ return NULL_RTX;
-+ break;
-+
-+ case TLS_MODEL_LOCAL_EXEC:
-+ if (register_operand (op0, Pmode))
-+ tmp = op0;
-+ else
-+ tmp = gen_reg_rtx (Pmode);
-+ if (TARGET_TLS64)
-+ {
-+ emit_insn (gen_load_tprel (tmp, op1));
-+ emit_insn (gen_adddi3 (tmp, gen_thread_pointer (), tmp));
-+ }
-+ else
-+ emit_insn (gen_add_tprel (tmp, gen_thread_pointer (), op1));
-+ if (tmp == op0)
-+ return NULL_RTX;
-+ op1 = tmp;
-+ break;
-+
-+ default:
-+ abort ();
-+ }
-+ }
-+ else if (!TARGET_NO_PIC && symbolic_operand (op1, DImode))
-+ {
-+ /* Before optimization starts, delay committing to any particular
-+ type of PIC address load. If this function gets deferred, we
-+ may acquire information that changes the value of the
-+ sdata_symbolic_operand predicate.
-+
-+ But don't delay for function pointers. Loading a function address
-+ actually loads the address of the descriptor not the function.
-+ If we represent these as SYMBOL_REFs, then they get cse'd with
-+ calls, and we end up with calls to the descriptor address instead
-+ of calls to the function address. Functions are not candidates
-+ for sdata anyways.
-+
-+ Don't delay for LABEL_REF because the splitter loses REG_LABEL
-+ notes. Don't delay for pool addresses on general principals;
-+ they'll never become non-local behind our back. */
-+
-+ if (rtx_equal_function_value_matters
-+ && GET_CODE (op1) != LABEL_REF
-+ && ! (GET_CODE (op1) == SYMBOL_REF
-+ && (SYMBOL_REF_FLAG (op1)
-+ || CONSTANT_POOL_ADDRESS_P (op1)
-+ || STRING_POOL_ADDRESS_P (op1))))
-+ emit_insn (gen_movdi_symbolic (op0, op1));
-+ else
-+ ia64_expand_load_address (op0, op1, NULL_RTX);
-+ return NULL_RTX;
-+ }
-+ }
-+
-+ return op1;
-+}
-+
- rtx
- ia64_gp_save_reg (setjmp_p)
- int setjmp_p;
-@@ -3944,6 +4172,16 @@ ia64_override_options ()
- if (ia64_fixed_range_string)
- fix_range (ia64_fixed_range_string);
-
-+ if (ia64_tls_size_string)
-+ {
-+ char *end;
-+ unsigned long tmp = strtoul (ia64_tls_size_string, &end, 10);
-+ if (*end || (tmp != 14 && tmp != 22 && tmp != 64))
-+ error ("bad value (%s) for -mtls-size= switch", ia64_tls_size_string);
-+ else
-+ ia64_tls_size = tmp;
-+ }
-+
- ia64_flag_schedule_insns2 = flag_schedule_insns_after_reload;
- flag_schedule_insns_after_reload = 0;
-
-@@ -4607,6 +4845,13 @@ rtx_needs_barrier (x, flags, pred)
- need_barrier |= rtx_needs_barrier (XVECEXP (x, 0, 2), flags, pred);
- break;
-
-+ case UNSPEC_LTOFF_DTPMOD:
-+ case UNSPEC_LTOFF_DTPREL:
-+ case UNSPEC_DTPREL:
-+ case UNSPEC_LTOFF_TPREL:
-+ case UNSPEC_TPREL:
-+ break;
-+
- default:
- abort ();
- }
-@@ -6872,6 +7117,9 @@ ia64_encode_section_info (decl)
- tree decl;
- {
- const char *symbol_str;
-+ bool is_local, is_small;
-+ rtx symbol;
-+ char encoding = 0;
-
- if (TREE_CODE (decl) == FUNCTION_DECL)
- {
-@@ -6885,75 +7133,111 @@ ia64_encode_section_info (decl)
- || GET_CODE (XEXP (DECL_RTL (decl), 0)) != SYMBOL_REF)
- return;
-
-- symbol_str = XSTR (XEXP (DECL_RTL (decl), 0), 0);
-+ symbol = XEXP (DECL_RTL (decl), 0);
-+ symbol_str = XSTR (symbol, 0);
-+
-+ /* A non-decl is an entry in the constant pool. */
-+ if (!DECL_P (decl))
-+ is_local = true;
-+ /* Static variables are always local. */
-+ else if (! TREE_PUBLIC (decl))
-+ is_local = true;
-+ /* A variable is local if the user tells us so. */
-+ else if (MODULE_LOCAL_P (decl))
-+ is_local = true;
-+ /* Otherwise, variables defined outside this object may not be local. */
-+ else if (DECL_EXTERNAL (decl))
-+ is_local = false;
-+ /* Linkonce and weak data are never local. */
-+ else if (DECL_ONE_ONLY (decl) || DECL_WEAK (decl))
-+ is_local = false;
-+ /* If PIC, then assume that any global name can be overridden by
-+ symbols resolved from other modules. */
-+ else if (flag_pic)
-+ is_local = false;
-+ /* Uninitialized COMMON variable may be unified with symbols
-+ resolved from other modules. */
-+ else if (DECL_COMMON (decl)
-+ && (DECL_INITIAL (decl) == NULL
-+ || DECL_INITIAL (decl) == error_mark_node))
-+ is_local = false;
-+ /* Otherwise we're left with initialized (or non-common) global data
-+ which is of necessity defined locally. */
-+ else
-+ is_local = true;
-
-- /* We assume that -fpic is used only to create a shared library (dso).
-- With -fpic, no global data can ever be sdata.
-- Without -fpic, global common uninitialized data can never be sdata, since
-- it can unify with a real definition in a dso. */
-- /* ??? Actually, we can put globals in sdata, as long as we don't use gprel
-- to access them. The linker may then be able to do linker relaxation to
-- optimize references to them. Currently sdata implies use of gprel. */
-- /* We need the DECL_EXTERNAL check for C++. static class data members get
-- both TREE_STATIC and DECL_EXTERNAL set, to indicate that they are
-- statically allocated, but the space is allocated somewhere else. Such
-- decls can not be own data. */
-- if (! TARGET_NO_SDATA
-- && ((TREE_STATIC (decl) && ! DECL_EXTERNAL (decl)
-- && ! (DECL_ONE_ONLY (decl) || DECL_WEAK (decl))
-- && ! (TREE_PUBLIC (decl)
-- && (flag_pic
-- || (DECL_COMMON (decl)
-- && (DECL_INITIAL (decl) == 0
-- || DECL_INITIAL (decl) == error_mark_node)))))
-- || MODULE_LOCAL_P (decl))
-- /* Either the variable must be declared without a section attribute,
-- or the section must be sdata or sbss. */
-- && (DECL_SECTION_NAME (decl) == 0
-- || ! strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
-- ".sdata")
-- || ! strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
-- ".sbss")))
-+ is_small = false;
-+ if (TARGET_NO_SDATA)
-+ ;
-+ else if (TREE_CODE (decl) == VAR_DECL && DECL_SECTION_NAME (decl))
-+ {
-+ const char *section = TREE_STRING_POINTER (DECL_SECTION_NAME (decl));
-+ if (strcmp (section, ".sdata") == 0
-+ || strcmp (section, ".sbss") == 0)
-+ is_small = true;
-+ }
-+ else
- {
- HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl));
-
-- /* If the variable has already been defined in the output file, then it
-- is too late to put it in sdata if it wasn't put there in the first
-- place. The test is here rather than above, because if it is already
-- in sdata, then it can stay there. */
--
-- if (TREE_ASM_WRITTEN (decl))
-- ;
--
-- /* If this is an incomplete type with size 0, then we can't put it in
-- sdata because it might be too big when completed.
-- Objects bigger than threshold should have SDATA_NAME_FLAG_CHAR
-- added if they are in .sdata or .sbss explicitely. */
-- else if (((size > 0
-- && size <= (HOST_WIDE_INT) ia64_section_threshold)
-- || DECL_SECTION_NAME (decl))
-- && symbol_str[0] != SDATA_NAME_FLAG_CHAR)
-- {
-- size_t len = strlen (symbol_str);
-- char *newstr = alloca (len + 1);
-- const char *string;
-+ /* If this is an incomplete type with size 0, then we can't put it
-+ in sdata because it might be too big when completed. */
-+ if (size > 0 && size <= ia64_section_threshold)
-+ is_small = true;
-+ }
-
-- *newstr = SDATA_NAME_FLAG_CHAR;
-- memcpy (newstr + 1, symbol_str, len + 1);
--
-- string = ggc_alloc_string (newstr, len + 1);
-- XSTR (XEXP (DECL_RTL (decl), 0), 0) = string;
-+ if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
-+ {
-+ enum tls_model kind;
-+ if (!flag_pic)
-+ {
-+ if (is_local)
-+ kind = TLS_MODEL_LOCAL_EXEC;
-+ else
-+ kind = TLS_MODEL_INITIAL_EXEC;
- }
-- }
-- /* This decl is marked as being in small data/bss but it shouldn't
-- be; one likely explanation for this is that the decl has been
-- moved into a different section from the one it was in when
-- ENCODE_SECTION_INFO was first called. Remove the '@'. */
-- else if (symbol_str[0] == SDATA_NAME_FLAG_CHAR)
-+ else if (is_local)
-+ kind = TLS_MODEL_LOCAL_DYNAMIC;
-+ else
-+ kind = TLS_MODEL_GLOBAL_DYNAMIC;
-+ if (kind < flag_tls_default)
-+ kind = flag_tls_default;
-+
-+ encoding = " GLil"[kind];
-+ }
-+ /* Determine if DECL will wind up in .sdata/.sbss. */
-+ else if (is_local && is_small)
-+ encoding = 's';
-+
-+ /* Finally, encode this into the symbol string. */
-+ if (encoding)
- {
-- XSTR (XEXP (DECL_RTL (decl), 0), 0)
-- = ggc_strdup (symbol_str + 1);
-+ char *newstr;
-+ size_t len;
-+
-+ if (symbol_str[0] == ENCODE_SECTION_INFO_CHAR)
-+ {
-+ if (encoding == symbol_str[1])
-+ return;
-+ /* ??? Sdata became thread or thread becaome not thread. Lose. */
-+ abort ();
-+ }
-+
-+ len = strlen (symbol_str);
-+ newstr = alloca (len + 3);
-+ newstr[0] = ENCODE_SECTION_INFO_CHAR;
-+ newstr[1] = encoding;
-+ memcpy (newstr + 2, symbol_str, len + 1);
-+
-+ XSTR (symbol, 0) = ggc_alloc_string (newstr, len + 2);
- }
-+
-+ /* This decl is marked as being in small data/bss but it shouldn't be;
-+ one likely explanation for this is that the decl has been moved into
-+ a different section from the one it was in when encode_section_info
-+ was first called. Remove the encoding. */
-+ else if (symbol_str[0] == ENCODE_SECTION_INFO_CHAR)
-+ XSTR (symbol, 0) = ggc_strdup (symbol_str + 2);
- }
- \f
- /* Output assembly directives for prologue regions. */
---- gcc/config/ia64/ia64.h.jj Tue Apr 23 20:28:21 2002
-+++ gcc/config/ia64/ia64.h Wed Jun 19 19:33:52 2002
-@@ -109,6 +109,11 @@ extern int target_flags;
-
- #define TARGET_DWARF2_ASM (target_flags & MASK_DWARF2_ASM)
-
-+extern int ia64_tls_size;
-+#define TARGET_TLS14 (ia64_tls_size == 14)
-+#define TARGET_TLS22 (ia64_tls_size == 22)
-+#define TARGET_TLS64 (ia64_tls_size == 64)
-+
- /* This macro defines names of command options to set and clear bits in
- `target_flags'. Its definition is an initializer with a subgrouping for
- each command option. */
-@@ -177,10 +182,13 @@ extern int target_flags;
- subgrouping for each command option. */
-
- extern const char *ia64_fixed_range_string;
-+extern const char *ia64_tls_size_string;
- #define TARGET_OPTIONS \
- { \
- { "fixed-range=", &ia64_fixed_range_string, \
- N_("Specify range of registers to make fixed")}, \
-+ { "tls-size=", &ia64_tls_size_string, \
-+ N_("Specify bit size of immediate TLS offsets")}, \
- }
-
- /* Sometimes certain combinations of command options do not make sense on a
-@@ -1801,7 +1809,7 @@ do { \
- && (DECL_ONE_ONLY (DECL) || DECL_WEAK (DECL) || DECL_COMMON (DECL) \
- || DECL_SECTION_NAME (DECL) != 0))
-
--#define SDATA_NAME_FLAG_CHAR '@'
-+#define ENCODE_SECTION_INFO_CHAR '@'
-
- #define IA64_DEFAULT_GVALUE 8
-
-@@ -1811,8 +1819,8 @@ do { \
- #define STRIP_NAME_ENCODING(VAR, SYMBOL_NAME) \
- do { \
- (VAR) = (SYMBOL_NAME); \
-- if ((VAR)[0] == SDATA_NAME_FLAG_CHAR) \
-- (VAR)++; \
-+ if ((VAR)[0] == ENCODE_SECTION_INFO_CHAR) \
-+ (VAR) += 2; \
- if ((VAR)[0] == '*') \
- (VAR)++; \
- } while (0)
---- gcc/config/ia64/ia64.md.jj Tue Apr 23 20:28:21 2002
-+++ gcc/config/ia64/ia64.md Wed Jun 19 19:33:52 2002
-@@ -68,7 +68,19 @@
- ;; 23 cycle display
- ;; 24 addp4
- ;; 25 prologue_use
--;;
-+
-+;; More unspec:
-+
-+(define_constants
-+ [; Relocations
-+ (UNSPEC_LTOFF_DTPMOD 14)
-+ (UNSPEC_LTOFF_DTPREL 15)
-+ (UNSPEC_DTPREL 16)
-+ (UNSPEC_LTOFF_TPREL 17)
-+ (UNSPEC_TPREL 18)
-+ (UNSPEC_LD_BASE 26)
-+ ])
-+
- ;; unspec_volatile:
- ;; 0 alloc
- ;; 1 blockage
-@@ -272,12 +284,12 @@
- [(set (match_operand:QI 0 "general_operand" "")
- (match_operand:QI 1 "general_operand" ""))]
- ""
-- "
- {
-- if (! reload_in_progress && ! reload_completed
-- && ! ia64_move_ok (operands[0], operands[1]))
-- operands[1] = force_reg (QImode, operands[1]);
--}")
-+ rtx op1 = ia64_expand_move (operands[0], operands[1]);
-+ if (!op1)
-+ DONE;
-+ operands[1] = op1;
-+})
-
- (define_insn "*movqi_internal"
- [(set (match_operand:QI 0 "destination_operand" "=r,r,r, m, r,*f,*f")
-@@ -297,12 +309,12 @@
- [(set (match_operand:HI 0 "general_operand" "")
- (match_operand:HI 1 "general_operand" ""))]
- ""
-- "
- {
-- if (! reload_in_progress && ! reload_completed
-- && ! ia64_move_ok (operands[0], operands[1]))
-- operands[1] = force_reg (HImode, operands[1]);
--}")
-+ rtx op1 = ia64_expand_move (operands[0], operands[1]);
-+ if (!op1)
-+ DONE;
-+ operands[1] = op1;
-+})
-
- (define_insn "*movhi_internal"
- [(set (match_operand:HI 0 "destination_operand" "=r,r,r, m, r,*f,*f")
-@@ -322,12 +334,12 @@
- [(set (match_operand:SI 0 "general_operand" "")
- (match_operand:SI 1 "general_operand" ""))]
- ""
-- "
- {
-- if (! reload_in_progress && ! reload_completed
-- && ! ia64_move_ok (operands[0], operands[1]))
-- operands[1] = force_reg (SImode, operands[1]);
--}")
-+ rtx op1 = ia64_expand_move (operands[0], operands[1]);
-+ if (!op1)
-+ DONE;
-+ operands[1] = op1;
-+})
-
- (define_insn "*movsi_internal"
- [(set (match_operand:SI 0 "destination_operand" "=r,r,r,r, m, r,*f,*f, r,*d")
-@@ -351,32 +363,12 @@
- [(set (match_operand:DI 0 "general_operand" "")
- (match_operand:DI 1 "general_operand" ""))]
- ""
-- "
- {
-- if (! reload_in_progress && ! reload_completed
-- && ! ia64_move_ok (operands[0], operands[1]))
-- operands[1] = force_reg (DImode, operands[1]);
-- if (! TARGET_NO_PIC && symbolic_operand (operands[1], DImode))
-- {
-- /* Before optimization starts, delay committing to any particular
-- type of PIC address load. If this function gets deferred, we
-- may acquire information that changes the value of the
-- sdata_symbolic_operand predicate. */
-- /* But don't delay for function pointers. Loading a function address
-- actually loads the address of the descriptor not the function.
-- If we represent these as SYMBOL_REFs, then they get cse'd with
-- calls, and we end up with calls to the descriptor address instead of
-- calls to the function address. Functions are not candidates for
-- sdata anyways. */
-- if (rtx_equal_function_value_matters
-- && ! (GET_CODE (operands[1]) == SYMBOL_REF
-- && SYMBOL_REF_FLAG (operands[1])))
-- emit_insn (gen_movdi_symbolic (operands[0], operands[1], gen_reg_rtx (DImode)));
-- else
-- ia64_expand_load_address (operands[0], operands[1], NULL_RTX);
-- DONE;
-- }
--}")
-+ rtx op1 = ia64_expand_move (operands[0], operands[1]);
-+ if (!op1)
-+ DONE;
-+ operands[1] = op1;
-+})
-
- ;; This is used during early compilation to delay the decision on
- ;; how to refer to a variable as long as possible. This is especially
-@@ -384,19 +376,22 @@
- ;; deferred functions, since we may acquire additional information
- ;; on the variables used in the meantime.
-
--;; ??? This causes us to lose REG_LABEL notes, because the insn splitter
--;; does not attempt to preserve any REG_NOTES on the input instruction.
--
- (define_insn_and_split "movdi_symbolic"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (match_operand:DI 1 "symbolic_operand" "s"))
-- (clobber (match_operand:DI 2 "register_operand" "+r"))
-+ (clobber (match_scratch:DI 2 "=r"))
- (use (reg:DI 1))]
- ""
- "* abort ();"
-- ""
-+ "!no_new_pseudos || reload_completed"
- [(const_int 0)]
-- "ia64_expand_load_address (operands[0], operands[1], operands[2]); DONE;")
-+{
-+ rtx scratch = operands[2];
-+ if (!reload_completed)
-+ gen_reg_rtx (Pmode);
-+ ia64_expand_load_address (operands[0], operands[1], scratch);
-+ DONE;
-+})
-
- (define_insn "*movdi_internal"
- [(set (match_operand:DI 0 "destination_operand"
-@@ -510,6 +505,131 @@
- "addl %0 = @ltoff(%1), gp"
- [(set_attr "itanium_class" "ialu")])
-
-+(define_insn "load_ltoff_dtpmod"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (plus:DI (reg:DI 1)
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_LTOFF_DTPMOD)))]
-+ ""
-+ "addl %0 = @ltoff(@dtpmod(%1)), gp"
-+ [(set_attr "itanium_class" "ialu")])
-+
-+(define_insn "load_ltoff_dtprel"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (plus:DI (reg:DI 1)
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_LTOFF_DTPREL)))]
-+ ""
-+ "addl %0 = @ltoff(@dtprel(%1)), gp"
-+ [(set_attr "itanium_class" "ialu")])
-+
-+(define_expand "load_dtprel"
-+ [(set (match_operand:DI 0 "register_operand" "")
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_DTPREL))]
-+ ""
-+ "")
-+
-+(define_insn "*load_dtprel64"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_DTPREL))]
-+ "TARGET_TLS64"
-+ "movl %0 = @dtprel(%1)"
-+ [(set_attr "itanium_class" "long_i")])
-+
-+(define_insn "*load_dtprel22"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_DTPREL))]
-+ ""
-+ "addl %0 = @dtprel(%1), r0"
-+ [(set_attr "itanium_class" "ialu")])
-+
-+(define_expand "add_dtprel"
-+ [(set (match_operand:DI 0 "register_operand" "")
-+ (plus:DI (match_operand:DI 1 "register_operand" "")
-+ (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
-+ UNSPEC_DTPREL)))]
-+ "!TARGET_TLS64"
-+ "")
-+
-+(define_insn "*add_dtprel14"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (plus:DI (match_operand:DI 1 "register_operand" "r")
-+ (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
-+ UNSPEC_DTPREL)))]
-+ "TARGET_TLS14"
-+ "adds %0 = @dtprel(%2), %1"
-+ [(set_attr "itanium_class" "ialu")])
-+
-+(define_insn "*add_dtprel22"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (plus:DI (match_operand:DI 1 "register_operand" "a")
-+ (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
-+ UNSPEC_DTPREL)))]
-+ "TARGET_TLS22"
-+ "addl %0 = @dtprel(%2), %1"
-+ [(set_attr "itanium_class" "ialu")])
-+
-+(define_insn "load_ltoff_tprel"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (plus:DI (reg:DI 1)
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_LTOFF_TPREL)))]
-+ ""
-+ "addl %0 = @ltoff(@tprel(%1)), gp"
-+ [(set_attr "itanium_class" "ialu")])
-+
-+(define_expand "load_tprel"
-+ [(set (match_operand:DI 0 "register_operand" "")
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_TPREL))]
-+ ""
-+ "")
-+
-+(define_insn "*load_tprel64"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_TPREL))]
-+ "TARGET_TLS64"
-+ "movl %0 = @tprel(%1)"
-+ [(set_attr "itanium_class" "long_i")])
-+
-+(define_insn "*load_tprel22"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
-+ UNSPEC_TPREL))]
-+ ""
-+ "addl %0 = @tprel(%1), r0"
-+ [(set_attr "itanium_class" "ialu")])
-+
-+(define_expand "add_tprel"
-+ [(set (match_operand:DI 0 "register_operand" "")
-+ (plus:DI (match_operand:DI 1 "register_operand" "")
-+ (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
-+ UNSPEC_TPREL)))]
-+ "!TARGET_TLS64"
-+ "")
-+
-+(define_insn "*add_tprel14"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (plus:DI (match_operand:DI 1 "register_operand" "r")
-+ (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
-+ UNSPEC_TPREL)))]
-+ "TARGET_TLS14"
-+ "adds %0 = @tprel(%2), %1"
-+ [(set_attr "itanium_class" "ialu")])
-+
-+(define_insn "*add_tprel22"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (plus:DI (match_operand:DI 1 "register_operand" "a")
-+ (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
-+ UNSPEC_TPREL)))]
-+ "TARGET_TLS22"
-+ "addl %0 = @tprel(%2), %1"
-+ [(set_attr "itanium_class" "ialu")])
-+
- ;; With no offsettable memory references, we've got to have a scratch
- ;; around to play with the second word.
- (define_expand "movti"
-@@ -517,12 +637,12 @@
- (match_operand:TI 1 "general_operand" ""))
- (clobber (match_scratch:DI 2 ""))])]
- ""
-- "
- {
-- if (! reload_in_progress && ! reload_completed
-- && ! ia64_move_ok (operands[0], operands[1]))
-- operands[1] = force_reg (TImode, operands[1]);
--}")
-+ rtx op1 = ia64_expand_move (operands[0], operands[1]);
-+ if (!op1)
-+ DONE;
-+ operands[1] = op1;
-+})
-
- (define_insn_and_split "*movti_internal"
- [(set (match_operand:TI 0 "nonimmediate_operand" "=r,r,m")
-@@ -639,12 +759,12 @@
- [(set (match_operand:SF 0 "general_operand" "")
- (match_operand:SF 1 "general_operand" ""))]
- ""
-- "
- {
-- if (! reload_in_progress && ! reload_completed
-- && ! ia64_move_ok (operands[0], operands[1]))
-- operands[1] = force_reg (SFmode, operands[1]);
--}")
-+ rtx op1 = ia64_expand_move (operands[0], operands[1]);
-+ if (!op1)
-+ DONE;
-+ operands[1] = op1;
-+})
-
- (define_insn "*movsf_internal"
- [(set (match_operand:SF 0 "destination_operand" "=f,f, Q,*r, f,*r,*r, m")
-@@ -665,12 +785,12 @@
- [(set (match_operand:DF 0 "general_operand" "")
- (match_operand:DF 1 "general_operand" ""))]
- ""
-- "
- {
-- if (! reload_in_progress && ! reload_completed
-- && ! ia64_move_ok (operands[0], operands[1]))
-- operands[1] = force_reg (DFmode, operands[1]);
--}")
-+ rtx op1 = ia64_expand_move (operands[0], operands[1]);
-+ if (!op1)
-+ DONE;
-+ operands[1] = op1;
-+})
-
- (define_insn "*movdf_internal"
- [(set (match_operand:DF 0 "destination_operand" "=f,f, Q,*r, f,*r,*r, m")
---- gcc/config/ia64/sysv4.h.jj Mon Jun 3 17:24:18 2002
-+++ gcc/config/ia64/sysv4.h Wed Jun 19 19:33:52 2002
-@@ -42,8 +42,7 @@ extern int size_directive_output;
- #undef ASM_OUTPUT_ALIGNED_LOCAL
- #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
- do { \
-- if ((DECL) \
-- && XSTR (XEXP (DECL_RTL (DECL), 0), 0)[0] == SDATA_NAME_FLAG_CHAR) \
-+ if ((DECL) && sdata_symbolic_operand (XEXP (DECL_RTL (DECL), 0), Pmode)) \
- sbss_section (); \
- else \
- bss_section (); \
-@@ -62,8 +61,8 @@ do { \
- #define ASM_OUTPUT_LABELREF(STREAM, NAME) \
- do { \
- const char *name_ = NAME; \
-- if (*name_ == SDATA_NAME_FLAG_CHAR) \
-- name_++; \
-+ if (*name_ == ENCODE_SECTION_INFO_CHAR) \
-+ name_ += 2; \
- if (*name_ == '*') \
- name_++; \
- else \
-@@ -149,9 +148,11 @@ do { \
- 0 .text
- 1 .rodata
- 2 .data
-- 3 .sdata
-- 4 .bss
-+ 3 .bss
-+ 4 .sdata
- 5 .sbss
-+ 6 .tdata
-+ 7 .tbss
- */
- #define DO_SELECT_SECTION(SECNUM, DECL, RELOC) \
- do \
-@@ -167,9 +168,10 @@ do { \
- } \
- else if (TREE_CODE (DECL) == VAR_DECL) \
- { \
-- if (XSTR (XEXP (DECL_RTL (DECL), 0), 0)[0] \
-- == SDATA_NAME_FLAG_CHAR) \
-- SECNUM = 3; \
-+ if (DECL_THREAD_LOCAL (DECL)) \
-+ SECNUM = 6; \
-+ else if (sdata_symbolic_operand (XEXP (DECL_RTL (DECL), 0), Pmode))\
-+ SECNUM = 4; \
- /* ??? We need the extra RELOC check, because the default \
- is to only check RELOC if flag_pic is set, and we don't \
- set flag_pic (yet?). */ \
-@@ -184,13 +186,18 @@ do { \
- SECNUM = 0x201; \
- else \
- SECNUM = 0x301; \
-+ \
-+ if (SECNUM >= 2 \
-+ && (!DECL_INITIAL (DECL) \
-+ || DECL_INITIAL (DECL) == error_mark_node)) \
-+ SECNUM++; \
- } \
- /* This could be a CONSTRUCTOR containing ADDR_EXPR of a VAR_DECL, \
- in which case we can't put it in a shared library rodata. */ \
- else if (flag_pic && (RELOC)) \
-- SECNUM = 3; \
-- else \
- SECNUM = 2; \
-+ else \
-+ SECNUM = 1; \
- } \
- while (0)
-
-@@ -206,8 +213,8 @@ do { \
- text_section, \
- const_section, \
- data_section, \
-- sdata_section, \
- bss_section, \
-+ sdata_section, \
- sbss_section \
- }; \
- \
-@@ -217,6 +224,12 @@ do { \
- \
- switch (sec) \
- { \
-+ case 6: \
-+ named_section (NULL_TREE, ".tdata", RELOC); \
-+ break; \
-+ case 7: \
-+ named_section (NULL_TREE, ".tbss", RELOC); \
-+ break; \
- case 0x101: \
- mergeable_string_section (DECL, ALIGN, 0); \
- break; \
-@@ -244,9 +257,11 @@ do { \
- { ".text.", ".gnu.linkonce.t." }, \
- { ".rodata.", ".gnu.linkonce.r." }, \
- { ".data.", ".gnu.linkonce.d." }, \
-- { ".sdata.", ".gnu.linkonce.s." }, \
- { ".bss.", ".gnu.linkonce.b." }, \
-- { ".sbss.", ".gnu.linkonce.sb." } \
-+ { ".sdata.", ".gnu.linkonce.s." }, \
-+ { ".sbss.", ".gnu.linkonce.sb." }, \
-+ { ".tdata.", ".gnu.linkonce.td." }, \
-+ { ".tbss.", ".gnu.linkonce.tb." } \
- }; \
- \
- int nlen, plen, sec; \
---- gcc/config/elfos.h.jj Tue Dec 18 01:30:48 2001
-+++ gcc/config/elfos.h Wed Jun 19 19:33:52 2002
-@@ -288,24 +288,28 @@ const_section () \
- const char *name; \
- char *string; \
- const char *prefix; \
-- static const char *const prefixes[4][2] = \
-+ static const char *const prefixes[][2] = \
- { \
- { ".text.", ".gnu.linkonce.t." }, \
- { ".rodata.", ".gnu.linkonce.r." }, \
- { ".data.", ".gnu.linkonce.d." }, \
-- { ".bss.", ".gnu.linkonce.b." } \
-+ { ".bss.", ".gnu.linkonce.b." }, \
-+ { ".tdata", ".gnu.linkonce.td." }, \
-+ { ".tbss", ".gnu.linkonce.tb." }, \
- }; \
- \
- if (TREE_CODE (DECL) == FUNCTION_DECL) \
- sec = 0; \
- else if (DECL_INITIAL (DECL) == 0 \
- || DECL_INITIAL (DECL) == error_mark_node) \
-- sec = 3; \
-+ sec = 3; \
- else if (DECL_READONLY_SECTION (DECL, RELOC)) \
- sec = 1; \
- else \
- sec = 2; \
-- \
-+ if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl)) \
-+ sec = (sec == 3 ? 5 : 4); \
-+ \
- name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
- /* Strip off any encoding in name. */ \
- STRIP_NAME_ENCODING (name, name); \
-@@ -367,10 +371,18 @@ const_section () \
- } \
- else if (TREE_CODE (DECL) == VAR_DECL) \
- { \
-- if (!TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
-- || !DECL_INITIAL (DECL) \
-- || (DECL_INITIAL (DECL) != error_mark_node \
-- && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
-+ if (DECL_THREAD_LOCAL (DECL)) \
-+ { \
-+ if (!DECL_INITIAL (DECL) \
-+ || DECL_INITIAL (DECL) == error_mark_node) \
-+ named_section (NULL_TREE, ".tbss", RELOC); \
-+ else \
-+ named_section (NULL_TREE, ".tdata", RELOC); \
-+ } \
-+ else if (!TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
-+ || !DECL_INITIAL (DECL) \
-+ || (DECL_INITIAL (DECL) != error_mark_node \
-+ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
- { \
- if (flag_pic && ((RELOC) & 2)) \
- named_section (NULL_TREE, ".data.rel", RELOC); \
---- gcc/fixinc/fixincl.x.jj Thu May 2 12:15:15 2002
-+++ gcc/fixinc/fixincl.x Wed Jun 19 19:33:52 2002
-@@ -5,7 +5,7 @@
- * files which are fixed to work correctly with ANSI C and placed in a
- * directory that GNU C will search.
- *
-- * This file contains 151 fixup descriptions.
-+ * This file contains 152 fixup descriptions.
- *
- * See README for more information.
- *
-@@ -4568,6 +4568,41 @@ static const char* apzSysz_Stdlib_For_Su
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * *
- *
-+ * Description of Thread_Keyword fix
-+ */
-+tSCC zThread_KeywordName[] =
-+ "thread_keyword";
-+
-+/*
-+ * File name selection pattern
-+ */
-+tSCC zThread_KeywordList[] =
-+ "|pthread.h|bits/sigthread.h|";
-+/*
-+ * Machine/OS name selection pattern
-+ */
-+#define apzThread_KeywordMachs (const char**)NULL
-+
-+/*
-+ * content selection pattern - do fix if pattern found
-+ */
-+tSCC zThread_KeywordSelect0[] =
-+ " __thread([,)])";
-+
-+#define THREAD_KEYWORD_TEST_CT 1
-+static tTestDesc aThread_KeywordTests[] = {
-+ { TT_EGREP, zThread_KeywordSelect0, (regex_t*)NULL }, };
-+
-+/*
-+ * Fix Command Arguments for Thread_Keyword
-+ */
-+static const char* apzThread_KeywordPatch[] = {
-+ "format",
-+ " __thr%1",
-+ (char*)NULL };
-+
-+/* * * * * * * * * * * * * * * * * * * * * * * * * *
-+ *
- * Description of Tinfo_Cplusplus fix
- */
- tSCC zTinfo_CplusplusName[] =
-@@ -5581,9 +5616,9 @@ static const char* apzX11_SprintfPatch[]
- *
- * List of all fixes
- */
--#define REGEX_COUNT 163
-+#define REGEX_COUNT 164
- #define MACH_LIST_SIZE_LIMIT 279
--#define FIX_COUNT 151
-+#define FIX_COUNT 152
-
- /*
- * Enumerate the fixes
-@@ -5705,6 +5740,7 @@ typedef enum {
- SVR4_PROFIL_FIXIDX,
- SYSV68_STRING_FIXIDX,
- SYSZ_STDLIB_FOR_SUN_FIXIDX,
-+ THREAD_KEYWORD_FIXIDX,
- TINFO_CPLUSPLUS_FIXIDX,
- ULTRIX_ATEXIT_PARAM_FIXIDX,
- ULTRIX_ATOF_PARAM_FIXIDX,
-@@ -6314,6 +6350,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
- SYSZ_STDLIB_FOR_SUN_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
- aSysz_Stdlib_For_SunTests, apzSysz_Stdlib_For_SunPatch, 0 },
-
-+ { zThread_KeywordName, zThread_KeywordList,
-+ apzThread_KeywordMachs,
-+ THREAD_KEYWORD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
-+ aThread_KeywordTests, apzThread_KeywordPatch, 0 },
-+
- { zTinfo_CplusplusName, zTinfo_CplusplusList,
- apzTinfo_CplusplusMachs,
- TINFO_CPLUSPLUS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
---- gcc/fixinc/inclhack.def.jj Thu May 2 12:15:17 2002
-+++ gcc/fixinc/inclhack.def Wed Jun 19 19:33:52 2002
-@@ -1,4 +1,3 @@
--
- /* -*- Mode: C -*- */
-
- autogen definitions fixincl;
-@@ -2886,6 +2885,24 @@ fix = {
- };
-
-
-+/*
-+ * __thread is now a keyword.
-+ */
-+fix = {
-+ hackname = thread_keyword;
-+ files = "pthread.h";
-+ files = "bits/sigthread.h";
-+ select = " __thread([,)])";
-+ c_fix = format;
-+ c_fix_arg = " __thr%1";
-+
-+ test_text =
-+ "extern int pthread_create (pthread_t *__restrict __thread,\n"
-+ "extern int pthread_kill (pthread_t __thread, int __signo);\n"
-+ "extern int pthread_cancel (pthread_t __thread);";
-+};
-+
-+
- /*
- * if the #if says _cplusplus, not the double underscore __cplusplus
- * that it should be
---- gcc/testsuite/g++.dg/dg.exp.jj Thu Feb 14 13:26:12 2002
-+++ gcc/testsuite/g++.dg/dg.exp Wed Jun 19 19:33:52 2002
-@@ -28,10 +28,12 @@ if ![info exists DEFAULT_CXXFLAGS] then
- # Initialize `dg'.
- dg-init
-
--# Gather a list of all tests, excluding those in special/; those are handled
--# well, specially.
--set all [lsort [find $srcdir/$subdir *.C]]
--set tests [prune [prune $all $srcdir/$subdir/special/*] $srcdir/$subdir/debug/*]
-+# Gather a list of all tests, with the exception of those in directories
-+# that are handled specially.
-+set tests [lsort [find $srcdir/$subdir *.C]]
-+set tests [prune $tests $srcdir/$subdir/debug/*]
-+set tests [prune $tests $srcdir/$subdir/special/*]
-+set tests [prune $tests $srcdir/$subdir/tls/*]
-
- # Main loop.
- dg-runtest $tests "" $DEFAULT_CXXFLAGS
---- gcc/testsuite/g++.dg/tls/diag-1.C.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/g++.dg/tls/diag-1.C Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,30 @@
-+/* Valid __thread specifiers. */
-+
-+__thread int g1;
-+extern __thread int g2;
-+static __thread int g3;
-+
-+void foo()
-+{
-+ extern __thread int l1;
-+ static __thread int l2;
-+}
-+
-+struct A {
-+ static __thread int i;
-+};
-+
-+__thread int A::i = 42;
-+
-+template <typename T> struct B {
-+ static __thread T t;
-+};
-+
-+template <typename T>
-+__thread T B<T>::t = 42;
-+
-+void bar ()
-+{
-+ int j = B<int>::t;
-+ int k = B<const int>::t;
-+}
---- gcc/testsuite/g++.dg/tls/diag-2.C.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/g++.dg/tls/diag-2.C Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,25 @@
-+/* Invalid __thread specifiers. */
-+
-+__thread extern int g1; /* { dg-error "`__thread' before `extern'" } */
-+__thread static int g2; /* { dg-error "`__thread' before `static'" } */
-+__thread __thread int g3; /* { dg-error "duplicate `__thread'" } */
-+typedef __thread int g4; /* { dg-error "multiple storage classes" } */
-+
-+void foo()
-+{
-+ __thread int l1; /* { dg-error "implicitly auto and declared `__thread'" } */
-+ auto __thread int l2; /* { dg-error "multiple storage classes" } */
-+ __thread extern int l3; /* { dg-error "`__thread' before `extern'" } */
-+ register __thread int l4; /* { dg-error "multiple storage classes" } */
-+}
-+
-+__thread void f1 (); /* { dg-error "invalid for function" } */
-+extern __thread void f2 (); /* { dg-error "invalid for function" } */
-+static __thread void f3 (); /* { dg-error "invalid for function" } */
-+__thread void f4 () { } /* { dg-error "invalid for function" } */
-+
-+void bar(__thread int p1); /* { dg-error "(invalid in parameter)|(specified for parameter)" } */
-+
-+struct A {
-+ __thread int i; /* { dg-error "specified for field" } */
-+};
---- gcc/testsuite/g++.dg/tls/init-1.C.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/g++.dg/tls/init-1.C Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,13 @@
-+/* Valid initializations. */
-+
-+__thread int i = 42;
-+
-+static int j;
-+__thread int *p = &j;
-+
-+/* Note that this is valid in C++ (unlike C) as a run-time initialization. */
-+int *q = &i;
-+
-+/* Valid because "const int k" is an integral constant expression in C++. */
-+__thread const int k = 42;
-+__thread const int l = k;
---- gcc/testsuite/g++.dg/tls/init-2.C.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/g++.dg/tls/init-2.C Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,13 @@
-+/* Invalid initializations. */
-+
-+extern __thread int i;
-+__thread int *p = &i; /* { dg-error "run-time initialization" } */
-+
-+extern int f();
-+__thread int j = f(); /* { dg-error "run-time initialization" } */
-+
-+struct S
-+{
-+ S();
-+};
-+__thread S s; /* { dg-error "run-time initialization" } */
---- gcc/testsuite/g++.dg/tls/tls.exp.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/g++.dg/tls/tls.exp Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,44 @@
-+# Copyright (C) 2002 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.
-+
-+# GCC testsuite that uses the `dg.exp' driver.
-+
-+# Load support procs.
-+load_lib g++-dg.exp
-+
-+# Test for thread-local data supported by the platform. If it
-+# isn't, everything will fail with the "not supported" message.
-+
-+set comp_output [g++_target_compile \
-+ "$srcdir/$subdir/trivial.C" "trivial.S" assembly ""]
-+if { [string match "*not supported*" $comp_output] } {
-+ return 0
-+}
-+
-+# If a testcase doesn't have special options, use these.
-+global DEFAULT_CXXFLAGS
-+if ![info exists DEFAULT_CXXFLAGS] then {
-+ set DEFAULT_CXXFLAGS " -ansi -pedantic-errors -Wno-long-long"
-+}
-+
-+# Initialize `dg'.
-+dg-init
-+
-+# Main loop.
-+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" $DEFAULT_CXXFLAGS
-+
-+# All done.
-+dg-finish
---- gcc/testsuite/g++.dg/tls/trivial.C.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/g++.dg/tls/trivial.C Wed Jun 19 19:33:52 2002
-@@ -0,0 +1 @@
-+__thread int i;
---- gcc/testsuite/gcc.dg/tls/diag-1.c.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/gcc.dg/tls/diag-1.c Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,11 @@
-+/* Valid __thread specifiers. */
-+
-+__thread int g1;
-+extern __thread int g2;
-+static __thread int g3;
-+
-+void foo()
-+{
-+ extern __thread int l1;
-+ static __thread int l2;
-+}
---- gcc/testsuite/gcc.dg/tls/diag-2.c.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/gcc.dg/tls/diag-2.c Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,21 @@
-+/* Invalid __thread specifiers. */
-+
-+__thread extern int g1; /* { dg-error "`__thread' before `extern'" } */
-+__thread static int g2; /* { dg-error "`__thread' before `static'" } */
-+__thread __thread int g3; /* { dg-error "duplicate `__thread'" } */
-+typedef __thread int g4; /* { dg-error "multiple storage classes" } */
-+
-+void foo()
-+{
-+ __thread int l1; /* { dg-error "implicitly auto and declared `__thread'" } */
-+ auto __thread int l2; /* { dg-error "multiple storage classes" } */
-+ __thread extern int l3; /* { dg-error "`__thread' before `extern'" } */
-+ register __thread int l4; /* { dg-error "multiple storage classes" } */
-+}
-+
-+__thread void f1 (); /* { dg-error "invalid storage class for function" } */
-+extern __thread void f2 (); /* { dg-error "invalid storage class for function" } */
-+static __thread void f3 (); /* { dg-error "invalid storage class for function" } */
-+__thread void f4 () { } /* { dg-error "function definition declared `__thread'" } */
-+
-+void bar(__thread int p1); /* { dg-error "storage class specified for parameter" } */
---- gcc/testsuite/gcc.dg/tls/init-1.c.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/gcc.dg/tls/init-1.c Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,4 @@
-+/* Invalid initializations. */
-+
-+extern __thread int i;
-+int *p = &i; /* { dg-error "initializer element is not constant" } */
---- gcc/testsuite/gcc.dg/tls/tls.exp.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/gcc.dg/tls/tls.exp Wed Jun 19 19:33:52 2002
-@@ -0,0 +1,45 @@
-+# Copyright (C) 2002 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.
-+
-+# GCC testsuite that uses the `dg.exp' driver.
-+
-+# Load support procs.
-+load_lib gcc-dg.exp
-+
-+# Test for thread-local data supported by the platform. If it
-+# isn't, everything will fail with the "not supported" message.
-+
-+set comp_output [gcc_target_compile \
-+ "$srcdir/$subdir/trivial.c" "trivial.S" assembly ""]
-+if { [string match "*not supported*" $comp_output] } {
-+ return 0
-+}
-+
-+# If a testcase doesn't have special options, use these.
-+global DEFAULT_CFLAGS
-+if ![info exists DEFAULT_CFLAGS] then {
-+ set DEFAULT_CFLAGS " -ansi -pedantic-errors"
-+}
-+
-+# Initialize `dg'.
-+dg-init
-+
-+# Main loop.
-+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
-+ "" $DEFAULT_CFLAGS
-+
-+# All done.
-+dg-finish
---- gcc/testsuite/gcc.dg/tls/trivial.c.jj Wed Jun 19 19:33:52 2002
-+++ gcc/testsuite/gcc.dg/tls/trivial.c Wed Jun 19 19:33:52 2002
-@@ -0,0 +1 @@
-+__thread int i;
---- gcc/c-common.h.jj Wed Apr 17 15:34:36 2002
-+++ gcc/c-common.h Wed Jun 19 19:33:52 2002
-@@ -58,7 +58,7 @@ enum rid
- RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT,
-
- /* C extensions */
-- RID_BOUNDED, RID_UNBOUNDED, RID_COMPLEX,
-+ RID_BOUNDED, RID_UNBOUNDED, RID_COMPLEX, RID_THREAD,
-
- /* C++ */
- RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
---- gcc/c-decl.c.jj Wed Jun 19 19:33:50 2002
-+++ gcc/c-decl.c Wed Jun 19 19:33:52 2002
-@@ -3571,9 +3571,19 @@ start_decl (declarator, declspecs, initi
- /* ANSI specifies that a tentative definition which is not merged with
- a non-tentative definition behaves exactly like a definition with an
- initializer equal to zero. (Section 3.7.2)
-- -fno-common gives strict ANSI behavior. Usually you don't want it.
-- This matters only for variables with external linkage. */
-- if (! flag_no_common || ! TREE_PUBLIC (decl))
-+
-+ -fno-common gives strict ANSI behavior, though this tends to break
-+ a large body of code that grew up without this rule.
-+
-+ Thread-local variables are never common, since there's no entrenched
-+ body of code to break, and it allows more efficient variable references
-+ in the presense of dynamic linking. */
-+
-+ if (TREE_CODE (decl) == VAR_DECL
-+ && !initialized
-+ && TREE_PUBLIC (decl)
-+ && !DECL_THREAD_LOCAL (decl)
-+ && !flag_no_common)
- DECL_COMMON (decl) = 1;
-
- /* Set attributes here so if duplicate decl, will have proper attributes. */
-@@ -4172,7 +4182,7 @@ grokdeclarator (declarator, declspecs, d
- enum rid i = C_RID_CODE (id);
- if ((int) i <= (int) RID_LAST_MODIFIER)
- {
-- if (i == RID_LONG && (specbits & (1 << (int) i)))
-+ if (i == RID_LONG && (specbits & (1 << (int) RID_LONG)))
- {
- if (longlong)
- error ("`long long long' is too long for GCC");
-@@ -4186,6 +4196,19 @@ grokdeclarator (declarator, declspecs, d
- }
- else if (specbits & (1 << (int) i))
- pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
-+
-+ /* Diagnose "__thread extern". Recall that this list
-+ is in the reverse order seen in the text. */
-+ if (i == RID_THREAD
-+ && (specbits & (1 << (int) RID_EXTERN
-+ | 1 << (int) RID_STATIC)))
-+ {
-+ if (specbits & 1 << (int) RID_EXTERN)
-+ error ("`__thread' before `extern'");
-+ else
-+ error ("`__thread' before `static'");
-+ }
-+
- specbits |= 1 << (int) i;
- goto found;
- }
-@@ -4438,6 +4461,12 @@ grokdeclarator (declarator, declspecs, d
- if (specbits & 1 << (int) RID_REGISTER) nclasses++;
- if (specbits & 1 << (int) RID_TYPEDEF) nclasses++;
-
-+ /* "static __thread" and "extern __thread" are allowed. */
-+ if ((specbits & (1 << (int) RID_THREAD
-+ | 1 << (int) RID_STATIC
-+ | 1 << (int) RID_EXTERN)) == (1 << (int) RID_THREAD))
-+ nclasses++;
-+
- /* Warn about storage classes that are invalid for certain
- kinds of declarations (parameters, typenames, etc.). */
-
-@@ -4447,7 +4476,8 @@ grokdeclarator (declarator, declspecs, d
- && (specbits
- & ((1 << (int) RID_REGISTER)
- | (1 << (int) RID_AUTO)
-- | (1 << (int) RID_TYPEDEF))))
-+ | (1 << (int) RID_TYPEDEF)
-+ | (1 << (int) RID_THREAD))))
- {
- if (specbits & 1 << (int) RID_AUTO
- && (pedantic || current_binding_level == global_binding_level))
-@@ -4456,8 +4486,10 @@ grokdeclarator (declarator, declspecs, d
- error ("function definition declared `register'");
- if (specbits & 1 << (int) RID_TYPEDEF)
- error ("function definition declared `typedef'");
-+ if (specbits & 1 << (int) RID_THREAD)
-+ error ("function definition declared `__thread'");
- specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
-- | (1 << (int) RID_AUTO));
-+ | (1 << (int) RID_AUTO) | (1 << (int) RID_THREAD));
- }
- else if (decl_context != NORMAL && nclasses > 0)
- {
-@@ -4480,7 +4512,7 @@ grokdeclarator (declarator, declspecs, d
- }
- specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
- | (1 << (int) RID_AUTO) | (1 << (int) RID_STATIC)
-- | (1 << (int) RID_EXTERN));
-+ | (1 << (int) RID_EXTERN) | (1 << (int) RID_THREAD));
- }
- }
- else if (specbits & 1 << (int) RID_EXTERN && initialized && ! funcdef_flag)
-@@ -4491,12 +4523,25 @@ grokdeclarator (declarator, declspecs, d
- else
- error ("`%s' has both `extern' and initializer", name);
- }
-- else if (specbits & 1 << (int) RID_EXTERN && funcdef_flag
-- && current_binding_level != global_binding_level)
-- error ("nested function `%s' declared `extern'", name);
-- else if (current_binding_level == global_binding_level
-- && specbits & (1 << (int) RID_AUTO))
-- error ("top-level declaration of `%s' specifies `auto'", name);
-+ else if (current_binding_level == global_binding_level)
-+ {
-+ if (specbits & 1 << (int) RID_AUTO)
-+ error ("top-level declaration of `%s' specifies `auto'", name);
-+ }
-+ else
-+ {
-+ if (specbits & 1 << (int) RID_EXTERN && funcdef_flag)
-+ error ("nested function `%s' declared `extern'", name);
-+ else if ((specbits & (1 << (int) RID_THREAD
-+ | 1 << (int) RID_EXTERN
-+ | 1 << (int) RID_STATIC))
-+ == (1 << (int) RID_THREAD))
-+ {
-+ error ("function-scope `%s' implicitly auto and declared `__thread'",
-+ name);
-+ specbits &= ~(1 << (int) RID_THREAD);
-+ }
-+ }
- }
-
- /* Now figure out the structure of the declarator proper.
-@@ -5095,6 +5140,8 @@ grokdeclarator (declarator, declspecs, d
- pedwarn ("invalid storage class for function `%s'", name);
- if (specbits & (1 << (int) RID_REGISTER))
- error ("invalid storage class for function `%s'", name);
-+ if (specbits & (1 << (int) RID_THREAD))
-+ error ("invalid storage class for function `%s'", name);
- /* Function declaration not at top level.
- Storage classes other than `extern' are not allowed
- and `extern' makes no difference. */
-@@ -5187,22 +5234,32 @@ grokdeclarator (declarator, declspecs, d
- pedwarn_with_decl (decl, "variable `%s' declared `inline'");
-
- DECL_EXTERNAL (decl) = extern_ref;
-+
- /* At top level, the presence of a `static' or `register' storage
- class specifier, or the absence of all storage class specifiers
- makes this declaration a definition (perhaps tentative). Also,
- the absence of both `static' and `register' makes it public. */
- if (current_binding_level == global_binding_level)
- {
-- TREE_PUBLIC (decl)
-- = !(specbits
-- & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)));
-- TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
-+ TREE_PUBLIC (decl) = !(specbits & ((1 << (int) RID_STATIC)
-+ | (1 << (int) RID_REGISTER)));
-+ TREE_STATIC (decl) = !extern_ref;
- }
- /* Not at top level, only `static' makes a static definition. */
- else
- {
- TREE_STATIC (decl) = (specbits & (1 << (int) RID_STATIC)) != 0;
-- TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
-+ TREE_PUBLIC (decl) = extern_ref;
-+ }
-+
-+ if (specbits & 1 << (int) RID_THREAD)
-+ {
-+ if (targetm.have_tls)
-+ DECL_THREAD_LOCAL (decl) = 1;
-+ else
-+ /* A mere warning is sure to result in improper semantics
-+ at runtime. Don't bother to allow this to compile. */
-+ error ("thread-local storage not supported for this target");
- }
- }
-
---- gcc/c-parse.in.jj Wed Apr 17 15:34:46 2002
-+++ gcc/c-parse.in Wed Jun 19 19:33:52 2002
-@@ -3329,6 +3329,7 @@ static const struct resword reswords[] =
- { "__restrict__", RID_RESTRICT, 0 },
- { "__signed", RID_SIGNED, 0 },
- { "__signed__", RID_SIGNED, 0 },
-+ { "__thread", RID_THREAD, 0 },
- { "__typeof", RID_TYPEOF, 0 },
- { "__typeof__", RID_TYPEOF, 0 },
- { "__unbounded", RID_UNBOUNDED, 0 },
-@@ -3424,6 +3425,7 @@ static const short rid_to_yy[RID_MAX] =
- /* RID_BOUNDED */ TYPE_QUAL,
- /* RID_UNBOUNDED */ TYPE_QUAL,
- /* RID_COMPLEX */ TYPESPEC,
-+ /* RID_THREAD */ SCSPEC,
-
- /* C++ */
- /* RID_FRIEND */ 0,
---- gcc/config.in.jj Sat Jun 8 00:38:25 2002
-+++ gcc/config.in Wed Jun 19 19:33:52 2002
-@@ -523,6 +523,9 @@
- /* Define if your assembler supports marking sections with SHF_MERGE flag. */
- #undef HAVE_GAS_SHF_MERGE
-
-+/* Define if your assembler supports thread-local storage. */
-+#undef HAVE_AS_TLS
-+
- /* Define if your assembler supports explicit relocations. */
- #undef HAVE_AS_EXPLICIT_RELOCS
-
---- gcc/flags.h.jj Sat Mar 23 12:02:51 2002
-+++ gcc/flags.h Wed Jun 19 19:33:52 2002
-@@ -450,11 +450,22 @@ extern int flag_pretend_float;
-
- extern int flag_pedantic_errors;
-
--/* Nonzero means generate position-independent code.
-- This is not fully implemented yet. */
-+/* Nonzero means generate position-independent code. 1 vs 2 for a
-+ target-dependent "small" or "large" mode. */
-
- extern int flag_pic;
-
-+/* Set to the default thread-local storage (tls) model to use. */
-+
-+enum tls_model {
-+ TLS_MODEL_GLOBAL_DYNAMIC = 1,
-+ TLS_MODEL_LOCAL_DYNAMIC,
-+ TLS_MODEL_INITIAL_EXEC,
-+ TLS_MODEL_LOCAL_EXEC
-+};
-+
-+extern enum tls_model flag_tls_default;
-+
- /* Nonzero means generate extra code for exception handling and enable
- exception handling. */
-
---- gcc/configure.in.jj Sat Jun 8 00:38:27 2002
-+++ gcc/configure.in Wed Jun 19 19:33:52 2002
-@@ -1715,6 +1715,72 @@ if test x"$gcc_cv_as_shf_merge" = xyes;
- fi
- AC_MSG_RESULT($gcc_cv_as_shf_merge)
-
-+AC_MSG_CHECKING(assembler thread-local storage support)
-+gcc_cv_as_tls=no
-+conftest_s=
-+tls_first_major=
-+tls_first_minor=
-+case "$target" in
-+changequote(,)dnl
-+ i[34567]86-*-*)
-+changequote([,])dnl
-+ conftest_s='
-+ .section ".tdata","awT",@progbits
-+foo: .long 25
-+ .text
-+ movl %gs:0, %eax
-+ leal foo@TLSGD(,%ebx,1), %eax
-+ leal foo@TLSLDM(%ebx), %eax
-+ leal foo@DTPOFF(%eax), %edx
-+ movl foo@GOTTPOFF(%ebx), %eax
-+ subl foo@GOTTPOFF(%ebx), %eax
-+ movl $foo@TPOFF, %eax
-+ subl $foo@TPOFF, %eax
-+ leal foo@NTPOFF(%ecx), %eax'
-+ tls_first_major=2
-+ tls_first_minor=13
-+ ;;
-+ ia64-*-*)
-+ conftest_s='
-+ .section ".tdata","awT",@progbits
-+foo: data8 25
-+ .text
-+ addl r16 = @ltoff(@dtpmod(foo#)), gp
-+ addl r17 = @ltoff(@dtprel(foo#)), gp
-+ addl r18 = @ltoff(@tprel(foo#)), gp
-+ addl r19 = @dtprel(foo#), gp
-+ adds r21 = @dtprel(foo#), r13
-+ movl r23 = @dtprel(foo#)
-+ addl r20 = @tprel(foo#), gp
-+ adds r22 = @tprel(foo#), r13
-+ movl r24 = @tprel(foo#)'
-+ tls_first_major=2
-+ tls_first_minor=13
-+ ;;
-+esac
-+if test -z "$tls_first_major"; then
-+ :
-+elif test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
-+then
-+ if test "$gcc_cv_gas_major_version" -eq "$tls_first_major" \
-+ -a "$gcc_cv_gas_minor_version" -ge "$tls_first_minor" \
-+ -o "$gcc_cv_gas_major_version" -gt "$tls_first_major"; then
-+ gcc_cv_as_tls=yes
-+ fi
-+elif test x$gcc_cv_as != x; then
-+ echo "$conftest_s" > conftest.s
-+ if $gcc_cv_as --fatal-warnings -o conftest.o conftest.s > /dev/null 2>&1
-+ then
-+ gcc_cv_as_tls=yes
-+ fi
-+ rm -f conftest.s conftest.o
-+fi
-+if test "$gcc_cv_as_tls" = yes; then
-+ AC_DEFINE(HAVE_AS_TLS, 1,
-+ [Define if your assembler supports thread-local storage.])
-+fi
-+AC_MSG_RESULT($gcc_cv_as_tls)
-+
- case "$target" in
- # All TARGET_ABI_OSF targets.
- alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
---- gcc/configure.jj Sat Jun 8 00:38:27 2002
-+++ gcc/configure Wed Jun 19 22:28:09 2002
-@@ -7391,6 +7391,73 @@ EOF
- fi
- echo "$ac_t""$gcc_cv_as_shf_merge" 1>&6
-
-+echo $ac_n "checking assembler thread-local storage support""... $ac_c" 1>&6
-+echo "configure:7399: checking assembler thread-local storage support" >&5
-+gcc_cv_as_tls=no
-+conftest_s=
-+tls_first_major=
-+tls_first_minor=
-+case "$target" in
-+ i[34567]86-*-*)
-+ conftest_s='
-+ .section ".tdata","awT",@progbits
-+foo: .long 25
-+ .text
-+ movl %gs:0, %eax
-+ leal foo@TLSGD(,%ebx,1), %eax
-+ leal foo@TLSLDM(%ebx), %eax
-+ leal foo@DTPOFF(%eax), %edx
-+ movl foo@GOTTPOFF(%ebx), %eax
-+ subl foo@GOTTPOFF(%ebx), %eax
-+ movl $foo@TPOFF, %eax
-+ subl $foo@TPOFF, %eax
-+ leal foo@NTPOFF(%ecx), %eax'
-+ tls_first_major=2
-+ tls_first_minor=13
-+ ;;
-+ ia64-*-*)
-+ conftest_s='
-+ .section ".tdata","awT",@progbits
-+foo: data8 25
-+ .text
-+ addl r16 = @ltoff(@dtpmod(foo#)), gp
-+ addl r17 = @ltoff(@dtprel(foo#)), gp
-+ addl r18 = @ltoff(@tprel(foo#)), gp
-+ addl r19 = @dtprel(foo#), gp
-+ adds r21 = @dtprel(foo#), r13
-+ movl r23 = @dtprel(foo#)
-+ addl r20 = @tprel(foo#), gp
-+ adds r22 = @tprel(foo#), r13
-+ movl r24 = @tprel(foo#)'
-+ tls_first_major=2
-+ tls_first_minor=13
-+ ;;
-+esac
-+if test -z "$tls_first_major"; then
-+ :
-+elif test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
-+then
-+ if test "$gcc_cv_gas_major_version" -eq "$tls_first_major" \
-+ -a "$gcc_cv_gas_minor_version" -ge "$tls_first_minor" \
-+ -o "$gcc_cv_gas_major_version" -gt "$tls_first_major"; then
-+ gcc_cv_as_tls=yes
-+ fi
-+elif test x$gcc_cv_as != x; then
-+ echo "$conftest_s" > conftest.s
-+ if $gcc_cv_as --fatal-warnings -o conftest.o conftest.s > /dev/null 2>&1
-+ then
-+ gcc_cv_as_tls=yes
-+ fi
-+ rm -f conftest.s conftest.o
-+fi
-+if test "$gcc_cv_as_tls" = yes; then
-+ cat >> confdefs.h <<\EOF
-+#define HAVE_AS_TLS 1
-+EOF
-+
-+fi
-+echo "$ac_t""$gcc_cv_as_tls" 1>&6
-+
- case "$target" in
- # All TARGET_ABI_OSF targets.
- alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
---- gcc/output.h.jj Wed Jun 19 19:33:50 2002
-+++ gcc/output.h Wed Jun 19 19:33:52 2002
-@@ -514,7 +514,8 @@ extern void no_asm_to_stream PARAMS ((FI
- #define SECTION_STRINGS 0x10000 /* contains zero terminated strings without
- embedded zeros */
- #define SECTION_OVERRIDE 0x20000 /* allow override of default flags */
--#define SECTION_MACH_DEP 0x40000 /* subsequent bits reserved for target */
-+#define SECTION_TLS 0x40000 /* contains thread-local storage */
-+#define SECTION_MACH_DEP 0x80000 /* subsequent bits reserved for target */
-
- extern unsigned int get_named_section_flags PARAMS ((const char *));
- extern bool set_named_section_flags PARAMS ((const char *, unsigned int));
---- gcc/print-tree.c.jj Mon Mar 18 23:19:57 2002
-+++ gcc/print-tree.c Wed Jun 19 19:33:52 2002
-@@ -363,6 +363,8 @@ print_node (file, prefix, node, indent)
-
- if (TREE_CODE (node) == VAR_DECL && DECL_IN_TEXT_SECTION (node))
- fputs (" in-text-section", file);
-+ if (TREE_CODE (node) == VAR_DECL && DECL_THREAD_LOCAL (node))
-+ fputs (" thread-local", file);
-
- if (TREE_CODE (node) == PARM_DECL && DECL_TRANSPARENT_UNION (node))
- fputs (" transparent-union", file);
---- gcc/target-def.h.jj Tue Feb 12 16:19:14 2002
-+++ gcc/target-def.h Wed Jun 19 19:33:52 2002
-@@ -98,6 +98,10 @@ Foundation, 59 Temple Place - Suite 330,
- #define TARGET_HAVE_NAMED_SECTIONS false
- #endif
-
-+#ifndef TARGET_HAVE_TLS
-+#define TARGET_HAVE_TLS false
-+#endif
-+
- #ifndef TARGET_ASM_EXCEPTION_SECTION
- #define TARGET_ASM_EXCEPTION_SECTION default_exception_section
- #endif
-@@ -194,9 +198,10 @@ Foundation, 59 Temple Place - Suite 330,
- TARGET_INIT_BUILTINS, \
- TARGET_EXPAND_BUILTIN, \
- TARGET_SECTION_TYPE_FLAGS, \
-+ TARGET_CANNOT_MODIFY_JUMPS_P, \
- TARGET_HAVE_NAMED_SECTIONS, \
- TARGET_HAVE_CTORS_DTORS, \
-- TARGET_CANNOT_MODIFY_JUMPS_P \
-+ TARGET_HAVE_TLS \
- }
-
- #include "hooks.h"
---- gcc/target.h.jj Tue Feb 12 16:19:14 2002
-+++ gcc/target.h Wed Jun 19 19:33:52 2002
-@@ -178,6 +178,10 @@ struct gcc_target
- /* ??? Should be merged with SELECT_SECTION and UNIQUE_SECTION. */
- unsigned int (* section_type_flags) PARAMS ((tree, const char *, int));
-
-+ /* True if new jumps cannot be created, to replace existing ones or
-+ not, at the current point in the compilation. */
-+ bool (* cannot_modify_jumps_p) PARAMS ((void));
-+
- /* True if arbitrary sections are supported. */
- bool have_named_sections;
-
-@@ -185,9 +189,8 @@ struct gcc_target
- false if we're using collect2 for the job. */
- bool have_ctors_dtors;
-
-- /* True if new jumps cannot be created, to replace existing ones or
-- not, at the current point in the compilation. */
-- bool (* cannot_modify_jumps_p) PARAMS ((void));
-+ /* True if thread-local storage is supported. */
-+ bool have_tls;
- };
-
- extern struct gcc_target targetm;
---- gcc/toplev.c.jj Thu May 30 11:08:44 2002
-+++ gcc/toplev.c Wed Jun 19 19:33:52 2002
-@@ -682,12 +682,15 @@ int flag_shared_data;
- int flag_delayed_branch;
-
- /* Nonzero if we are compiling pure (sharable) code.
-- Value is 1 if we are doing reasonable (i.e. simple
-- offset into offset table) pic. Value is 2 if we can
-- only perform register offsets. */
-+ Value is 1 if we are doing "small" pic; value is 2 if we're doing
-+ "large" pic. */
-
- int flag_pic;
-
-+/* Set to the default thread-local storage (tls) model to use. */
-+
-+enum tls_model flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
-+
- /* Nonzero means generate extra code for exception handling and enable
- exception handling. */
-
-@@ -3609,6 +3612,7 @@ display_help ()
- printf (_(" -finline-limit=<number> Limits the size of inlined functions to <number>\n"));
- printf (_(" -fmessage-length=<number> Limits diagnostics messages lengths to <number> characters per line. 0 suppresses line-wrapping\n"));
- printf (_(" -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n"));
-+ printf (_(" -ftls-model=[global-dynamic | local-dynamic | initial-exec | local-exec] Indicates the default thread-local storage code generation model\n"));
-
- for (i = ARRAY_SIZE (f_options); i--;)
- {
-@@ -3887,6 +3891,19 @@ decode_f_option (arg)
- MAX_INLINE_INSNS);
- set_param_value ("max-inline-insns", val);
- }
-+ else if ((option_value = skip_leading_substring (arg, "tls-model=")))
-+ {
-+ if (strcmp (option_value, "global-dynamic") == 0)
-+ flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
-+ else if (strcmp (option_value, "local-dynamic") == 0)
-+ flag_tls_default = TLS_MODEL_LOCAL_DYNAMIC;
-+ else if (strcmp (option_value, "initial-exec") == 0)
-+ flag_tls_default = TLS_MODEL_INITIAL_EXEC;
-+ else if (strcmp (option_value, "local-exec") == 0)
-+ flag_tls_default = TLS_MODEL_LOCAL_EXEC;
-+ else
-+ warning ("`%s': unknown tls-model option", arg - 2);
-+ }
- #ifdef INSN_SCHEDULING
- else if ((option_value = skip_leading_substring (arg, "sched-verbose=")))
- fix_sched_param ("verbose", option_value);
---- gcc/tree.c.jj Sun Apr 28 23:20:20 2002
-+++ gcc/tree.c Wed Jun 19 19:33:52 2002
-@@ -1510,12 +1510,13 @@ staticp (arg)
- case FUNCTION_DECL:
- /* Nested functions aren't static, since taking their address
- involves a trampoline. */
-- return (decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
-- && ! DECL_NON_ADDR_CONST_P (arg);
-+ return ((decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
-+ && ! DECL_NON_ADDR_CONST_P (arg));
-
- case VAR_DECL:
-- return (TREE_STATIC (arg) || DECL_EXTERNAL (arg))
-- && ! DECL_NON_ADDR_CONST_P (arg);
-+ return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
-+ && ! DECL_THREAD_LOCAL (arg)
-+ && ! DECL_NON_ADDR_CONST_P (arg));
-
- case CONSTRUCTOR:
- return TREE_STATIC (arg);
---- gcc/tree.h.jj Wed Jun 19 19:33:50 2002
-+++ gcc/tree.h Wed Jun 19 19:33:52 2002
-@@ -1614,6 +1614,10 @@ struct tree_type
- /* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */
- #define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable)
-
-+/* In a VAR_DECL, nonzero if the data should be allocated from
-+ thread-local storage. */
-+#define DECL_THREAD_LOCAL(NODE) (VAR_DECL_CHECK (NODE)->decl.thread_local_flag)
-+
- /* In a FUNCTION_DECL, the saved representation of the body of the
- entire function. Usually a COMPOUND_STMT, but in C++ this may also
- be a RETURN_INIT, CTOR_INITIALIZER, or TRY_BLOCK. */
-@@ -1792,7 +1796,8 @@ struct tree_decl
- unsigned non_addressable : 1;
- unsigned user_align : 1;
- unsigned uninlinable : 1;
-- /* Three unused bits. */
-+ unsigned thread_local_flag : 1;
-+ /* Two unused bits. */
-
- unsigned lang_flag_0 : 1;
- unsigned lang_flag_1 : 1;
---- gcc/varasm.c.jj Wed Jun 19 19:33:51 2002
-+++ gcc/varasm.c Wed Jun 19 19:33:52 2002
-@@ -1599,14 +1599,24 @@ assemble_variable (decl, top_level, at_e
-
- /* Handle uninitialized definitions. */
-
-- if ((DECL_INITIAL (decl) == 0 || DECL_INITIAL (decl) == error_mark_node)
-- /* If the target can't output uninitialized but not common global data
-- in .bss, then we have to use .data. */
--#if ! defined ASM_EMIT_BSS
-- && DECL_COMMON (decl)
-+ /* If the decl has been given an explicit section name, then it
-+ isn't common, and shouldn't be handled as such. */
-+ if (DECL_SECTION_NAME (decl) || dont_output_data)
-+ ;
-+ /* We don't implement common thread-local data at present. */
-+ else if (DECL_THREAD_LOCAL (decl))
-+ {
-+ if (DECL_COMMON (decl))
-+ sorry ("thread-local COMMON data not implemented");
-+ }
-+#ifndef ASM_EMIT_BSS
-+ /* If the target can't output uninitialized but not common global data
-+ in .bss, then we have to use .data. */
-+ else if (!DECL_COMMON (decl))
-+ ;
- #endif
-- && DECL_SECTION_NAME (decl) == NULL_TREE
-- && ! dont_output_data)
-+ else if (DECL_INITIAL (decl) == 0
-+ || DECL_INITIAL (decl) == error_mark_node)
- {
- unsigned HOST_WIDE_INT size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
- unsigned HOST_WIDE_INT rounded = size;
-@@ -5324,14 +5334,22 @@ default_section_type_flags (decl, name,
- if (decl && DECL_ONE_ONLY (decl))
- flags |= SECTION_LINKONCE;
-
-+ if (decl && TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
-+ flags |= SECTION_TLS | SECTION_WRITE;
-+
- if (strcmp (name, ".bss") == 0
- || strncmp (name, ".bss.", 5) == 0
- || strncmp (name, ".gnu.linkonce.b.", 16) == 0
- || strcmp (name, ".sbss") == 0
- || strncmp (name, ".sbss.", 6) == 0
-- || strncmp (name, ".gnu.linkonce.sb.", 17) == 0)
-+ || strncmp (name, ".gnu.linkonce.sb.", 17) == 0
-+ || strcmp (name, ".tbss") == 0)
- flags |= SECTION_BSS;
-
-+ if (strcmp (name, ".tdata") == 0
-+ || strcmp (name, ".tbss") == 0)
-+ flags |= SECTION_TLS;
-+
- return flags;
- }
-
-@@ -5374,6 +5392,8 @@ default_elf_asm_named_section (name, fla
- *f++ = 'M';
- if (flags & SECTION_STRINGS)
- *f++ = 'S';
-+ if (flags & SECTION_TLS)
-+ *f++ = 'T';
- *f = '\0';
-
- if (flags & SECTION_BSS)
+++ /dev/null
-2002-07-30 Jakub Jelinek <jakub@redhat.com>
-
- * expr.c (expand_expr) [ADDR_EXPR]: Force addresses of thread-local
- variables into pseudo.
-
- * gcc.dg/tls/opt-1.c: New test.
-
---- gcc/testsuite/gcc.dg/tls/opt-1.c.jj 2002-07-30 13:57:33.000000000 +0200
-+++ gcc/testsuite/gcc.dg/tls/opt-1.c 2002-07-30 13:56:40.000000000 +0200
-@@ -0,0 +1,28 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fPIC" } */
-+/* { dg-options "-O2 -fPIC -mcpu=i686" { target i?86-*-* } } */
-+
-+extern __thread int thr;
-+
-+static int x;
-+
-+static void
-+bar (void)
-+{
-+ x = 1;
-+}
-+
-+static void
-+#ifdef __i386__
-+__attribute__ ((regparm (3)))
-+#endif
-+foo (const char *x, void *y, int *z)
-+{
-+ bar ();
-+}
-+
-+void
-+test (const char *x, void *y)
-+{
-+ foo (x, y, &thr);
-+}
---- gcc/expr.c.jj 2002-07-30 12:49:43.000000000 +0200
-+++ gcc/expr.c 2002-07-30 20:18:36.000000000 +0200
-@@ -8833,7 +8833,12 @@ expand_expr (exp, target, tmode, modifie
- op0 = force_operand (XEXP (op0, 0), target);
- }
-
-- if (flag_force_addr
-+ if ((flag_force_addr
-+ || (TREE_CODE (TREE_OPERAND (exp, 0)) == VAR_DECL
-+ && DECL_THREAD_LOCAL (TREE_OPERAND (exp, 0))
-+ && ! memory_address_p (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp,
-+ 0))),
-+ op0)))
- && GET_CODE (op0) != REG
- && modifier != EXPAND_CONST_ADDRESS
- && modifier != EXPAND_INITIALIZER
+++ /dev/null
-2002-08-06 Aldy Hernandez <aldyh@redhat.com>
-
- * c-decl.c (duplicate_decls): Error out for incompatible TLS
- declarations.
-
- * testsuite/gcc.dg/tls/diag-3.c: New.
-
-*** gcc/c-decl.c 1 Aug 2002 06:20:30 -0000 1.344
---- gcc/c-decl.c 7 Aug 2002 01:01:55 -0000
-*************** duplicate_decls (newdecl, olddecl, diffe
-*** 1673,1678 ****
---- 1673,1692 ----
- if (TREE_CODE (newdecl) == VAR_DECL)
- DECL_INITIAL (newdecl) = 0;
- }
-+ /* TLS cannot follow non-TLS declaration. */
-+ else if (TREE_CODE (olddecl) == VAR_DECL && TREE_CODE (newdecl) == VAR_DECL
-+ && !DECL_THREAD_LOCAL (olddecl) && DECL_THREAD_LOCAL (newdecl))
-+ {
-+ error_with_decl (newdecl, "thread-local declaration of `%s' follows non thread-local declaration");
-+ error_with_decl (olddecl, "previous declaration of `%s'");
-+ }
-+ /* non-TLS declaration cannot follow TLS declaration. */
-+ else if (TREE_CODE (olddecl) == VAR_DECL && TREE_CODE (newdecl) == VAR_DECL
-+ && DECL_THREAD_LOCAL (olddecl) && !DECL_THREAD_LOCAL (newdecl))
-+ {
-+ error_with_decl (newdecl, "non thread-local declaration of `%s' follows thread-local declaration");
-+ error_with_decl (olddecl, "previous declaration of `%s'");
-+ }
- else
- {
- errmsg = redeclaration_error_message (newdecl, olddecl);
-*** gcc/testsuite/gcc.dg/tls/diag-3.c 1 Jan 1970 00:00:00 -0000
---- gcc/testsuite/gcc.dg/tls/diag-3.c 7 Aug 2002 01:01:55 -0000
-***************
-*** 0 ****
---- 1,10 ----
-+ /* Report invalid extern and __thread combinations. */
-+
-+ extern int j; /* { dg-error "previous declaration" } */
-+ __thread int j; /* { dg-error "thread-local declaration" } */
-+
-+ extern __thread int i; /* { dg-error "previous declaration" } */
-+ int i; /* { dg-error "non thread-local" } */
-+
-+ extern __thread int k; /* This is fine. */
-+ __thread int k;
-
+++ /dev/null
-2002-05-22 Richard Henderson <rth@redhat.com>
-
- * varasm.c (default_section_type_flags): Handle tls data and
- default sections.
-
- * gcc.dg/tls/section-1.c: New test.
-
-2002-03-15 Jason Merrill <jason@redhat.com>
-
- * varasm.c (assemble_variable): Call resolve_unique_section before
- checking DECL_SECTION_NAME.
-
---- gcc/testsuite/gcc.dg/tls/section-1.c.jj 2002-08-08 16:11:55.000000000 +0200
-+++ gcc/testsuite/gcc.dg/tls/section-1.c 2002-08-08 16:19:08.000000000 +0200
-@@ -0,0 +1,11 @@
-+/* Verify that we get errors for trying to put TLS data in
-+ sections which can't work. */
-+
-+#define A(X) __attribute__((section(X)))
-+
-+__thread int i A("foo"); /* Ok */
-+
-+__thread int j A(".data"); /* { dg-error "causes a section type conflict" "conflict with .data section" { xfail *-*-* } } */
-+
-+int k A("bar");
-+__thread int l A("bar"); /* { dg-error "causes a section type conflict" "conflict with user-defined section" } */
---- gcc/varasm.c.jj 2002-08-01 20:58:53.000000000 +0200
-+++ gcc/varasm.c 2002-08-08 16:10:15.000000000 +0200
-@@ -1599,6 +1599,13 @@
- if (TREE_PUBLIC (decl))
- maybe_assemble_visibility (decl);
-
-+ /* Output any data that we will need to use the address of. */
-+ if (DECL_INITIAL (decl) == error_mark_node)
-+ reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0;
-+ else if (DECL_INITIAL (decl))
-+ reloc = output_addressed_constants (DECL_INITIAL (decl));
-+ resolve_unique_section (decl, reloc, flag_data_sections);
-+
- /* Handle uninitialized definitions. */
-
- /* If the decl has been given an explicit section name, then it
-@@ -1654,14 +1661,7 @@
- if (TREE_PUBLIC (decl) && DECL_NAME (decl))
- globalize_decl (decl);
-
-- /* Output any data that we will need to use the address of. */
-- if (DECL_INITIAL (decl) == error_mark_node)
-- reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0;
-- else if (DECL_INITIAL (decl))
-- reloc = output_addressed_constants (DECL_INITIAL (decl));
--
- /* Switch to the appropriate section. */
-- resolve_unique_section (decl, reloc, flag_data_sections);
- variable_section (decl, reloc);
-
- /* dbxout.c needs to know this. */
-@@ -5345,11 +5345,14 @@
- || strcmp (name, ".sbss") == 0
- || strncmp (name, ".sbss.", 6) == 0
- || strncmp (name, ".gnu.linkonce.sb.", 17) == 0
-- || strcmp (name, ".tbss") == 0)
-+ || strcmp (name, ".tbss") == 0
-+ || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
- flags |= SECTION_BSS;
-
- if (strcmp (name, ".tdata") == 0
-- || strcmp (name, ".tbss") == 0)
-+ || strcmp (name, ".tbss") == 0
-+ || strncmp (name, ".gnu.linkonce.td.", 17) == 0
-+ || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
- flags |= SECTION_TLS;
-
- return flags;
+++ /dev/null
-2002-08-08 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.c (legitimate_constant_p): UNSPEC_TP is not
- legitimate constant.
- (legitimate_pic_operand_p): Neither pic operand.
- (legitimate_address_p): But legitimate address.
- (get_thread_pointer): Generate MEM/u instead of CONST around
- UNSPEC_TP.
- (print_operand): Remove printing of UNSPEC_TP.
- (print_operand_address): And print it here.
-
- * gcc.dg/tls/opt-2.c: New test.
-
---- gcc/config/i386/i386.c.jj 2002-08-07 22:18:39.000000000 +0200
-+++ gcc/config/i386/i386.c 2002-08-08 18:18:18.000000000 +0200
-@@ -4861,8 +4861,6 @@
- {
- case UNSPEC_TPOFF:
- return local_exec_symbolic_operand (XVECEXP (inner, 0, 0), Pmode);
-- case UNSPEC_TP:
-- return true;
- default:
- return false;
- }
-@@ -4921,8 +4919,6 @@
- {
- case UNSPEC_TPOFF:
- return local_exec_symbolic_operand (XVECEXP (inner, 0, 0), Pmode);
-- case UNSPEC_TP:
-- return true;
- default:
- return false;
- }
-@@ -5048,6 +5044,13 @@
- debug_rtx (addr);
- }
-
-+ if (GET_CODE (addr) == UNSPEC && XINT (addr, 1) == UNSPEC_TP)
-+ {
-+ if (TARGET_DEBUG_ADDR)
-+ fprintf (stderr, "Success.\n");
-+ return TRUE;
-+ }
-+
- if (ix86_decompose_address (addr, &parts) <= 0)
- {
- reason = "decomposition failed";
-@@ -5499,7 +5502,9 @@
- rtx tp;
-
- tp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx), UNSPEC_TP);
-- tp = gen_rtx_CONST (Pmode, tp);
-+ tp = gen_rtx_MEM (Pmode, tp);
-+ RTX_UNCHANGING_P (tp) = 1;
-+ set_mem_alias_set (tp, ix86_GOT_alias_set ());
- tp = force_reg (Pmode, tp);
-
- return tp;
-@@ -6613,17 +6618,6 @@
- fprintf (file, "%s", dstr);
- }
-
-- else if (GET_CODE (x) == CONST
-- && GET_CODE (XEXP (x, 0)) == UNSPEC
-- && XINT (XEXP (x, 0), 1) == UNSPEC_TP)
-- {
-- if (ASSEMBLER_DIALECT == ASM_INTEL)
-- fputs ("DWORD PTR ", file);
-- if (ASSEMBLER_DIALECT == ASM_ATT || USER_LABEL_PREFIX[0] == 0)
-- putc ('%', file);
-- fputs ("gs:0", file);
-- }
--
- else
- {
- if (code != 'P')
-@@ -6662,6 +6656,16 @@
- rtx base, index, disp;
- int scale;
-
-+ if (GET_CODE (addr) == UNSPEC && XINT (addr, 1) == UNSPEC_TP)
-+ {
-+ if (ASSEMBLER_DIALECT == ASM_INTEL)
-+ fputs ("DWORD PTR ", file);
-+ if (ASSEMBLER_DIALECT == ASM_ATT || USER_LABEL_PREFIX[0] == 0)
-+ putc ('%', file);
-+ fputs ("gs:0", file);
-+ return;
-+ }
-+
- if (! ix86_decompose_address (addr, &parts))
- {
- output_operand_lossage ("Wrong address expression or operand constraint");
---- gcc/testsuite/gcc.dg/tls/opt-2.c.jj 2002-08-08 18:36:32.000000000 +0200
-+++ gcc/testsuite/gcc.dg/tls/opt-2.c 2002-08-08 18:34:44.000000000 +0200
-@@ -0,0 +1,53 @@
-+/* This testcase generated invalid assembly on IA-32,
-+ since %gs:0 memory load was not exposed to the compiler
-+ as memory load and mem to mem moves are not possible
-+ on IA-32. */
-+/* { dg-do link } */
-+/* { dg-options "-O2 -ftls-model=initial-exec" } */
-+/* { dg-options "-O2 -ftls-model=initial-exec -march=i686" { target i?86-*-* } } */
-+
-+__thread int thr;
-+
-+struct A
-+{
-+ unsigned int a, b, c, d, e;
-+};
-+
-+int bar (int x, unsigned long y, void *z)
-+{
-+ return 0;
-+}
-+
-+int
-+foo (int x, int y, const struct A *z)
-+{
-+ struct A b;
-+ int d;
-+
-+ b = *z;
-+ d = bar (x, y, &b);
-+ if (d == 0 && y == 0x5402)
-+ {
-+ int e = thr;
-+ d = bar (x, 0x5401, &b);
-+ if (d)
-+ {
-+ thr = e;
-+ d = 0;
-+ }
-+ else if ((z->c & 0600) != (b.c & 0600)
-+ || ((z->c & 060) && ((z->c & 060) != (b.c & 060))))
-+ {
-+ thr = 22;
-+ d = -1;
-+ }
-+ }
-+
-+ return d;
-+}
-+
-+int main (void)
-+{
-+ foo (1, 2, 0);
-+ return 0;
-+}
+++ /dev/null
-.TH GCOV 1
-.\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection
-.\" other parms are allowed: see man(7), man(1)
-.SH NAME
-gcov \- test coverage program for GNU CC
-.SH SYNOPSIS
-.B gcov
-.I "[-b] [-v] [-n] [-l] [-f] [-o directory] sourcefile"
-.br
-.SH "DESCRIPTION"
-This manual page documents briefly the
-.BR gcov
-command.
-This manual page was written for the Debian GNU/Linux distribution
-(but may be used by others), because the original program does not
-have a manual page.
-Instead, it has documentation in the GNU Info format; see below.
-.PP
-.B gcov
-is a test coverage program. Use it in concert with GNU
-CC to analyze your programs to help create more efficient, faster
-running code. You can use gcov as a profiling tool to help
-discover where your optimization efforts will best affect your code. You
-can also use gcov along with the other profiling tool,
-.B gprof
-, to assess which parts of your code use the greatest amount
-of computing time.
-.SH "SEE ALSO"
-The program is documented fully by
-.IR "gcc: The GNU C compiler.",
-available via the Info system. The documentation for genclass can be
-found in the subsection "Gcov", under "a GNU CC test coverage program".
-.SH AUTHOR
-This manual page was written by the egcs maintainers for the Debian
-GNU/Linux system.