OSDN Git Service

Fix mips64vr4100-elf build failure.
[pf3gnuchains/gcc-fork.git] / gcc / README.gnat
1 The following patches are needed in order to build GNAT with EGCS.
2
3 These patches were tested with egcs-980308 and gnat-3.10p on a mips-sgi-irix6.3
4 system.  The gnat build succeeded as per the instructions in the gnat
5 README.BUILD file for building one library, except that CFLAGS="-O -g" and
6 GNATLIBCFLAGS="-O -g" were substituted for the recommended "-O2" so that the
7 build could be debugged.  There was no attempt to run the resulting build
8 against any testsuite or validation suite.
9
10 --
11
12 Developers Notes:
13
14 Every use of sizetype in the Ada front end should be checked to see if perhaps
15 it should be using bitsizetype instead.  The change to maybe_pad_type is just
16 a hack to work around this problem, and may not be desirable in the long term.
17
18 There are many places in the Ada front end where it calls operand_equal_p to
19 see if two type sizes are the same.  operand_equal_p fails if the two
20 arguments have different TYPE_MODEs.  sizetype and bitsizetype can have
21 different TYPE_MODEs.  Thus this code can fail if one type size is based
22 on sizetype, and the other is based on bitsizetype.  The change to
23 maybe_pad_type fixes one very critical place where this happens.  There may
24 be others.
25
26 --
27
28 Mon Mar 16 11:00:25 1998  Jim Wilson  <wilson@cygnus.com>
29
30         * a-gtran3.c (maybe_pad_type): Convert both size and orig_size to
31         sizetype if they have differing modes.
32         * a-misc.c (gnat_tree_code_type): Change from string to char array.
33         (init_lex): Delete realloc calls for tree_code_* globals.  Adjust
34         bcopy call for gnat_tree_code_type change.
35         * a-tree.def: Adjust for tree_code_* type changes.
36
37         * a-misc.c (init_lex): Rename to init_parse.
38
39 diff -c ada/a-gtran3.c /home/brolley/comp/egcs/tmp/ada/a-gtran3.c
40 *** ada/a-gtran3.c      Mon Mar 30 16:29:04 1998
41 --- /home/brolley/comp/egcs/tmp/ada/a-gtran3.c  Thu Apr  2 17:16:15 1998
42 ***************
43 *** 3329,3334 ****
44 --- 3329,3341 ----
45        isn't changing.  Likewise, clear the alignment if it isn't being
46        changed.  Then return if we aren't doing anything.  */
47   
48 +     if (size != 0
49 +       && TYPE_MODE (TREE_TYPE (size)) != TYPE_MODE (TREE_TYPE (orig_size)))
50 +       {
51 +       size = convert (sizetype, size);
52 +       orig_size = convert (sizetype, orig_size);
53 +       }
54 +  
55     if (size != 0
56         && (operand_equal_p (size, orig_size, 0)
57           || (TREE_CODE (orig_size) == INTEGER_CST
58 diff -c ada/a-misc.c /home/brolley/comp/egcs/tmp/ada/a-misc.c
59 *** ada/a-misc.c        Mon Mar 30 16:29:05 1998
60 --- /home/brolley/comp/egcs/tmp/ada/a-misc.c    Thu Apr  2 17:36:19 1998
61 ***************
62 *** 70,77 ****
63   
64   #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
65   
66 ! char *gnat_tree_code_type[] = {
67 !   "x",
68   #include "a-tree.def"
69   };
70   #undef DEFTREECODE
71 --- 70,77 ----
72   
73   #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
74   
75 ! char gnat_tree_code_type[] = {
76 !   'x',
77   #include "a-tree.def"
78   };
79   #undef DEFTREECODE
80 ***************
81 *** 254,259 ****
82 --- 254,268 ----
83   print_lang_statistics ()
84   {}
85   
86 + void
87 + lang_print_xnode (file, node, indent)
88 +      FILE *file;
89 +      tree node;
90 +      int indent;
91 + {
92 + }
93 +  
94
95   /* integrate_decl_tree calls this function, but since we don't use the
96      DECL_LANG_SPECIFIC field, this is a no-op.  */
97   
98 ***************
99 *** 603,622 ****
100      it, but it's where g++ does it.  */
101   
102   void
103 ! init_lex ()
104   {
105     lang_expand_expr = gnat_expand_expr;
106   
107 -   tree_code_type
108 -     = (char **) realloc (tree_code_type,
109 -                        sizeof (char *) * LAST_GNAT_TREE_CODE);
110 -   tree_code_length
111 -     = (int *) realloc (tree_code_length,
112 -                      sizeof (int) * LAST_GNAT_TREE_CODE);
113 -   tree_code_name
114 -     = (char **) realloc (tree_code_name,
115 -                        sizeof (char *) * LAST_GNAT_TREE_CODE);
116
117     bcopy ((char *) gnat_tree_code_type,
118          (char *) (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE),
119          ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE)
120 --- 612,622 ----
121      it, but it's where g++ does it.  */
122   
123   void
124 ! init_parse (filename)
125 !      char *filename;
126   {
127     lang_expand_expr = gnat_expand_expr;
128   
129     bcopy ((char *) gnat_tree_code_type,
130          (char *) (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE),
131          ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE)
132 ***************
133 *** 629,636 ****
134   
135     bcopy ((char *) gnat_tree_code_name,
136          (char *) (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE),
137 !        ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE)
138 !         * sizeof (char *)));
139   }
140   
141   /* Sets some debug flags for the parsed. It does nothing here.  */
142 --- 629,640 ----
143   
144     bcopy ((char *) gnat_tree_code_name,
145          (char *) (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE),
146 !        LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE);
147 ! }
148
149 ! void
150 ! finish_parse ()
151 ! {
152   }
153   
154   /* Sets some debug flags for the parsed. It does nothing here.  */
155 diff -c ada/a-tree.def /home/brolley/comp/egcs/tmp/ada/a-tree.def
156 *** ada/a-tree.def      Mon Mar 30 16:29:09 1998
157 --- /home/brolley/comp/egcs/tmp/ada/a-tree.def  Thu Apr  2 17:20:38 1998
158 ***************
159 *** 31,69 ****
160      The only field used if TREE_COMPLEXITY, which contains the GNAT node
161      number.  */
162   
163 ! DEFTREECODE (TRANSFORM_EXPR, "transform_expr", "e", 0)
164   
165   /* Perform an unchecked conversion between the input and the output. 
166      if TREE_ADDRESSABLE is set, it means this is in an LHS; in that case,
167      we can only use techniques, such as pointer punning, that leave the
168      expression a "name".  */
169   
170 ! DEFTREECODE (UNCHECKED_CONVERT_EXPR, "unchecked_convert_expr", "1", 1)
171   
172   /* A type that is an unconstrained array itself.  This node is never passed
173      to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE
174      is the type of a record containing the template and data.  */
175   
176 ! DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", "t", 0)
177   
178   /* A reference to an unconstrained array.  This node only exists as an
179      intermediate node during the translation of a GNAT tree to a GCC tree;
180      it is never passed to GCC.  The only field used is operand 0, which
181      is the fat pointer object.  */
182   
183 ! DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref", "r", 1)
184   
185   /* An expression that returns an RTL suitable for its type.  Operand 0
186      is an expression to be evaluated for side effects only.  */
187   
188 ! DEFTREECODE (NULL_EXPR, "null_expr", "e", 1)
189   
190   /* An expression that emits a USE for its single operand.  */
191   
192 ! DEFTREECODE (USE_EXPR, "use_expr", "e", 1)
193   
194   /* An expression that is treated as a conversion while generating code, but is
195      used to prevent infinite recursion when conversions of biased types are
196      involved.  */
197   
198 ! DEFTREECODE (GNAT_NOP_EXPR, "gnat_nop_expr", "1", 1)
199 --- 31,69 ----
200      The only field used if TREE_COMPLEXITY, which contains the GNAT node
201      number.  */
202   
203 ! DEFTREECODE (TRANSFORM_EXPR, "transform_expr", 'e', 0)
204   
205   /* Perform an unchecked conversion between the input and the output. 
206      if TREE_ADDRESSABLE is set, it means this is in an LHS; in that case,
207      we can only use techniques, such as pointer punning, that leave the
208      expression a "name".  */
209   
210 ! DEFTREECODE (UNCHECKED_CONVERT_EXPR, "unchecked_convert_expr", '1', 1)
211   
212   /* A type that is an unconstrained array itself.  This node is never passed
213      to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE
214      is the type of a record containing the template and data.  */
215   
216 ! DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", 't', 0)
217   
218   /* A reference to an unconstrained array.  This node only exists as an
219      intermediate node during the translation of a GNAT tree to a GCC tree;
220      it is never passed to GCC.  The only field used is operand 0, which
221      is the fat pointer object.  */
222   
223 ! DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref", 'r', 1)
224   
225   /* An expression that returns an RTL suitable for its type.  Operand 0
226      is an expression to be evaluated for side effects only.  */
227   
228 ! DEFTREECODE (NULL_EXPR, "null_expr", 'e', 1)
229   
230   /* An expression that emits a USE for its single operand.  */
231   
232 ! DEFTREECODE (USE_EXPR, "use_expr", 'e', 1)
233   
234   /* An expression that is treated as a conversion while generating code, but is
235      used to prevent infinite recursion when conversions of biased types are
236      involved.  */
237   
238 ! DEFTREECODE (GNAT_NOP_EXPR, "gnat_nop_expr", '1', 1)
239