OSDN Git Service

2000-07-21 Alexandre Petit-Bianco <apbianco@cygnus.com>
[pf3gnuchains/gcc-fork.git] / gcc / stor-layout.c
1 /* C-compiler utilities for types and variables storage layout
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998,
3    1999, 2000 Free Software Foundation, Inc.
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22
23 #include "config.h"
24 #include "system.h"
25 #include "tree.h"
26 #include "rtl.h"
27 #include "tm_p.h"
28 #include "flags.h"
29 #include "function.h"
30 #include "expr.h"
31 #include "toplev.h"
32 #include "ggc.h"
33
34 /* Set to one when set_sizetype has been called.  */
35 static int sizetype_set;
36
37 /* List of types created before set_sizetype has been called.  We do not
38    make this a GGC root since we want these nodes to be reclaimed.  */
39 static tree early_type_list;
40
41 /* Data type for the expressions representing sizes of data types.
42    It is the first integer type laid out.  */
43 tree sizetype_tab[(int) TYPE_KIND_LAST];
44
45 /* If nonzero, this is an upper limit on alignment of structure fields.
46    The value is measured in bits.  */
47 unsigned int maximum_field_alignment;
48
49 /* If non-zero, the alignment of a bitstring or (power-)set value, in bits.
50    May be overridden by front-ends.  */
51 unsigned int set_alignment = 0;
52
53 static void finalize_record_size        PARAMS ((record_layout_info));
54 static void finalize_type_size          PARAMS ((tree));
55 static void place_union_field           PARAMS ((record_layout_info, tree));
56 extern void debug_rli                   PARAMS ((record_layout_info));
57 \f
58 /* SAVE_EXPRs for sizes of types and decls, waiting to be expanded.  */
59
60 static tree pending_sizes;
61
62 /* Nonzero means cannot safely call expand_expr now,
63    so put variable sizes onto `pending_sizes' instead.  */
64
65 int immediate_size_expand;
66
67 /* Get a list of all the objects put on the pending sizes list.  */
68
69 tree
70 get_pending_sizes ()
71 {
72   tree chain = pending_sizes;
73   tree t;
74
75   /* Put each SAVE_EXPR into the current function.  */
76   for (t = chain; t; t = TREE_CHAIN (t))
77     SAVE_EXPR_CONTEXT (TREE_VALUE (t)) = current_function_decl;
78
79   pending_sizes = 0;
80   return chain;
81 }
82
83 /* Put a chain of objects into the pending sizes list, which must be
84    empty.  */
85
86 void
87 put_pending_sizes (chain)
88      tree chain;
89 {
90   if (pending_sizes)
91     abort ();
92
93   pending_sizes = chain;
94 }
95
96 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR
97    to serve as the actual size-expression for a type or decl.  */
98
99 tree
100 variable_size (size)
101      tree size;
102 {
103   /* If the language-processor is to take responsibility for variable-sized
104      items (e.g., languages which have elaboration procedures like Ada),
105      just return SIZE unchanged.  Likewise for self-referential sizes.  */
106   if (TREE_CONSTANT (size)
107       || global_bindings_p () < 0 || contains_placeholder_p (size))
108     return size;
109
110   size = save_expr (size);
111
112   /* If an array with a variable number of elements is declared, and
113      the elements require destruction, we will emit a cleanup for the
114      array.  That cleanup is run both on normal exit from the block
115      and in the exception-handler for the block.  Normally, when code
116      is used in both ordinary code and in an exception handler it is
117      `unsaved', i.e., all SAVE_EXPRs are recalculated.  However, we do
118      not wish to do that here; the array-size is the same in both
119      places.  */
120   if (TREE_CODE (size) == SAVE_EXPR)
121     SAVE_EXPR_PERSISTENT_P (size) = 1;
122
123   if (global_bindings_p ())
124     {
125       if (TREE_CONSTANT (size))
126         error ("type size can't be explicitly evaluated");
127       else
128         error ("variable-size type declared outside of any function");
129
130       return size_one_node;
131     }
132
133   if (immediate_size_expand)
134     /* NULL_RTX is not defined; neither is the rtx type. 
135        Also, we would like to pass const0_rtx here, but don't have it.  */
136     expand_expr (size, expand_expr (integer_zero_node, NULL_PTR, VOIDmode, 0),
137                  VOIDmode, 0);
138   else if (cfun != 0 && cfun->x_dont_save_pending_sizes_p)
139     /* The front-end doesn't want us to keep a list of the expressions
140        that determine sizes for variable size objects.  */
141     ;
142   else
143     pending_sizes = tree_cons (NULL_TREE, size, pending_sizes);
144
145   return size;
146 }
147 \f
148 #ifndef MAX_FIXED_MODE_SIZE
149 #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
150 #endif
151
152 /* Return the machine mode to use for a nonscalar of SIZE bits.
153    The mode must be in class CLASS, and have exactly that many bits.
154    If LIMIT is nonzero, modes of wider than MAX_FIXED_MODE_SIZE will not
155    be used.  */
156
157 enum machine_mode
158 mode_for_size (size, class, limit)
159      unsigned int size;
160      enum mode_class class;
161      int limit;
162 {
163   register enum machine_mode mode;
164
165   if (limit && size > MAX_FIXED_MODE_SIZE)
166     return BLKmode;
167
168   /* Get the first mode which has this size, in the specified class.  */
169   for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
170        mode = GET_MODE_WIDER_MODE (mode))
171     if (GET_MODE_BITSIZE (mode) == size)
172       return mode;
173
174   return BLKmode;
175 }
176
177 /* Similar, except passed a tree node.  */
178
179 enum machine_mode
180 mode_for_size_tree (size, class, limit)
181      tree size;
182      enum mode_class class;
183      int limit;
184 {
185   if (TREE_CODE (size) != INTEGER_CST
186       /* What we really want to say here is that the size can fit in a
187          host integer, but we know there's no way we'd find a mode for
188          this many bits, so there's no point in doing the precise test.  */
189       || compare_tree_int (size, 1000) > 0)
190     return BLKmode;
191   else
192     return mode_for_size (TREE_INT_CST_LOW (size), class, limit);
193 }
194
195 /* Similar, but never return BLKmode; return the narrowest mode that
196    contains at least the requested number of bits.  */
197
198 enum machine_mode
199 smallest_mode_for_size (size, class)
200      unsigned int size;
201      enum mode_class class;
202 {
203   register enum machine_mode mode;
204
205   /* Get the first mode which has at least this size, in the
206      specified class.  */
207   for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
208        mode = GET_MODE_WIDER_MODE (mode))
209     if (GET_MODE_BITSIZE (mode) >= size)
210       return mode;
211
212   abort ();
213 }
214
215 /* Find an integer mode of the exact same size, or BLKmode on failure.  */
216
217 enum machine_mode
218 int_mode_for_mode (mode)
219      enum machine_mode mode;
220 {
221   switch (GET_MODE_CLASS (mode))
222     {
223     case MODE_INT:
224     case MODE_PARTIAL_INT:
225       break;
226
227     case MODE_COMPLEX_INT:
228     case MODE_COMPLEX_FLOAT:
229     case MODE_FLOAT:
230       mode = mode_for_size (GET_MODE_BITSIZE (mode), MODE_INT, 0);
231       break;
232
233     case MODE_RANDOM:
234       if (mode == BLKmode)
235         break;
236
237       /* ... fall through ... */
238
239     case MODE_CC:
240     default:
241       abort ();
242     }
243
244   return mode;
245 }
246
247 /* Return the value of VALUE, rounded up to a multiple of DIVISOR.
248    This can only be applied to objects of a sizetype.  */
249
250 tree
251 round_up (value, divisor)
252      tree value;
253      int divisor;
254 {
255   tree arg = size_int_type (divisor, TREE_TYPE (value));
256
257   return size_binop (MULT_EXPR, size_binop (CEIL_DIV_EXPR, value, arg), arg);
258 }
259
260 /* Likewise, but round down.  */
261
262 tree
263 round_down (value, divisor)
264      tree value;
265      int divisor;
266 {
267   tree arg = size_int_type (divisor, TREE_TYPE (value));
268
269   return size_binop (MULT_EXPR, size_binop (FLOOR_DIV_EXPR, value, arg), arg);
270 }
271 \f
272 /* Set the size, mode and alignment of a ..._DECL node.
273    TYPE_DECL does need this for C++.
274    Note that LABEL_DECL and CONST_DECL nodes do not need this,
275    and FUNCTION_DECL nodes have them set up in a special (and simple) way.
276    Don't call layout_decl for them.
277
278    KNOWN_ALIGN is the amount of alignment we can assume this
279    decl has with no special effort.  It is relevant only for FIELD_DECLs
280    and depends on the previous fields.
281    All that matters about KNOWN_ALIGN is which powers of 2 divide it.
282    If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
283    the record will be aligned to suit.  */
284
285 void
286 layout_decl (decl, known_align)
287      tree decl;
288      unsigned int known_align;
289 {
290   register tree type = TREE_TYPE (decl);
291   register enum tree_code code = TREE_CODE (decl);
292
293   if (code == CONST_DECL)
294     return;
295   else if (code != VAR_DECL && code != PARM_DECL && code != RESULT_DECL
296            && code != TYPE_DECL && code != FIELD_DECL)
297     abort ();
298
299   if (type == error_mark_node)
300     type = void_type_node;
301
302   /* Usually the size and mode come from the data type without change,
303      however, the front-end may set the explicit width of the field, so its
304      size may not be the same as the size of its type.  This happens with
305      bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
306      also happens with other fields.  For example, the C++ front-end creates
307      zero-sized fields corresponding to empty base classes, and depends on
308      layout_type setting DECL_FIELD_BITPOS correctly for the field.  Set the
309      size in bytes from the size in bits.  If we have already set the mode,
310      don't set it again since we can be called twice for FIELD_DECLs.  */
311
312   TREE_UNSIGNED (decl) = TREE_UNSIGNED (type);
313   if (DECL_MODE (decl) == VOIDmode)
314     DECL_MODE (decl) = TYPE_MODE (type);
315
316   if (DECL_SIZE (decl) == 0)
317     {
318       DECL_SIZE (decl) = TYPE_SIZE (type);
319       DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type);
320     }
321   else
322     DECL_SIZE_UNIT (decl)
323       = convert (sizetype, size_binop (CEIL_DIV_EXPR, DECL_SIZE (decl),
324                                        bitsize_unit_node));
325
326   /* Force alignment required for the data type.
327      But if the decl itself wants greater alignment, don't override that.
328      Likewise, if the decl is packed, don't override it.  */
329   if (! (code == FIELD_DECL && DECL_BIT_FIELD (decl))
330       && (DECL_ALIGN (decl) == 0
331           || (! (code == FIELD_DECL && DECL_PACKED (decl))
332               && TYPE_ALIGN (type) > DECL_ALIGN (decl))))
333     {         
334       DECL_ALIGN (decl) = TYPE_ALIGN (type);
335       DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type);
336     }
337
338   /* For fields, set the bit field type and update the alignment.  */
339   if (code == FIELD_DECL)
340     {
341       DECL_BIT_FIELD_TYPE (decl) = DECL_BIT_FIELD (decl) ? type : 0;
342       if (maximum_field_alignment != 0)
343         DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
344       else if (DECL_PACKED (decl))
345         {
346           DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
347           DECL_USER_ALIGN (decl) = 0;
348         }
349     }
350
351   /* See if we can use an ordinary integer mode for a bit-field. 
352      Conditions are: a fixed size that is correct for another mode
353      and occupying a complete byte or bytes on proper boundary.  */
354   if (code == FIELD_DECL && DECL_BIT_FIELD (decl)
355       && TYPE_SIZE (type) != 0
356       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
357       && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
358     {
359       register enum machine_mode xmode
360         = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
361
362       if (xmode != BLKmode && known_align >= GET_MODE_ALIGNMENT (xmode))
363         {
364           DECL_ALIGN (decl) = MAX (GET_MODE_ALIGNMENT (xmode),
365                                    DECL_ALIGN (decl));
366           DECL_MODE (decl) = xmode;
367           DECL_BIT_FIELD (decl) = 0;
368         }
369     }
370
371   /* Turn off DECL_BIT_FIELD if we won't need it set.  */
372   if (code == FIELD_DECL && DECL_BIT_FIELD (decl)
373       && TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
374       && known_align >= TYPE_ALIGN (type)
375       && DECL_ALIGN (decl) >= TYPE_ALIGN (type)
376       && DECL_SIZE_UNIT (decl) != 0)
377     DECL_BIT_FIELD (decl) = 0;
378
379   /* Evaluate nonconstant size only once, either now or as soon as safe.  */
380   if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
381     DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
382   if (DECL_SIZE_UNIT (decl) != 0
383       && TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST)
384     DECL_SIZE_UNIT (decl) = variable_size (DECL_SIZE_UNIT (decl));
385
386   /* If requested, warn about definitions of large data objects.  */
387   if (warn_larger_than
388       && (code == VAR_DECL || code == PARM_DECL)
389       && ! DECL_EXTERNAL (decl))
390     {
391       tree size = DECL_SIZE_UNIT (decl);
392
393       if (size != 0 && TREE_CODE (size) == INTEGER_CST
394           && compare_tree_int (size, larger_than_size) > 0)
395         {
396           unsigned int size_as_int = TREE_INT_CST_LOW (size);
397
398           if (compare_tree_int (size, size_as_int) == 0)
399             warning_with_decl (decl, "size of `%s' is %d bytes", size_as_int);
400           else
401             warning_with_decl (decl, "size of `%s' is larger than %d bytes",
402                                larger_than_size);
403         }
404     }
405 }
406 \f
407 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
408    QUAL_UNION_TYPE.  Return a pointer to a struct record_layout_info which
409    is to be passed to all other layout functions for this record.  It is the
410    responsibility of the caller to call `free' for the storage returned. 
411    Note that garbage collection is not permitted until we finish laying
412    out the record.  */
413
414 record_layout_info
415 start_record_layout (t)
416      tree t;
417 {
418   record_layout_info rli 
419     = (record_layout_info) xmalloc (sizeof (struct record_layout_info_s));
420
421   rli->t = t;
422
423   /* If the type has a minimum specified alignment (via an attribute
424      declaration, for example) use it -- otherwise, start with a
425      one-byte alignment.  */
426   rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
427   rli->unpacked_align = rli->record_align;
428   rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
429
430 #ifdef STRUCTURE_SIZE_BOUNDARY
431   /* Packed structures don't need to have minimum size.  */
432   if (! TYPE_PACKED (t))
433     rli->record_align = MAX (rli->record_align, STRUCTURE_SIZE_BOUNDARY);
434 #endif
435
436   rli->offset = size_zero_node;
437   rli->bitpos = bitsize_zero_node;
438   rli->pending_statics = 0;
439   rli->packed_maybe_necessary = 0;
440
441   return rli;
442 }
443
444 /* These four routines perform computations that convert between
445    the offset/bitpos forms and byte and bit offsets.  */
446
447 tree
448 bit_from_pos (offset, bitpos)
449      tree offset, bitpos;
450 {
451   return size_binop (PLUS_EXPR, bitpos,
452                      size_binop (MULT_EXPR, convert (bitsizetype, offset),
453                                  bitsize_unit_node));
454 }
455
456 tree
457 byte_from_pos (offset, bitpos)
458      tree offset, bitpos;
459 {
460   return size_binop (PLUS_EXPR, offset,
461                      convert (sizetype,
462                               size_binop (TRUNC_DIV_EXPR, bitpos,
463                                           bitsize_unit_node)));
464 }
465
466 void
467 pos_from_byte (poffset, pbitpos, off_align, pos)
468      tree *poffset, *pbitpos;
469      unsigned int off_align;
470      tree pos;
471 {
472   *poffset
473     = size_binop (MULT_EXPR,
474                   convert (sizetype,
475                            size_binop (FLOOR_DIV_EXPR, pos,
476                                        bitsize_int (off_align
477                                                     / BITS_PER_UNIT))),
478                   size_int (off_align / BITS_PER_UNIT));
479   *pbitpos = size_binop (MULT_EXPR,
480                          size_binop (FLOOR_MOD_EXPR, pos,
481                                      bitsize_int (off_align / BITS_PER_UNIT)),
482                          bitsize_unit_node);
483 }
484
485 void
486 pos_from_bit (poffset, pbitpos, off_align, pos)
487      tree *poffset, *pbitpos;
488      unsigned int off_align;
489      tree pos;
490 {
491   *poffset = size_binop (MULT_EXPR,
492                          convert (sizetype,
493                                   size_binop (FLOOR_DIV_EXPR, pos,
494                                               bitsize_int (off_align))),
495                          size_int (off_align / BITS_PER_UNIT));
496   *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, bitsize_int (off_align));
497 }
498
499 /* Given a pointer to bit and byte offsets and an offset alignment,
500    normalize the offsets so they are within the alignment.  */
501
502 void
503 normalize_offset (poffset, pbitpos, off_align)
504      tree *poffset, *pbitpos;
505      unsigned int off_align;
506 {
507   /* If the bit position is now larger than it should be, adjust it
508      downwards.  */
509   if (compare_tree_int (*pbitpos, off_align) >= 0)
510     {
511       tree extra_aligns = size_binop (FLOOR_DIV_EXPR, *pbitpos,
512                                       bitsize_int (off_align));
513
514       *poffset
515         = size_binop (PLUS_EXPR, *poffset,
516                       size_binop (MULT_EXPR, convert (sizetype, extra_aligns),
517                                   size_int (off_align / BITS_PER_UNIT)));
518                                 
519       *pbitpos
520         = size_binop (FLOOR_MOD_EXPR, *pbitpos, bitsize_int (off_align));
521     }
522 }
523
524 /* Print debugging information about the information in RLI.  */
525
526 void
527 debug_rli (rli)
528      record_layout_info rli;
529 {
530   print_node_brief (stderr, "type", rli->t, 0);
531   print_node_brief (stderr, "\noffset", rli->offset, 0);
532   print_node_brief (stderr, " bitpos", rli->bitpos, 0);
533
534   fprintf (stderr, "\nrec_align = %u, unpack_align = %u, off_align = %u\n",
535            rli->record_align, rli->unpacked_align, rli->offset_align);
536   if (rli->packed_maybe_necessary)
537     fprintf (stderr, "packed may be necessary\n");
538
539   if (rli->pending_statics)
540     {
541       fprintf (stderr, "pending statics:\n");
542       debug_tree (rli->pending_statics);
543     }
544 }
545
546 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
547    BITPOS if necessary to keep BITPOS below OFFSET_ALIGN.  */
548
549 void
550 normalize_rli (rli)
551      record_layout_info rli;
552 {
553   normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
554 }
555
556 /* Returns the size in bytes allocated so far.  */
557
558 tree
559 rli_size_unit_so_far (rli)
560      record_layout_info rli;
561 {
562   return byte_from_pos (rli->offset, rli->bitpos);
563 }
564
565 /* Returns the size in bits allocated so far.  */
566
567 tree
568 rli_size_so_far (rli)
569      record_layout_info rli;
570 {
571   return bit_from_pos (rli->offset, rli->bitpos);
572 }
573
574 /* Called from place_field to handle unions.  */
575
576 static void
577 place_union_field (rli, field)
578      record_layout_info rli;
579      tree field;
580 {
581   unsigned int desired_align;
582
583   layout_decl (field, 0);
584   
585   DECL_FIELD_OFFSET (field) = size_zero_node;
586   DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
587   DECL_OFFSET_ALIGN (field) = BIGGEST_ALIGNMENT;
588
589   desired_align = DECL_ALIGN (field);
590
591 #ifdef BIGGEST_FIELD_ALIGNMENT
592   /* Some targets (i.e. i386) limit union field alignment
593      to a lower boundary than alignment of variables unless
594      it was overridden by attribute aligned.  */
595   if (! DECL_USER_ALIGN (field))
596     desired_align =
597       MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
598 #endif
599
600   /* Union must be at least as aligned as any field requires.  */
601   rli->record_align = MAX (rli->record_align, desired_align);
602
603 #ifdef PCC_BITFIELD_TYPE_MATTERS
604   /* On the m88000, a bit field of declare type `int' forces the
605      entire union to have `int' alignment.  */
606   if (PCC_BITFIELD_TYPE_MATTERS && DECL_BIT_FIELD_TYPE (field))
607     rli->record_align = MAX (rli->record_align, 
608                              TYPE_ALIGN (TREE_TYPE (field)));
609 #endif
610
611   /* We assume the union's size will be a multiple of a byte so we don't
612      bother with BITPOS.  */
613   if (TREE_CODE (rli->t) == UNION_TYPE)
614     rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
615   else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
616     rli->offset = fold (build (COND_EXPR, sizetype, 
617                                DECL_QUALIFIER (field),
618                                DECL_SIZE_UNIT (field), rli->offset));
619 }
620
621 /* RLI contains information about the layout of a RECORD_TYPE.  FIELD
622    is a FIELD_DECL to be added after those fields already present in
623    T.  (FIELD is not actually added to the TYPE_FIELDS list here;
624    callers that desire that behavior must manually perform that step.)  */
625
626 void
627 place_field (rli, field)
628      record_layout_info rli;
629      tree field;
630 {
631   /* The alignment required for FIELD.  */
632   unsigned int desired_align;
633   /* The alignment FIELD would have if we just dropped it into the
634      record as it presently stands.  */
635   unsigned int known_align;
636   unsigned int actual_align;
637   unsigned int user_align;
638   /* The type of this field.  */
639   tree type = TREE_TYPE (field);
640  
641   /* If FIELD is static, then treat it like a separate variable, not
642      really like a structure field.  If it is a FUNCTION_DECL, it's a
643      method.  In both cases, all we do is lay out the decl, and we do
644      it *after* the record is laid out.  */
645   if (TREE_CODE (field) == VAR_DECL)
646     {
647       rli->pending_statics = tree_cons (NULL_TREE, field,
648                                         rli->pending_statics);
649       return;
650     }
651
652   /* Enumerators and enum types which are local to this class need not
653      be laid out.  Likewise for initialized constant fields.  */
654   else if (TREE_CODE (field) != FIELD_DECL)
655     return;
656
657   /* Unions are laid out very differently than records, so split
658      that code off to another function.  */
659   else if (TREE_CODE (rli->t) != RECORD_TYPE)
660     {
661       place_union_field (rli, field);
662       return;
663     }
664
665   /* Work out the known alignment so far.  Note that A & (-A) is the
666      value of the least-significant bit in A that is one.  */
667   if (! integer_zerop (rli->bitpos))
668     known_align = (tree_low_cst (rli->bitpos, 1)
669                    & - tree_low_cst (rli->bitpos, 1));
670   else if (integer_zerop (rli->offset))
671     known_align = BIGGEST_ALIGNMENT;
672   else if (host_integerp (rli->offset, 1))
673     known_align = (BITS_PER_UNIT
674                    * (tree_low_cst (rli->offset, 1)
675                       & - tree_low_cst (rli->offset, 1)));
676   else
677     known_align = rli->offset_align;
678
679   /* Lay out the field so we know what alignment it needs.  For a
680      packed field, use the alignment as specified, disregarding what
681      the type would want.  */
682   desired_align = DECL_ALIGN (field);
683   user_align = DECL_USER_ALIGN (field);
684   layout_decl (field, known_align);
685   if (! DECL_PACKED (field))
686     {
687       desired_align = DECL_ALIGN (field);
688       user_align = DECL_USER_ALIGN (field);
689     }
690
691 #ifdef BIGGEST_FIELD_ALIGNMENT
692   /* Some targets (i.e. i386, VMS) limit struct field alignment
693      to a lower boundary than alignment of variables unless
694      it was overridden by attribute aligned.  */
695   if (! user_align)
696     desired_align =
697       MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
698 #endif
699 #ifdef ADJUST_FIELD_ALIGN
700   desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
701 #endif
702
703   /* Record must have at least as much alignment as any field.
704      Otherwise, the alignment of the field within the record is
705      meaningless.  */
706 #ifdef PCC_BITFIELD_TYPE_MATTERS
707   if (PCC_BITFIELD_TYPE_MATTERS && type != error_mark_node
708       && DECL_BIT_FIELD_TYPE (field)
709       && ! integer_zerop (TYPE_SIZE (type)))
710     {
711       /* For these machines, a zero-length field does not
712          affect the alignment of the structure as a whole.
713          It does, however, affect the alignment of the next field
714          within the structure.  */
715       if (! integer_zerop (DECL_SIZE (field)))
716         rli->record_align = MAX (rli->record_align, desired_align);
717       else if (! DECL_PACKED (field))
718         desired_align = TYPE_ALIGN (type);
719
720       /* A named bit field of declared type `int'
721          forces the entire structure to have `int' alignment.  */
722       if (DECL_NAME (field) != 0)
723         {
724           unsigned int type_align = TYPE_ALIGN (type);
725
726           if (maximum_field_alignment != 0)
727             type_align = MIN (type_align, maximum_field_alignment);
728           else if (DECL_PACKED (field))
729             type_align = MIN (type_align, BITS_PER_UNIT);
730
731           rli->record_align = MAX (rli->record_align, type_align);
732           if (warn_packed)
733             rli->unpacked_align = MAX (rli->unpacked_align, 
734                                        TYPE_ALIGN (type));
735         }
736     }
737   else
738 #endif
739     {
740       rli->record_align = MAX (rli->record_align, desired_align);
741       rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
742     }
743
744   if (warn_packed && DECL_PACKED (field))
745     {
746       if (known_align > TYPE_ALIGN (type))
747         {
748           if (TYPE_ALIGN (type) > desired_align)
749             {
750               if (STRICT_ALIGNMENT)
751                 warning_with_decl (field, "packed attribute causes inefficient alignment for `%s'");
752               else
753                 warning_with_decl (field, "packed attribute is unnecessary for `%s'");
754             }
755         }
756       else
757         rli->packed_maybe_necessary = 1;
758     }
759
760   /* Does this field automatically have alignment it needs by virtue
761      of the fields that precede it and the record's own alignment?  */
762   if (known_align < desired_align)
763     {
764       /* No, we need to skip space before this field.
765          Bump the cumulative size to multiple of field alignment.  */
766
767       if (warn_padded)
768         warning_with_decl (field, "padding struct to align `%s'");
769
770       /* If the alignment is still within offset_align, just align
771          the bit position.  */
772       if (desired_align < rli->offset_align)
773         rli->bitpos = round_up (rli->bitpos, desired_align);
774       else
775         {
776           /* First adjust OFFSET by the partial bits, then align.  */
777           rli->offset
778             = size_binop (PLUS_EXPR, rli->offset,
779                           convert (sizetype,
780                                    size_binop (CEIL_DIV_EXPR, rli->bitpos,
781                                                bitsize_unit_node)));
782           rli->bitpos = bitsize_zero_node;
783
784           rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
785         }
786
787       if (! TREE_CONSTANT (rli->offset))
788         rli->offset_align = desired_align;
789
790     }
791
792   /* Handle compatibility with PCC.  Note that if the record has any
793      variable-sized fields, we need not worry about compatibility.  */
794 #ifdef PCC_BITFIELD_TYPE_MATTERS
795   if (PCC_BITFIELD_TYPE_MATTERS
796       && TREE_CODE (field) == FIELD_DECL
797       && type != error_mark_node
798       && DECL_BIT_FIELD (field)
799       && ! DECL_PACKED (field)
800       && maximum_field_alignment == 0
801       && ! integer_zerop (DECL_SIZE (field))
802       && host_integerp (DECL_SIZE (field), 1)
803       && host_integerp (rli->offset, 1)
804       && host_integerp (TYPE_SIZE (type), 1))
805     {
806       unsigned int type_align = TYPE_ALIGN (type);
807       tree dsize = DECL_SIZE (field);
808       HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
809       HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
810       HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
811
812       /* A bit field may not span more units of alignment of its type
813          than its type itself.  Advance to next boundary if necessary.  */
814       if ((((offset * BITS_PER_UNIT + bit_offset + field_size +
815              type_align - 1)
816             / type_align)
817            - (offset * BITS_PER_UNIT + bit_offset) / type_align)
818           > tree_low_cst (TYPE_SIZE (type), 1) / type_align)
819         rli->bitpos = round_up (rli->bitpos, type_align);
820     }
821 #endif
822
823 #ifdef BITFIELD_NBYTES_LIMITED
824   if (BITFIELD_NBYTES_LIMITED
825       && TREE_CODE (field) == FIELD_DECL
826       && type != error_mark_node
827       && DECL_BIT_FIELD_TYPE (field)
828       && ! DECL_PACKED (field)
829       && ! integer_zerop (DECL_SIZE (field))
830       && host_integerp (DECL_SIZE (field), 1)
831       && host_integerp (rli->offset, 1)
832       && host_integerp (TYPE_SIZE (type), 1))
833     {
834       unsigned int type_align = TYPE_ALIGN (type);
835       tree dsize = DECL_SIZE (field);
836       HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
837       HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
838       HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
839
840       if (maximum_field_alignment != 0)
841         type_align = MIN (type_align, maximum_field_alignment);
842       /* ??? This test is opposite the test in the containing if
843          statement, so this code is unreachable currently.  */
844       else if (DECL_PACKED (field))
845         type_align = MIN (type_align, BITS_PER_UNIT);
846
847       /* A bit field may not span the unit of alignment of its type.
848          Advance to next boundary if necessary.  */
849       /* ??? This code should match the code above for the
850          PCC_BITFIELD_TYPE_MATTERS case.  */
851       if ((offset * BITS_PER_UNIT + bit_offset) / type_align
852           != ((offset * BITS_PER_UNIT + bit_offset + field_size - 1)
853               / type_align))
854         rli->bitpos = round_up (rli->bitpos, type_align);
855     }
856 #endif
857
858   /* Offset so far becomes the position of this field after normalizing.  */
859   normalize_rli (rli);
860   DECL_FIELD_OFFSET (field) = rli->offset;
861   DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
862   DECL_OFFSET_ALIGN (field) = rli->offset_align;
863
864   /* If this field ended up more aligned than we thought it would be (we
865      approximate this by seeing if its position changed), lay out the field
866      again; perhaps we can use an integral mode for it now.  */
867   if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
868     actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
869                     & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
870   else if (integer_zerop (DECL_FIELD_OFFSET (field)))
871     actual_align = BIGGEST_ALIGNMENT;
872   else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
873     actual_align = (BITS_PER_UNIT
874                    * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
875                       & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
876   else
877     actual_align = DECL_OFFSET_ALIGN (field);
878
879   if (known_align != actual_align)
880     layout_decl (field, actual_align);
881
882   /* Now add size of this field to the size of the record.  If the size is
883      not constant, treat the field as being a multiple of bytes and just
884      adjust the offset, resetting the bit position.  Otherwise, apportion the
885      size amongst the bit position and offset.  First handle the case of an
886      unspecified size, which can happen when we have an invalid nested struct
887      definition, such as struct j { struct j { int i; } }.  The error message
888      is printed in finish_struct.  */
889   if (DECL_SIZE (field) == 0)
890     /* Do nothing.  */;
891   else if (! TREE_CONSTANT (DECL_SIZE_UNIT (field)))
892     {
893       rli->offset
894         = size_binop (PLUS_EXPR, rli->offset,
895                       convert (sizetype,
896                                size_binop (CEIL_DIV_EXPR, rli->bitpos,
897                                            bitsize_unit_node)));
898       rli->offset
899         = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
900       rli->bitpos = bitsize_zero_node;
901       rli->offset_align = MIN (rli->offset_align, DECL_ALIGN (field));
902     }
903   else
904     {
905       rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
906       normalize_rli (rli);
907     }
908 }
909
910 /* Assuming that all the fields have been laid out, this function uses
911    RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
912    inidicated by RLI.  */
913
914 static void
915 finalize_record_size (rli)
916      record_layout_info rli;
917 {
918   tree unpadded_size, unpadded_size_unit;
919
920   /* Now we want just byte and bit offsets, so set the offset alignment
921      to be a byte and then normalize.  */
922   rli->offset_align = BITS_PER_UNIT;
923   normalize_rli (rli);
924
925   /* Determine the desired alignment.  */
926 #ifdef ROUND_TYPE_ALIGN
927   TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
928                                           rli->record_align);
929 #else
930   TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
931 #endif
932   TYPE_USER_ALIGN (rli->t) = 1;
933
934   /* Compute the size so far.  Be sure to allow for extra bits in the
935      size in bytes.  We have guaranteed above that it will be no more
936      than a single byte.  */
937   unpadded_size = rli_size_so_far (rli);
938   unpadded_size_unit = rli_size_unit_so_far (rli);
939   if (! integer_zerop (rli->bitpos))
940     unpadded_size_unit
941       = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
942
943   /* Record the un-rounded size in the binfo node.  But first we check
944      the size of TYPE_BINFO to make sure that BINFO_SIZE is available.  */
945   if (TYPE_BINFO (rli->t) && TREE_VEC_LENGTH (TYPE_BINFO (rli->t)) > 6)
946     {
947       TYPE_BINFO_SIZE (rli->t) = unpadded_size;
948       TYPE_BINFO_SIZE_UNIT (rli->t) = unpadded_size_unit;
949     }
950
951     /* Round the size up to be a multiple of the required alignment */
952 #ifdef ROUND_TYPE_SIZE
953   TYPE_SIZE (rli->t) = ROUND_TYPE_SIZE (rli->t, unpadded_size,
954                                         TYPE_ALIGN (rli->t));
955   TYPE_SIZE_UNIT (rli->t)
956     = ROUND_TYPE_SIZE_UNIT (rli->t, unpadded_size_unit,
957                             TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
958 #else
959   TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
960   TYPE_SIZE_UNIT (rli->t) = round_up (unpadded_size_unit,
961                                       TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
962 #endif
963
964   if (warn_padded && TREE_CONSTANT (unpadded_size)
965       && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
966     warning ("padding struct size to alignment boundary");
967   
968   if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
969       && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
970       && TREE_CONSTANT (unpadded_size))
971     {
972       tree unpacked_size;
973
974 #ifdef ROUND_TYPE_ALIGN
975       rli->unpacked_align
976         = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
977 #else
978       rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
979 #endif
980
981 #ifdef ROUND_TYPE_SIZE
982       unpacked_size = ROUND_TYPE_SIZE (rli->t, TYPE_SIZE (rli->t),
983                                        rli->unpacked_align);
984 #else
985       unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
986 #endif
987
988       if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
989         {
990           TYPE_PACKED (rli->t) = 0;
991
992           if (TYPE_NAME (rli->t))
993             {
994               char *name;
995
996               if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
997                 name = IDENTIFIER_POINTER (TYPE_NAME (rli->t));
998               else
999                 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
1000
1001               if (STRICT_ALIGNMENT)
1002                 warning ("packed attribute causes inefficient alignment for `%s'", name);
1003               else
1004                 warning ("packed attribute is unnecessary for `%s'", name);
1005             }
1006           else
1007             {
1008               if (STRICT_ALIGNMENT)
1009                 warning ("packed attribute causes inefficient alignment");
1010               else
1011                 warning ("packed attribute is unnecessary");
1012             }
1013         }
1014     }
1015 }
1016
1017 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE).  */
1018
1019 void
1020 compute_record_mode (type)
1021      tree type;
1022 {
1023   tree field;
1024   enum machine_mode mode = VOIDmode;
1025
1026   /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1027      However, if possible, we use a mode that fits in a register
1028      instead, in order to allow for better optimization down the
1029      line.  */
1030   TYPE_MODE (type) = BLKmode;
1031
1032   if (! host_integerp (TYPE_SIZE (type), 1))
1033     return;
1034
1035   /* A record which has any BLKmode members must itself be
1036      BLKmode; it can't go in a register.  Unless the member is
1037      BLKmode only because it isn't aligned.  */
1038   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1039     {
1040       unsigned HOST_WIDE_INT bitpos;
1041
1042       if (TREE_CODE (field) != FIELD_DECL)
1043         continue;
1044
1045       if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1046           || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1047               && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field)))
1048           || ! host_integerp (bit_position (field), 1)
1049           || ! host_integerp (DECL_SIZE (field), 1))
1050         return;
1051
1052       bitpos = int_bit_position (field);
1053           
1054       /* Must be BLKmode if any field crosses a word boundary,
1055          since extract_bit_field can't handle that in registers.  */
1056       if (bitpos / BITS_PER_WORD
1057           != ((TREE_INT_CST_LOW (DECL_SIZE (field)) + bitpos - 1)
1058               / BITS_PER_WORD)
1059           /* But there is no problem if the field is entire words.  */
1060           && tree_low_cst (DECL_SIZE (field), 1) % BITS_PER_WORD != 0)
1061         return;
1062
1063       /* If this field is the whole struct, remember its mode so
1064          that, say, we can put a double in a class into a DF
1065          register instead of forcing it to live in the stack.  */
1066       if (field == TYPE_FIELDS (type) && TREE_CHAIN (field) == 0)
1067         mode = DECL_MODE (field);
1068
1069 #ifdef STRUCT_FORCE_BLK
1070       /* With some targets, eg. c4x, it is sub-optimal
1071          to access an aligned BLKmode structure as a scalar.  */
1072       if (mode == VOIDmode && STRUCT_FORCE_BLK (field))
1073         return;
1074 #endif /* STRUCT_FORCE_BLK  */
1075     }
1076
1077   if (mode != VOIDmode)
1078     /* We only have one real field; use its mode.  */
1079     TYPE_MODE (type) = mode;
1080   else
1081     TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1082
1083   /* If structure's known alignment is less than what the scalar
1084      mode would need, and it matters, then stick with BLKmode.  */
1085   if (TYPE_MODE (type) != BLKmode
1086       && STRICT_ALIGNMENT
1087       && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1088             || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1089     {
1090       /* If this is the only reason this type is BLKmode, then
1091          don't force containing types to be BLKmode.  */
1092       TYPE_NO_FORCE_BLK (type) = 1;
1093       TYPE_MODE (type) = BLKmode;
1094     }
1095 }
1096
1097 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1098    out.  */
1099
1100 static void
1101 finalize_type_size (type)
1102      tree type;
1103 {
1104   /* Normally, use the alignment corresponding to the mode chosen.
1105      However, where strict alignment is not required, avoid
1106      over-aligning structures, since most compilers do not do this
1107      alignment.  */
1108
1109   if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1110       && (STRICT_ALIGNMENT
1111           || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1112               && TREE_CODE (type) != QUAL_UNION_TYPE
1113               && TREE_CODE (type) != ARRAY_TYPE)))
1114     {
1115       TYPE_ALIGN (type) = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1116       TYPE_USER_ALIGN (type) = 0;
1117     }
1118
1119   /* Do machine-dependent extra alignment.  */
1120 #ifdef ROUND_TYPE_ALIGN
1121   TYPE_ALIGN (type)
1122     = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1123 #endif
1124
1125   /* If we failed to find a simple way to calculate the unit size
1126      of the type, find it by division.  */
1127   if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1128     /* TYPE_SIZE (type) is computed in bitsizetype.  After the division, the
1129        result will fit in sizetype.  We will get more efficient code using
1130        sizetype, so we force a conversion.  */
1131     TYPE_SIZE_UNIT (type)
1132       = convert (sizetype,
1133                  size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1134                              bitsize_unit_node));
1135
1136   if (TYPE_SIZE (type) != 0)
1137     {
1138 #ifdef ROUND_TYPE_SIZE
1139       TYPE_SIZE (type)
1140         = ROUND_TYPE_SIZE (type, TYPE_SIZE (type), TYPE_ALIGN (type));
1141       TYPE_SIZE_UNIT (type)
1142         = ROUND_TYPE_SIZE_UNIT (type, TYPE_SIZE_UNIT (type),
1143                                 TYPE_ALIGN (type) / BITS_PER_UNIT);
1144 #else
1145       TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1146       TYPE_SIZE_UNIT (type)
1147         = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN (type) / BITS_PER_UNIT);
1148 #endif
1149     }
1150
1151   /* Evaluate nonconstant sizes only once, either now or as soon as safe.  */
1152   if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1153     TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1154   if (TYPE_SIZE_UNIT (type) != 0
1155       && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1156     TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1157
1158   /* Also layout any other variants of the type.  */
1159   if (TYPE_NEXT_VARIANT (type)
1160       || type != TYPE_MAIN_VARIANT (type))
1161     {
1162       tree variant;
1163       /* Record layout info of this variant.  */
1164       tree size = TYPE_SIZE (type);
1165       tree size_unit = TYPE_SIZE_UNIT (type);
1166       unsigned int align = TYPE_ALIGN (type);
1167       unsigned int user_align = TYPE_USER_ALIGN (type);
1168       enum machine_mode mode = TYPE_MODE (type);
1169
1170       /* Copy it into all variants.  */
1171       for (variant = TYPE_MAIN_VARIANT (type);
1172            variant != 0;
1173            variant = TYPE_NEXT_VARIANT (variant))
1174         {
1175           TYPE_SIZE (variant) = size;
1176           TYPE_SIZE_UNIT (variant) = size_unit;
1177           TYPE_ALIGN (variant) = align;
1178           TYPE_USER_ALIGN (variant) = user_align;
1179           TYPE_MODE (variant) = mode;
1180         }
1181     }
1182 }
1183
1184 /* Do all of the work required to layout the type indicated by RLI,
1185    once the fields have been laid out.  This function will call `free'
1186    for RLI.  */
1187
1188 void
1189 finish_record_layout (rli)
1190      record_layout_info rli;
1191 {
1192   /* Compute the final size.  */
1193   finalize_record_size (rli);
1194
1195   /* Compute the TYPE_MODE for the record.  */
1196   compute_record_mode (rli->t);
1197
1198   /* Perform any last tweaks to the TYPE_SIZE, etc.  */
1199   finalize_type_size (rli->t);
1200
1201   /* Lay out any static members.  This is done now because their type
1202      may use the record's type.  */
1203   while (rli->pending_statics)
1204     {
1205       layout_decl (TREE_VALUE (rli->pending_statics), 0);
1206       rli->pending_statics = TREE_CHAIN (rli->pending_statics);
1207     }
1208
1209   /* Clean up.  */
1210   free (rli);
1211 }
1212 \f
1213 /* Calculate the mode, size, and alignment for TYPE.
1214    For an array type, calculate the element separation as well.
1215    Record TYPE on the chain of permanent or temporary types
1216    so that dbxout will find out about it.
1217
1218    TYPE_SIZE of a type is nonzero if the type has been laid out already.
1219    layout_type does nothing on such a type.
1220
1221    If the type is incomplete, its TYPE_SIZE remains zero.  */
1222
1223 void
1224 layout_type (type)
1225      tree type;
1226 {
1227   int old;
1228
1229   if (type == 0)
1230     abort ();
1231
1232   /* Do nothing if type has been laid out before.  */
1233   if (TYPE_SIZE (type))
1234     return;
1235
1236   /* Make sure all nodes we allocate are not momentary; they must last
1237      past the current statement.  */
1238   old = suspend_momentary ();
1239
1240   /* Put all our nodes into the same obstack as the type.  Also,
1241      make expressions saveable (this is a no-op for permanent types).  */
1242
1243   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
1244   saveable_allocation ();
1245
1246   switch (TREE_CODE (type))
1247     {
1248     case LANG_TYPE:
1249       /* This kind of type is the responsibility
1250          of the language-specific code.  */
1251       abort ();
1252
1253     case BOOLEAN_TYPE:  /* Used for Java, Pascal, and Chill. */
1254       if (TYPE_PRECISION (type) == 0)
1255         TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */
1256
1257       /* ... fall through ... */
1258
1259     case INTEGER_TYPE:
1260     case ENUMERAL_TYPE:
1261     case CHAR_TYPE:
1262       if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
1263           && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
1264         TREE_UNSIGNED (type) = 1;
1265
1266       TYPE_MODE (type) = smallest_mode_for_size (TYPE_PRECISION (type),
1267                                                  MODE_INT);
1268       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1269       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1270       break;
1271
1272     case REAL_TYPE:
1273       TYPE_MODE (type) = mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0);
1274       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1275       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1276       break;
1277
1278     case COMPLEX_TYPE:
1279       TREE_UNSIGNED (type) = TREE_UNSIGNED (TREE_TYPE (type));
1280       TYPE_MODE (type)
1281         = mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
1282                          (TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE
1283                           ? MODE_COMPLEX_INT : MODE_COMPLEX_FLOAT),
1284                          0);
1285       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1286       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1287       break;
1288
1289     case VECTOR_TYPE:
1290       {
1291         tree subtype;
1292
1293         subtype = TREE_TYPE (type);
1294         TREE_UNSIGNED (type) = TREE_UNSIGNED (subtype);
1295         TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1296         TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1297       }
1298       break;
1299
1300     case VOID_TYPE:
1301       /* This is an incomplete type and so doesn't have a size.  */
1302       TYPE_ALIGN (type) = 1;
1303       TYPE_USER_ALIGN (type) = 0;
1304       TYPE_MODE (type) = VOIDmode;
1305       break;
1306
1307     case OFFSET_TYPE:
1308       TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1309       TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1310       TYPE_MODE (type) = ptr_mode;
1311       break;
1312
1313     case FUNCTION_TYPE:
1314     case METHOD_TYPE:
1315       TYPE_MODE (type) = mode_for_size (2 * POINTER_SIZE, MODE_INT, 0);
1316       TYPE_SIZE (type) = bitsize_int (2 * POINTER_SIZE);
1317       TYPE_SIZE_UNIT (type) = size_int ((2 * POINTER_SIZE) / BITS_PER_UNIT);
1318       break;
1319
1320     case POINTER_TYPE:
1321     case REFERENCE_TYPE:
1322       TYPE_MODE (type) = ptr_mode;
1323       TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1324       TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1325       TREE_UNSIGNED (type) = 1;
1326       TYPE_PRECISION (type) = POINTER_SIZE;
1327       break;
1328
1329     case ARRAY_TYPE:
1330       {
1331         register tree index = TYPE_DOMAIN (type);
1332         register tree element = TREE_TYPE (type);
1333
1334         build_pointer_type (element);
1335
1336         /* We need to know both bounds in order to compute the size.  */
1337         if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
1338             && TYPE_SIZE (element))
1339           {
1340             tree ub = TYPE_MAX_VALUE (index);
1341             tree lb = TYPE_MIN_VALUE (index);
1342             tree length;
1343             tree element_size;
1344
1345             /* If UB is max (lb - 1, x), remove the MAX_EXPR since the
1346                test for negative below covers it.  */
1347             if (TREE_CODE (ub) == MAX_EXPR
1348                 && TREE_CODE (TREE_OPERAND (ub, 0)) == MINUS_EXPR
1349                 && integer_onep (TREE_OPERAND (TREE_OPERAND (ub, 0), 1))
1350                 && operand_equal_p (TREE_OPERAND (TREE_OPERAND (ub, 0), 0),
1351                                     lb, 0))
1352               ub = TREE_OPERAND (ub, 1);
1353             else if (TREE_CODE (ub) == MAX_EXPR
1354                      && TREE_CODE (TREE_OPERAND (ub, 1)) == MINUS_EXPR
1355                      && integer_onep (TREE_OPERAND (TREE_OPERAND (ub, 1), 1))
1356                      && operand_equal_p (TREE_OPERAND (TREE_OPERAND (ub, 1),
1357                                                        0),
1358                                          lb, 0))
1359               ub = TREE_OPERAND (ub, 0);
1360
1361             /* The initial subtraction should happen in the original type so
1362                that (possible) negative values are handled appropriately.  */
1363             length = size_binop (PLUS_EXPR, size_one_node,
1364                                  convert (sizetype,
1365                                           fold (build (MINUS_EXPR,
1366                                                        TREE_TYPE (lb),
1367                                                        ub, lb))));
1368
1369             /* If neither bound is a constant and sizetype is signed, make
1370                sure the size is never negative.  We should really do this
1371                if *either* bound is non-constant, but this is the best
1372                compromise between C and Ada.  */
1373             if (! TREE_UNSIGNED (sizetype)
1374                 && TREE_CODE (TYPE_MIN_VALUE (index)) != INTEGER_CST
1375                 && TREE_CODE (TYPE_MAX_VALUE (index)) != INTEGER_CST)
1376               length = size_binop (MAX_EXPR, length, size_zero_node);
1377
1378             /* Special handling for arrays of bits (for Chill).  */
1379             element_size = TYPE_SIZE (element);
1380             if (TYPE_PACKED (type) && INTEGRAL_TYPE_P (element))
1381               {
1382                 HOST_WIDE_INT maxvalue
1383                   = TREE_INT_CST_LOW (TYPE_MAX_VALUE (element));
1384                 HOST_WIDE_INT minvalue
1385                   = TREE_INT_CST_LOW (TYPE_MIN_VALUE (element));
1386
1387                 if (maxvalue - minvalue == 1
1388                     && (maxvalue == 1 || maxvalue == 0))
1389                   element_size = integer_one_node;
1390               }
1391
1392             TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
1393                                            convert (bitsizetype, length));
1394
1395             /* If we know the size of the element, calculate the total
1396                size directly, rather than do some division thing below.
1397                This optimization helps Fortran assumed-size arrays
1398                (where the size of the array is determined at runtime)
1399                substantially.
1400                Note that we can't do this in the case where the size of
1401                the elements is one bit since TYPE_SIZE_UNIT cannot be
1402                set correctly in that case.  */
1403             if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
1404               TYPE_SIZE_UNIT (type)
1405                 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
1406           }
1407
1408         /* Now round the alignment and size,
1409            using machine-dependent criteria if any.  */
1410
1411 #ifdef ROUND_TYPE_ALIGN
1412         TYPE_ALIGN (type)
1413           = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
1414 #else
1415         TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1416 #endif
1417
1418 #ifdef ROUND_TYPE_SIZE
1419         if (TYPE_SIZE (type) != 0)
1420           {
1421             tree tmp
1422               = ROUND_TYPE_SIZE (type, TYPE_SIZE (type), TYPE_ALIGN (type));
1423
1424             /* If the rounding changed the size of the type, remove any
1425                pre-calculated TYPE_SIZE_UNIT.  */
1426             if (simple_cst_equal (TYPE_SIZE (type), tmp) != 1)
1427               TYPE_SIZE_UNIT (type) = NULL;
1428
1429             TYPE_SIZE (type) = tmp;
1430           }
1431 #endif
1432
1433         TYPE_MODE (type) = BLKmode;
1434         if (TYPE_SIZE (type) != 0
1435             /* BLKmode elements force BLKmode aggregate;
1436                else extract/store fields may lose.  */
1437             && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
1438                 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
1439           {
1440             TYPE_MODE (type)
1441               = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1442
1443             if (TYPE_MODE (type) != BLKmode
1444                 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
1445                 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type))
1446                 && TYPE_MODE (type) != BLKmode)
1447               {
1448                 TYPE_NO_FORCE_BLK (type) = 1;
1449                 TYPE_MODE (type) = BLKmode;
1450               }
1451           }
1452         break;
1453       }
1454
1455     case RECORD_TYPE:
1456     case UNION_TYPE:
1457     case QUAL_UNION_TYPE:
1458       {
1459         tree field;
1460         record_layout_info rli;
1461
1462         /* Initialize the layout information.  */
1463         rli = start_record_layout (type);
1464
1465         /* If this is a QUAL_UNION_TYPE, we want to process the fields
1466            in the reverse order in building the COND_EXPR that denotes
1467            its size.  We reverse them again later.  */
1468         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1469           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1470
1471         /* Place all the fields.  */
1472         for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1473           place_field (rli, field);
1474
1475         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1476           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1477
1478         /* Finish laying out the record.  */
1479         finish_record_layout (rli);
1480       }
1481       break;
1482
1483     case SET_TYPE:  /* Used by Chill and Pascal. */
1484       if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST
1485           || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST)
1486         abort();
1487       else
1488         {
1489 #ifndef SET_WORD_SIZE
1490 #define SET_WORD_SIZE BITS_PER_WORD
1491 #endif
1492           unsigned int alignment
1493             = set_alignment ? set_alignment : SET_WORD_SIZE;
1494           int size_in_bits
1495             = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
1496                - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1);
1497           int rounded_size
1498             = ((size_in_bits + alignment - 1) / alignment) * alignment;
1499
1500           if (rounded_size > (int) alignment)
1501             TYPE_MODE (type) = BLKmode;
1502           else
1503             TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1);
1504
1505           TYPE_SIZE (type) = bitsize_int (rounded_size);
1506           TYPE_SIZE_UNIT (type) = size_int (rounded_size / BITS_PER_UNIT);
1507           TYPE_ALIGN (type) = alignment;
1508           TYPE_USER_ALIGN (type) = 0;
1509           TYPE_PRECISION (type) = size_in_bits;
1510         }
1511       break;
1512
1513     case FILE_TYPE:
1514       /* The size may vary in different languages, so the language front end
1515          should fill in the size.  */
1516       TYPE_ALIGN (type) = BIGGEST_ALIGNMENT;
1517       TYPE_USER_ALIGN (type) = 0;
1518       TYPE_MODE  (type) = BLKmode;
1519       break;
1520
1521     default:
1522       abort ();
1523     }
1524
1525   /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE.  For
1526      records and unions, finish_record_layout already called this
1527      function.  */
1528   if (TREE_CODE (type) != RECORD_TYPE 
1529       && TREE_CODE (type) != UNION_TYPE
1530       && TREE_CODE (type) != QUAL_UNION_TYPE)
1531     finalize_type_size (type);
1532
1533   pop_obstacks ();
1534   resume_momentary (old);
1535
1536   /* If this type is created before sizetype has been permanently set,
1537      record it so set_sizetype can fix it up.  */
1538   if (! sizetype_set)
1539     early_type_list = tree_cons (NULL_TREE, type, early_type_list);
1540 }
1541 \f
1542 /* Create and return a type for signed integers of PRECISION bits.  */
1543
1544 tree
1545 make_signed_type (precision)
1546      int precision;
1547 {
1548   register tree type = make_node (INTEGER_TYPE);
1549
1550   TYPE_PRECISION (type) = precision;
1551
1552   fixup_signed_type (type);
1553   return type;
1554 }
1555
1556 /* Create and return a type for unsigned integers of PRECISION bits.  */
1557
1558 tree
1559 make_unsigned_type (precision)
1560      int precision;
1561 {
1562   register tree type = make_node (INTEGER_TYPE);
1563
1564   TYPE_PRECISION (type) = precision;
1565
1566   fixup_unsigned_type (type);
1567   return type;
1568 }
1569 \f
1570 /* Initialize sizetype and bitsizetype to a reasonable and temporary
1571    value to enable integer types to be created.  */
1572
1573 void
1574 initialize_sizetypes ()
1575 {
1576   tree t = make_node (INTEGER_TYPE);
1577
1578   /* Set this so we do something reasonable for the build_int_2 calls
1579      below.  */
1580   integer_type_node = t;
1581
1582   TYPE_MODE (t) = SImode;
1583   TYPE_ALIGN (t) = GET_MODE_ALIGNMENT (SImode);
1584   TYPE_USER_ALIGN (t) = 0;
1585   TYPE_SIZE (t) = build_int_2 (GET_MODE_BITSIZE (SImode), 0);
1586   TYPE_SIZE_UNIT (t) = build_int_2 (GET_MODE_SIZE (SImode), 0);
1587   TREE_UNSIGNED (t) = 1;
1588   TYPE_PRECISION (t) = GET_MODE_BITSIZE (SImode);
1589   TYPE_MIN_VALUE (t) = build_int_2 (0, 0);
1590   TYPE_IS_SIZETYPE (t) = 1;
1591
1592   /* 1000 avoids problems with possible overflow and is certainly
1593      larger than any size value we'd want to be storing.  */
1594   TYPE_MAX_VALUE (t) = build_int_2 (1000, 0);
1595
1596   /* These two must be different nodes because of the caching done in
1597      size_int_wide.  */
1598   sizetype = t;
1599   bitsizetype = copy_node (t);
1600   integer_type_node = 0;
1601 }
1602
1603 /* Set sizetype to TYPE, and initialize *sizetype accordingly.
1604    Also update the type of any standard type's sizes made so far.  */
1605
1606 void
1607 set_sizetype (type)
1608      tree type;
1609 {
1610   int oprecision = TYPE_PRECISION (type);
1611   /* The *bitsizetype types use a precision that avoids overflows when
1612      calculating signed sizes / offsets in bits.  However, when
1613      cross-compiling from a 32 bit to a 64 bit host, we are limited to 64 bit
1614      precision.  */
1615   int precision = MIN (oprecision + BITS_PER_UNIT_LOG + 1,
1616                        2 * HOST_BITS_PER_WIDE_INT);
1617   unsigned int i;
1618   tree t;
1619
1620   if (sizetype_set)
1621     abort ();
1622
1623   /* Make copies of nodes since we'll be setting TYPE_IS_SIZETYPE.  */
1624   sizetype = copy_node (type);
1625   TYPE_DOMAIN (sizetype) = type;
1626   TYPE_IS_SIZETYPE (sizetype) = 1;
1627   bitsizetype = make_node (INTEGER_TYPE);
1628   TYPE_NAME (bitsizetype) = TYPE_NAME (type);
1629   TYPE_PRECISION (bitsizetype) = precision;
1630   TYPE_IS_SIZETYPE (bitsizetype) = 1;
1631
1632   if (TREE_UNSIGNED (type))
1633     fixup_unsigned_type (bitsizetype);
1634   else
1635     fixup_signed_type (bitsizetype);
1636
1637   layout_type (bitsizetype);
1638
1639   if (TREE_UNSIGNED (type))
1640     {
1641       usizetype = sizetype;
1642       ubitsizetype = bitsizetype;
1643       ssizetype = copy_node (make_signed_type (oprecision));
1644       sbitsizetype = copy_node (make_signed_type (precision));
1645     }
1646   else
1647     {
1648       ssizetype = sizetype;
1649       sbitsizetype = bitsizetype;
1650       usizetype = copy_node (make_unsigned_type (oprecision));
1651       ubitsizetype = copy_node (make_unsigned_type (precision));
1652     }
1653
1654   TYPE_NAME (bitsizetype) = get_identifier ("bit_size_type");
1655
1656   /* Show is a sizetype, is a main type, and has no pointers to it.  */
1657   for (i = 0; i < sizeof sizetype_tab / sizeof sizetype_tab[0]; i++)
1658     {
1659       TYPE_IS_SIZETYPE (sizetype_tab[i]) = 1;
1660       TYPE_MAIN_VARIANT (sizetype_tab[i]) = sizetype_tab[i];
1661       TYPE_NEXT_VARIANT (sizetype_tab[i]) = 0;
1662       TYPE_POINTER_TO (sizetype_tab[i]) = 0;
1663       TYPE_REFERENCE_TO (sizetype_tab[i]) = 0;
1664     }
1665
1666   ggc_add_tree_root ((tree *) &sizetype_tab,
1667                      sizeof sizetype_tab / sizeof (tree));
1668
1669   /* Go down each of the types we already made and set the proper type
1670      for the sizes in them.  */
1671   for (t = early_type_list; t != 0; t = TREE_CHAIN (t))
1672     {
1673       if (TREE_CODE (TREE_VALUE (t)) != INTEGER_TYPE)
1674         abort ();
1675
1676       TREE_TYPE (TYPE_SIZE (TREE_VALUE (t))) = bitsizetype;
1677       TREE_TYPE (TYPE_SIZE_UNIT (TREE_VALUE (t))) = sizetype;
1678     }
1679
1680   early_type_list = 0;
1681   sizetype_set = 1;
1682 }
1683 \f
1684 /* Set the extreme values of TYPE based on its precision in bits,
1685    then lay it out.  Used when make_signed_type won't do
1686    because the tree code is not INTEGER_TYPE.
1687    E.g. for Pascal, when the -fsigned-char option is given.  */
1688
1689 void
1690 fixup_signed_type (type)
1691      tree type;
1692 {
1693   register int precision = TYPE_PRECISION (type);
1694
1695   TYPE_MIN_VALUE (type)
1696     = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1697                     ? 0 : (HOST_WIDE_INT) (-1) << (precision - 1)),
1698                    (((HOST_WIDE_INT) (-1)
1699                      << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1700                          ? precision - HOST_BITS_PER_WIDE_INT - 1
1701                          : 0))));
1702   TYPE_MAX_VALUE (type)
1703     = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1704                     ? -1 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
1705                    (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1706                     ? (((HOST_WIDE_INT) 1
1707                         << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
1708                     : 0));
1709
1710   TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
1711   TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
1712
1713   /* Lay out the type: set its alignment, size, etc.  */
1714   layout_type (type);
1715 }
1716
1717 /* Set the extreme values of TYPE based on its precision in bits,
1718    then lay it out.  This is used both in `make_unsigned_type'
1719    and for enumeral types.  */
1720
1721 void
1722 fixup_unsigned_type (type)
1723      tree type;
1724 {
1725   register int precision = TYPE_PRECISION (type);
1726
1727   TYPE_MIN_VALUE (type) = build_int_2 (0, 0);
1728   TYPE_MAX_VALUE (type)
1729     = build_int_2 (precision - HOST_BITS_PER_WIDE_INT >= 0
1730                    ? -1 : ((HOST_WIDE_INT) 1 << precision) - 1,
1731                    precision - HOST_BITS_PER_WIDE_INT > 0
1732                    ? ((unsigned HOST_WIDE_INT) ~0
1733                       >> (HOST_BITS_PER_WIDE_INT
1734                           - (precision - HOST_BITS_PER_WIDE_INT)))
1735                    : 0);
1736   TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
1737   TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
1738
1739   /* Lay out the type: set its alignment, size, etc.  */
1740   layout_type (type);
1741 }
1742 \f
1743 /* Find the best machine mode to use when referencing a bit field of length
1744    BITSIZE bits starting at BITPOS.
1745
1746    The underlying object is known to be aligned to a boundary of ALIGN bits.
1747    If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
1748    larger than LARGEST_MODE (usually SImode).
1749
1750    If no mode meets all these conditions, we return VOIDmode.  Otherwise, if
1751    VOLATILEP is true or SLOW_BYTE_ACCESS is false, we return the smallest
1752    mode meeting these conditions.
1753
1754    Otherwise (VOLATILEP is false and SLOW_BYTE_ACCESS is true), we return
1755    the largest mode (but a mode no wider than UNITS_PER_WORD) that meets
1756    all the conditions.  */
1757
1758 enum machine_mode
1759 get_best_mode (bitsize, bitpos, align, largest_mode, volatilep)
1760      int bitsize, bitpos;
1761      unsigned int align;
1762      enum machine_mode largest_mode;
1763      int volatilep;
1764 {
1765   enum machine_mode mode;
1766   unsigned int unit = 0;
1767
1768   /* Find the narrowest integer mode that contains the bit field.  */
1769   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
1770        mode = GET_MODE_WIDER_MODE (mode))
1771     {
1772       unit = GET_MODE_BITSIZE (mode);
1773       if ((bitpos % unit) + bitsize <= unit)
1774         break;
1775     }
1776
1777   if (mode == VOIDmode
1778       /* It is tempting to omit the following line
1779          if STRICT_ALIGNMENT is true.
1780          But that is incorrect, since if the bitfield uses part of 3 bytes
1781          and we use a 4-byte mode, we could get a spurious segv
1782          if the extra 4th byte is past the end of memory.
1783          (Though at least one Unix compiler ignores this problem:
1784          that on the Sequent 386 machine.  */
1785       || MIN (unit, BIGGEST_ALIGNMENT) > align
1786       || (largest_mode != VOIDmode && unit > GET_MODE_BITSIZE (largest_mode)))
1787     return VOIDmode;
1788
1789   if (SLOW_BYTE_ACCESS && ! volatilep)
1790     {
1791       enum machine_mode wide_mode = VOIDmode, tmode;
1792
1793       for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmode != VOIDmode;
1794            tmode = GET_MODE_WIDER_MODE (tmode))
1795         {
1796           unit = GET_MODE_BITSIZE (tmode);
1797           if (bitpos / unit == (bitpos + bitsize - 1) / unit
1798               && unit <= BITS_PER_WORD
1799               && unit <= MIN (align, BIGGEST_ALIGNMENT)
1800               && (largest_mode == VOIDmode
1801                   || unit <= GET_MODE_BITSIZE (largest_mode)))
1802             wide_mode = tmode;
1803         }
1804
1805       if (wide_mode != VOIDmode)
1806         return wide_mode;
1807     }
1808
1809   return mode;
1810 }
1811
1812 /* Return the alignment of MODE. This will be bounded by 1 and
1813    BIGGEST_ALIGNMENT.  */
1814
1815 unsigned int
1816 get_mode_alignment (mode)
1817      enum machine_mode mode;
1818 {
1819   unsigned int alignment = GET_MODE_UNIT_SIZE (mode) * BITS_PER_UNIT;
1820   
1821   /* Extract the LSB of the size.  */
1822   alignment = alignment & -alignment;
1823
1824   alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment));
1825   return alignment;
1826 }
1827
1828 /* This function is run once to initialize stor-layout.c.  */
1829
1830 void
1831 init_stor_layout_once ()
1832 {
1833   ggc_add_tree_root (&pending_sizes, 1);
1834 }