OSDN Git Service

Fixes for C++ structure layout breakage.
[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   SET_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 (TREE_CODE (field) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK)
642       return;
643
644   /* If FIELD is static, then treat it like a separate variable, not
645      really like a structure field.  If it is a FUNCTION_DECL, it's a
646      method.  In both cases, all we do is lay out the decl, and we do
647      it *after* the record is laid out.  */
648   if (TREE_CODE (field) == VAR_DECL)
649     {
650       rli->pending_statics = tree_cons (NULL_TREE, field,
651                                         rli->pending_statics);
652       return;
653     }
654
655   /* Enumerators and enum types which are local to this class need not
656      be laid out.  Likewise for initialized constant fields.  */
657   else if (TREE_CODE (field) != FIELD_DECL)
658     return;
659
660   /* Unions are laid out very differently than records, so split
661      that code off to another function.  */
662   else if (TREE_CODE (rli->t) != RECORD_TYPE)
663     {
664       place_union_field (rli, field);
665       return;
666     }
667
668   /* Work out the known alignment so far.  Note that A & (-A) is the
669      value of the least-significant bit in A that is one.  */
670   if (! integer_zerop (rli->bitpos))
671     known_align = (tree_low_cst (rli->bitpos, 1)
672                    & - tree_low_cst (rli->bitpos, 1));
673   else if (integer_zerop (rli->offset))
674     known_align = BIGGEST_ALIGNMENT;
675   else if (host_integerp (rli->offset, 1))
676     known_align = (BITS_PER_UNIT
677                    * (tree_low_cst (rli->offset, 1)
678                       & - tree_low_cst (rli->offset, 1)));
679   else
680     known_align = rli->offset_align;
681
682   /* Lay out the field so we know what alignment it needs.  For a
683      packed field, use the alignment as specified, disregarding what
684      the type would want.  */
685   desired_align = DECL_ALIGN (field);
686   user_align = DECL_USER_ALIGN (field);
687   layout_decl (field, known_align);
688   if (! DECL_PACKED (field))
689     {
690       desired_align = DECL_ALIGN (field);
691       user_align = DECL_USER_ALIGN (field);
692     }
693
694 #ifdef BIGGEST_FIELD_ALIGNMENT
695   /* Some targets (i.e. i386, VMS) limit struct field alignment
696      to a lower boundary than alignment of variables unless
697      it was overridden by attribute aligned.  */
698   if (! user_align)
699     desired_align =
700       MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
701 #endif
702 #ifdef ADJUST_FIELD_ALIGN
703   desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
704 #endif
705
706   /* Record must have at least as much alignment as any field.
707      Otherwise, the alignment of the field within the record is
708      meaningless.  */
709 #ifdef PCC_BITFIELD_TYPE_MATTERS
710   if (PCC_BITFIELD_TYPE_MATTERS && type != error_mark_node
711       && DECL_BIT_FIELD_TYPE (field)
712       && ! integer_zerop (TYPE_SIZE (type)))
713     {
714       /* For these machines, a zero-length field does not
715          affect the alignment of the structure as a whole.
716          It does, however, affect the alignment of the next field
717          within the structure.  */
718       if (! integer_zerop (DECL_SIZE (field)))
719         rli->record_align = MAX (rli->record_align, desired_align);
720       else if (! DECL_PACKED (field))
721         desired_align = TYPE_ALIGN (type);
722
723       /* A named bit field of declared type `int'
724          forces the entire structure to have `int' alignment.  */
725       if (DECL_NAME (field) != 0)
726         {
727           unsigned int type_align = TYPE_ALIGN (type);
728
729           if (maximum_field_alignment != 0)
730             type_align = MIN (type_align, maximum_field_alignment);
731           else if (DECL_PACKED (field))
732             type_align = MIN (type_align, BITS_PER_UNIT);
733
734           rli->record_align = MAX (rli->record_align, type_align);
735           if (warn_packed)
736             rli->unpacked_align = MAX (rli->unpacked_align, 
737                                        TYPE_ALIGN (type));
738         }
739     }
740   else
741 #endif
742     {
743       rli->record_align = MAX (rli->record_align, desired_align);
744       rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
745     }
746
747   if (warn_packed && DECL_PACKED (field))
748     {
749       if (known_align > TYPE_ALIGN (type))
750         {
751           if (TYPE_ALIGN (type) > desired_align)
752             {
753               if (STRICT_ALIGNMENT)
754                 warning_with_decl (field, "packed attribute causes inefficient alignment for `%s'");
755               else
756                 warning_with_decl (field, "packed attribute is unnecessary for `%s'");
757             }
758         }
759       else
760         rli->packed_maybe_necessary = 1;
761     }
762
763   /* Does this field automatically have alignment it needs by virtue
764      of the fields that precede it and the record's own alignment?  */
765   if (known_align < desired_align)
766     {
767       /* No, we need to skip space before this field.
768          Bump the cumulative size to multiple of field alignment.  */
769
770       if (warn_padded)
771         warning_with_decl (field, "padding struct to align `%s'");
772
773       /* If the alignment is still within offset_align, just align
774          the bit position.  */
775       if (desired_align < rli->offset_align)
776         rli->bitpos = round_up (rli->bitpos, desired_align);
777       else
778         {
779           /* First adjust OFFSET by the partial bits, then align.  */
780           rli->offset
781             = size_binop (PLUS_EXPR, rli->offset,
782                           convert (sizetype,
783                                    size_binop (CEIL_DIV_EXPR, rli->bitpos,
784                                                bitsize_unit_node)));
785           rli->bitpos = bitsize_zero_node;
786
787           rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
788         }
789
790       if (! TREE_CONSTANT (rli->offset))
791         rli->offset_align = desired_align;
792
793     }
794
795   /* Handle compatibility with PCC.  Note that if the record has any
796      variable-sized fields, we need not worry about compatibility.  */
797 #ifdef PCC_BITFIELD_TYPE_MATTERS
798   if (PCC_BITFIELD_TYPE_MATTERS
799       && TREE_CODE (field) == FIELD_DECL
800       && type != error_mark_node
801       && DECL_BIT_FIELD (field)
802       && ! DECL_PACKED (field)
803       && maximum_field_alignment == 0
804       && ! integer_zerop (DECL_SIZE (field))
805       && host_integerp (DECL_SIZE (field), 1)
806       && host_integerp (rli->offset, 1)
807       && host_integerp (TYPE_SIZE (type), 1))
808     {
809       unsigned int type_align = TYPE_ALIGN (type);
810       tree dsize = DECL_SIZE (field);
811       HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
812       HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
813       HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
814
815       /* A bit field may not span more units of alignment of its type
816          than its type itself.  Advance to next boundary if necessary.  */
817       if ((((offset * BITS_PER_UNIT + bit_offset + field_size +
818              type_align - 1)
819             / type_align)
820            - (offset * BITS_PER_UNIT + bit_offset) / type_align)
821           > tree_low_cst (TYPE_SIZE (type), 1) / type_align)
822         rli->bitpos = round_up (rli->bitpos, type_align);
823     }
824 #endif
825
826 #ifdef BITFIELD_NBYTES_LIMITED
827   if (BITFIELD_NBYTES_LIMITED
828       && TREE_CODE (field) == FIELD_DECL
829       && type != error_mark_node
830       && DECL_BIT_FIELD_TYPE (field)
831       && ! DECL_PACKED (field)
832       && ! integer_zerop (DECL_SIZE (field))
833       && host_integerp (DECL_SIZE (field), 1)
834       && host_integerp (rli->offset, 1)
835       && host_integerp (TYPE_SIZE (type), 1))
836     {
837       unsigned int type_align = TYPE_ALIGN (type);
838       tree dsize = DECL_SIZE (field);
839       HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
840       HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
841       HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
842
843       if (maximum_field_alignment != 0)
844         type_align = MIN (type_align, maximum_field_alignment);
845       /* ??? This test is opposite the test in the containing if
846          statement, so this code is unreachable currently.  */
847       else if (DECL_PACKED (field))
848         type_align = MIN (type_align, BITS_PER_UNIT);
849
850       /* A bit field may not span the unit of alignment of its type.
851          Advance to next boundary if necessary.  */
852       /* ??? This code should match the code above for the
853          PCC_BITFIELD_TYPE_MATTERS case.  */
854       if ((offset * BITS_PER_UNIT + bit_offset) / type_align
855           != ((offset * BITS_PER_UNIT + bit_offset + field_size - 1)
856               / type_align))
857         rli->bitpos = round_up (rli->bitpos, type_align);
858     }
859 #endif
860
861   /* Offset so far becomes the position of this field after normalizing.  */
862   normalize_rli (rli);
863   DECL_FIELD_OFFSET (field) = rli->offset;
864   DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
865   SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
866
867   /* If this field ended up more aligned than we thought it would be (we
868      approximate this by seeing if its position changed), lay out the field
869      again; perhaps we can use an integral mode for it now.  */
870   if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
871     actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
872                     & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
873   else if (integer_zerop (DECL_FIELD_OFFSET (field)))
874     actual_align = BIGGEST_ALIGNMENT;
875   else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
876     actual_align = (BITS_PER_UNIT
877                    * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
878                       & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
879   else
880     actual_align = DECL_OFFSET_ALIGN (field);
881
882   if (known_align != actual_align)
883     layout_decl (field, actual_align);
884
885   /* Now add size of this field to the size of the record.  If the size is
886      not constant, treat the field as being a multiple of bytes and just
887      adjust the offset, resetting the bit position.  Otherwise, apportion the
888      size amongst the bit position and offset.  First handle the case of an
889      unspecified size, which can happen when we have an invalid nested struct
890      definition, such as struct j { struct j { int i; } }.  The error message
891      is printed in finish_struct.  */
892   if (DECL_SIZE (field) == 0)
893     /* Do nothing.  */;
894   else if (! TREE_CONSTANT (DECL_SIZE_UNIT (field)))
895     {
896       rli->offset
897         = size_binop (PLUS_EXPR, rli->offset,
898                       convert (sizetype,
899                                size_binop (CEIL_DIV_EXPR, rli->bitpos,
900                                            bitsize_unit_node)));
901       rli->offset
902         = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
903       rli->bitpos = bitsize_zero_node;
904       rli->offset_align = MIN (rli->offset_align, DECL_ALIGN (field));
905     }
906   else
907     {
908       rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
909       normalize_rli (rli);
910     }
911 }
912
913 /* Assuming that all the fields have been laid out, this function uses
914    RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
915    inidicated by RLI.  */
916
917 static void
918 finalize_record_size (rli)
919      record_layout_info rli;
920 {
921   tree unpadded_size, unpadded_size_unit;
922
923   /* Now we want just byte and bit offsets, so set the offset alignment
924      to be a byte and then normalize.  */
925   rli->offset_align = BITS_PER_UNIT;
926   normalize_rli (rli);
927
928   /* Determine the desired alignment.  */
929 #ifdef ROUND_TYPE_ALIGN
930   TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
931                                           rli->record_align);
932 #else
933   TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
934 #endif
935   TYPE_USER_ALIGN (rli->t) = 1;
936
937   /* Compute the size so far.  Be sure to allow for extra bits in the
938      size in bytes.  We have guaranteed above that it will be no more
939      than a single byte.  */
940   unpadded_size = rli_size_so_far (rli);
941   unpadded_size_unit = rli_size_unit_so_far (rli);
942   if (! integer_zerop (rli->bitpos))
943     unpadded_size_unit
944       = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
945
946   /* Record the un-rounded size in the binfo node.  But first we check
947      the size of TYPE_BINFO to make sure that BINFO_SIZE is available.  */
948   if (TYPE_BINFO (rli->t) && TREE_VEC_LENGTH (TYPE_BINFO (rli->t)) > 6)
949     {
950       TYPE_BINFO_SIZE (rli->t) = unpadded_size;
951       TYPE_BINFO_SIZE_UNIT (rli->t) = unpadded_size_unit;
952     }
953
954     /* Round the size up to be a multiple of the required alignment */
955 #ifdef ROUND_TYPE_SIZE
956   TYPE_SIZE (rli->t) = ROUND_TYPE_SIZE (rli->t, unpadded_size,
957                                         TYPE_ALIGN (rli->t));
958   TYPE_SIZE_UNIT (rli->t)
959     = ROUND_TYPE_SIZE_UNIT (rli->t, unpadded_size_unit,
960                             TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
961 #else
962   TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
963   TYPE_SIZE_UNIT (rli->t) = round_up (unpadded_size_unit,
964                                       TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
965 #endif
966
967   if (warn_padded && TREE_CONSTANT (unpadded_size)
968       && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
969     warning ("padding struct size to alignment boundary");
970   
971   if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
972       && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
973       && TREE_CONSTANT (unpadded_size))
974     {
975       tree unpacked_size;
976
977 #ifdef ROUND_TYPE_ALIGN
978       rli->unpacked_align
979         = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
980 #else
981       rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
982 #endif
983
984 #ifdef ROUND_TYPE_SIZE
985       unpacked_size = ROUND_TYPE_SIZE (rli->t, TYPE_SIZE (rli->t),
986                                        rli->unpacked_align);
987 #else
988       unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
989 #endif
990
991       if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
992         {
993           TYPE_PACKED (rli->t) = 0;
994
995           if (TYPE_NAME (rli->t))
996             {
997               const char *name;
998
999               if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1000                 name = IDENTIFIER_POINTER (TYPE_NAME (rli->t));
1001               else
1002                 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
1003
1004               if (STRICT_ALIGNMENT)
1005                 warning ("packed attribute causes inefficient alignment for `%s'", name);
1006               else
1007                 warning ("packed attribute is unnecessary for `%s'", name);
1008             }
1009           else
1010             {
1011               if (STRICT_ALIGNMENT)
1012                 warning ("packed attribute causes inefficient alignment");
1013               else
1014                 warning ("packed attribute is unnecessary");
1015             }
1016         }
1017     }
1018 }
1019
1020 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE).  */
1021
1022 void
1023 compute_record_mode (type)
1024      tree type;
1025 {
1026   tree field;
1027   enum machine_mode mode = VOIDmode;
1028
1029   /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1030      However, if possible, we use a mode that fits in a register
1031      instead, in order to allow for better optimization down the
1032      line.  */
1033   TYPE_MODE (type) = BLKmode;
1034
1035   if (! host_integerp (TYPE_SIZE (type), 1))
1036     return;
1037
1038   /* A record which has any BLKmode members must itself be
1039      BLKmode; it can't go in a register.  Unless the member is
1040      BLKmode only because it isn't aligned.  */
1041   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1042     {
1043       unsigned HOST_WIDE_INT bitpos;
1044
1045       if (TREE_CODE (field) != FIELD_DECL)
1046         continue;
1047
1048       if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1049           || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1050               && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field)))
1051           || ! host_integerp (bit_position (field), 1)
1052           || ! host_integerp (DECL_SIZE (field), 1))
1053         return;
1054
1055       bitpos = int_bit_position (field);
1056           
1057       /* Must be BLKmode if any field crosses a word boundary,
1058          since extract_bit_field can't handle that in registers.  */
1059       if (bitpos / BITS_PER_WORD
1060           != ((tree_low_cst (DECL_SIZE (field), 1) + bitpos - 1)
1061               / BITS_PER_WORD)
1062           /* But there is no problem if the field is entire words.  */
1063           && tree_low_cst (DECL_SIZE (field), 1) % BITS_PER_WORD != 0)
1064         return;
1065
1066       /* If this field is the whole struct, remember its mode so
1067          that, say, we can put a double in a class into a DF
1068          register instead of forcing it to live in the stack.  */
1069       if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1070         mode = DECL_MODE (field);
1071
1072 #ifdef STRUCT_FORCE_BLK
1073       /* With some targets, eg. c4x, it is sub-optimal
1074          to access an aligned BLKmode structure as a scalar.  */
1075       if (mode == VOIDmode && STRUCT_FORCE_BLK (field))
1076         return;
1077 #endif /* STRUCT_FORCE_BLK  */
1078     }
1079
1080   /* If we only have one real field; use its mode.  This only applies to
1081      RECORD_TYPE.  This does not apply to unions.  */
1082   if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode)
1083     TYPE_MODE (type) = mode;
1084   else
1085     TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1086
1087   /* If structure's known alignment is less than what the scalar
1088      mode would need, and it matters, then stick with BLKmode.  */
1089   if (TYPE_MODE (type) != BLKmode
1090       && STRICT_ALIGNMENT
1091       && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1092             || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1093     {
1094       /* If this is the only reason this type is BLKmode, then
1095          don't force containing types to be BLKmode.  */
1096       TYPE_NO_FORCE_BLK (type) = 1;
1097       TYPE_MODE (type) = BLKmode;
1098     }
1099 }
1100
1101 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1102    out.  */
1103
1104 static void
1105 finalize_type_size (type)
1106      tree type;
1107 {
1108   /* Normally, use the alignment corresponding to the mode chosen.
1109      However, where strict alignment is not required, avoid
1110      over-aligning structures, since most compilers do not do this
1111      alignment.  */
1112
1113   if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1114       && (STRICT_ALIGNMENT
1115           || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1116               && TREE_CODE (type) != QUAL_UNION_TYPE
1117               && TREE_CODE (type) != ARRAY_TYPE)))
1118     {
1119       TYPE_ALIGN (type) = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1120       TYPE_USER_ALIGN (type) = 0;
1121     }
1122
1123   /* Do machine-dependent extra alignment.  */
1124 #ifdef ROUND_TYPE_ALIGN
1125   TYPE_ALIGN (type)
1126     = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1127 #endif
1128
1129   /* If we failed to find a simple way to calculate the unit size
1130      of the type, find it by division.  */
1131   if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1132     /* TYPE_SIZE (type) is computed in bitsizetype.  After the division, the
1133        result will fit in sizetype.  We will get more efficient code using
1134        sizetype, so we force a conversion.  */
1135     TYPE_SIZE_UNIT (type)
1136       = convert (sizetype,
1137                  size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1138                              bitsize_unit_node));
1139
1140   if (TYPE_SIZE (type) != 0)
1141     {
1142 #ifdef ROUND_TYPE_SIZE
1143       TYPE_SIZE (type)
1144         = ROUND_TYPE_SIZE (type, TYPE_SIZE (type), TYPE_ALIGN (type));
1145       TYPE_SIZE_UNIT (type)
1146         = ROUND_TYPE_SIZE_UNIT (type, TYPE_SIZE_UNIT (type),
1147                                 TYPE_ALIGN (type) / BITS_PER_UNIT);
1148 #else
1149       TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1150       TYPE_SIZE_UNIT (type)
1151         = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN (type) / BITS_PER_UNIT);
1152 #endif
1153     }
1154
1155   /* Evaluate nonconstant sizes only once, either now or as soon as safe.  */
1156   if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1157     TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1158   if (TYPE_SIZE_UNIT (type) != 0
1159       && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1160     TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1161
1162   /* Also layout any other variants of the type.  */
1163   if (TYPE_NEXT_VARIANT (type)
1164       || type != TYPE_MAIN_VARIANT (type))
1165     {
1166       tree variant;
1167       /* Record layout info of this variant.  */
1168       tree size = TYPE_SIZE (type);
1169       tree size_unit = TYPE_SIZE_UNIT (type);
1170       unsigned int align = TYPE_ALIGN (type);
1171       unsigned int user_align = TYPE_USER_ALIGN (type);
1172       enum machine_mode mode = TYPE_MODE (type);
1173
1174       /* Copy it into all variants.  */
1175       for (variant = TYPE_MAIN_VARIANT (type);
1176            variant != 0;
1177            variant = TYPE_NEXT_VARIANT (variant))
1178         {
1179           TYPE_SIZE (variant) = size;
1180           TYPE_SIZE_UNIT (variant) = size_unit;
1181           TYPE_ALIGN (variant) = align;
1182           TYPE_USER_ALIGN (variant) = user_align;
1183           TYPE_MODE (variant) = mode;
1184         }
1185     }
1186 }
1187
1188 /* Do all of the work required to layout the type indicated by RLI,
1189    once the fields have been laid out.  This function will call `free'
1190    for RLI.  */
1191
1192 void
1193 finish_record_layout (rli)
1194      record_layout_info rli;
1195 {
1196   /* Compute the final size.  */
1197   finalize_record_size (rli);
1198
1199   /* Compute the TYPE_MODE for the record.  */
1200   compute_record_mode (rli->t);
1201
1202   /* Perform any last tweaks to the TYPE_SIZE, etc.  */
1203   finalize_type_size (rli->t);
1204
1205   /* Lay out any static members.  This is done now because their type
1206      may use the record's type.  */
1207   while (rli->pending_statics)
1208     {
1209       layout_decl (TREE_VALUE (rli->pending_statics), 0);
1210       rli->pending_statics = TREE_CHAIN (rli->pending_statics);
1211     }
1212
1213   /* Clean up.  */
1214   free (rli);
1215 }
1216 \f
1217 /* Calculate the mode, size, and alignment for TYPE.
1218    For an array type, calculate the element separation as well.
1219    Record TYPE on the chain of permanent or temporary types
1220    so that dbxout will find out about it.
1221
1222    TYPE_SIZE of a type is nonzero if the type has been laid out already.
1223    layout_type does nothing on such a type.
1224
1225    If the type is incomplete, its TYPE_SIZE remains zero.  */
1226
1227 void
1228 layout_type (type)
1229      tree type;
1230 {
1231   if (type == 0)
1232     abort ();
1233
1234   /* Do nothing if type has been laid out before.  */
1235   if (TYPE_SIZE (type))
1236     return;
1237
1238   switch (TREE_CODE (type))
1239     {
1240     case LANG_TYPE:
1241       /* This kind of type is the responsibility
1242          of the language-specific code.  */
1243       abort ();
1244
1245     case BOOLEAN_TYPE:  /* Used for Java, Pascal, and Chill. */
1246       if (TYPE_PRECISION (type) == 0)
1247         TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */
1248
1249       /* ... fall through ... */
1250
1251     case INTEGER_TYPE:
1252     case ENUMERAL_TYPE:
1253     case CHAR_TYPE:
1254       if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
1255           && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
1256         TREE_UNSIGNED (type) = 1;
1257
1258       TYPE_MODE (type) = smallest_mode_for_size (TYPE_PRECISION (type),
1259                                                  MODE_INT);
1260       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1261       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1262       break;
1263
1264     case REAL_TYPE:
1265       TYPE_MODE (type) = mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0);
1266       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1267       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1268       break;
1269
1270     case COMPLEX_TYPE:
1271       TREE_UNSIGNED (type) = TREE_UNSIGNED (TREE_TYPE (type));
1272       TYPE_MODE (type)
1273         = mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
1274                          (TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE
1275                           ? MODE_COMPLEX_INT : MODE_COMPLEX_FLOAT),
1276                          0);
1277       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1278       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1279       break;
1280
1281     case VECTOR_TYPE:
1282       {
1283         tree subtype;
1284
1285         subtype = TREE_TYPE (type);
1286         TREE_UNSIGNED (type) = TREE_UNSIGNED (subtype);
1287         TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1288         TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1289       }
1290       break;
1291
1292     case VOID_TYPE:
1293       /* This is an incomplete type and so doesn't have a size.  */
1294       TYPE_ALIGN (type) = 1;
1295       TYPE_USER_ALIGN (type) = 0;
1296       TYPE_MODE (type) = VOIDmode;
1297       break;
1298
1299     case OFFSET_TYPE:
1300       TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1301       TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1302       TYPE_MODE (type) = ptr_mode;
1303       break;
1304
1305     case FUNCTION_TYPE:
1306     case METHOD_TYPE:
1307       TYPE_MODE (type) = mode_for_size (2 * POINTER_SIZE, MODE_INT, 0);
1308       TYPE_SIZE (type) = bitsize_int (2 * POINTER_SIZE);
1309       TYPE_SIZE_UNIT (type) = size_int ((2 * POINTER_SIZE) / BITS_PER_UNIT);
1310       break;
1311
1312     case POINTER_TYPE:
1313     case REFERENCE_TYPE:
1314       TYPE_MODE (type) = ptr_mode;
1315       TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1316       TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1317       TREE_UNSIGNED (type) = 1;
1318       TYPE_PRECISION (type) = POINTER_SIZE;
1319       break;
1320
1321     case ARRAY_TYPE:
1322       {
1323         register tree index = TYPE_DOMAIN (type);
1324         register tree element = TREE_TYPE (type);
1325
1326         build_pointer_type (element);
1327
1328         /* We need to know both bounds in order to compute the size.  */
1329         if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
1330             && TYPE_SIZE (element))
1331           {
1332             tree ub = TYPE_MAX_VALUE (index);
1333             tree lb = TYPE_MIN_VALUE (index);
1334             tree length;
1335             tree element_size;
1336
1337             /* The initial subtraction should happen in the original type so
1338                that (possible) negative values are handled appropriately.  */
1339             length = size_binop (PLUS_EXPR, size_one_node,
1340                                  convert (sizetype,
1341                                           fold (build (MINUS_EXPR,
1342                                                        TREE_TYPE (lb),
1343                                                        ub, lb))));
1344
1345             /* Special handling for arrays of bits (for Chill).  */
1346             element_size = TYPE_SIZE (element);
1347             if (TYPE_PACKED (type) && INTEGRAL_TYPE_P (element)
1348                 && (integer_zerop (TYPE_MAX_VALUE (element))
1349                     || integer_onep (TYPE_MAX_VALUE (element)))
1350                 && host_integerp (TYPE_MIN_VALUE (element), 1))
1351               {
1352                 HOST_WIDE_INT maxvalue
1353                   = tree_low_cst (TYPE_MAX_VALUE (element), 1);
1354                 HOST_WIDE_INT minvalue
1355                   = tree_low_cst (TYPE_MIN_VALUE (element), 1);
1356
1357                 if (maxvalue - minvalue == 1
1358                     && (maxvalue == 1 || maxvalue == 0))
1359                   element_size = integer_one_node;
1360               }
1361
1362             TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
1363                                            convert (bitsizetype, length));
1364
1365             /* If we know the size of the element, calculate the total
1366                size directly, rather than do some division thing below.
1367                This optimization helps Fortran assumed-size arrays
1368                (where the size of the array is determined at runtime)
1369                substantially.
1370                Note that we can't do this in the case where the size of
1371                the elements is one bit since TYPE_SIZE_UNIT cannot be
1372                set correctly in that case.  */
1373             if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
1374               TYPE_SIZE_UNIT (type)
1375                 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
1376           }
1377
1378         /* Now round the alignment and size,
1379            using machine-dependent criteria if any.  */
1380
1381 #ifdef ROUND_TYPE_ALIGN
1382         TYPE_ALIGN (type)
1383           = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
1384 #else
1385         TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1386 #endif
1387
1388 #ifdef ROUND_TYPE_SIZE
1389         if (TYPE_SIZE (type) != 0)
1390           {
1391             tree tmp
1392               = ROUND_TYPE_SIZE (type, TYPE_SIZE (type), TYPE_ALIGN (type));
1393
1394             /* If the rounding changed the size of the type, remove any
1395                pre-calculated TYPE_SIZE_UNIT.  */
1396             if (simple_cst_equal (TYPE_SIZE (type), tmp) != 1)
1397               TYPE_SIZE_UNIT (type) = NULL;
1398
1399             TYPE_SIZE (type) = tmp;
1400           }
1401 #endif
1402
1403         TYPE_MODE (type) = BLKmode;
1404         if (TYPE_SIZE (type) != 0
1405             /* BLKmode elements force BLKmode aggregate;
1406                else extract/store fields may lose.  */
1407             && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
1408                 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
1409           {
1410             TYPE_MODE (type)
1411               = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1412
1413             if (TYPE_MODE (type) != BLKmode
1414                 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
1415                 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type))
1416                 && TYPE_MODE (type) != BLKmode)
1417               {
1418                 TYPE_NO_FORCE_BLK (type) = 1;
1419                 TYPE_MODE (type) = BLKmode;
1420               }
1421           }
1422         break;
1423       }
1424
1425     case RECORD_TYPE:
1426     case UNION_TYPE:
1427     case QUAL_UNION_TYPE:
1428       {
1429         tree field;
1430         record_layout_info rli;
1431
1432         /* Initialize the layout information.  */
1433         rli = start_record_layout (type);
1434
1435         /* If this is a QUAL_UNION_TYPE, we want to process the fields
1436            in the reverse order in building the COND_EXPR that denotes
1437            its size.  We reverse them again later.  */
1438         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1439           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1440
1441         /* Place all the fields.  */
1442         for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1443           place_field (rli, field);
1444
1445         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1446           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1447
1448         /* Finish laying out the record.  */
1449         finish_record_layout (rli);
1450       }
1451       break;
1452
1453     case SET_TYPE:  /* Used by Chill and Pascal. */
1454       if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST
1455           || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST)
1456         abort();
1457       else
1458         {
1459 #ifndef SET_WORD_SIZE
1460 #define SET_WORD_SIZE BITS_PER_WORD
1461 #endif
1462           unsigned int alignment
1463             = set_alignment ? set_alignment : SET_WORD_SIZE;
1464           int size_in_bits
1465             = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
1466                - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1);
1467           int rounded_size
1468             = ((size_in_bits + alignment - 1) / alignment) * alignment;
1469
1470           if (rounded_size > (int) alignment)
1471             TYPE_MODE (type) = BLKmode;
1472           else
1473             TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1);
1474
1475           TYPE_SIZE (type) = bitsize_int (rounded_size);
1476           TYPE_SIZE_UNIT (type) = size_int (rounded_size / BITS_PER_UNIT);
1477           TYPE_ALIGN (type) = alignment;
1478           TYPE_USER_ALIGN (type) = 0;
1479           TYPE_PRECISION (type) = size_in_bits;
1480         }
1481       break;
1482
1483     case FILE_TYPE:
1484       /* The size may vary in different languages, so the language front end
1485          should fill in the size.  */
1486       TYPE_ALIGN (type) = BIGGEST_ALIGNMENT;
1487       TYPE_USER_ALIGN (type) = 0;
1488       TYPE_MODE  (type) = BLKmode;
1489       break;
1490
1491     default:
1492       abort ();
1493     }
1494
1495   /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE.  For
1496      records and unions, finish_record_layout already called this
1497      function.  */
1498   if (TREE_CODE (type) != RECORD_TYPE 
1499       && TREE_CODE (type) != UNION_TYPE
1500       && TREE_CODE (type) != QUAL_UNION_TYPE)
1501     finalize_type_size (type);
1502
1503   /* If this type is created before sizetype has been permanently set,
1504      record it so set_sizetype can fix it up.  */
1505   if (! sizetype_set)
1506     early_type_list = tree_cons (NULL_TREE, type, early_type_list);
1507 }
1508 \f
1509 /* Create and return a type for signed integers of PRECISION bits.  */
1510
1511 tree
1512 make_signed_type (precision)
1513      int precision;
1514 {
1515   register tree type = make_node (INTEGER_TYPE);
1516
1517   TYPE_PRECISION (type) = precision;
1518
1519   fixup_signed_type (type);
1520   return type;
1521 }
1522
1523 /* Create and return a type for unsigned integers of PRECISION bits.  */
1524
1525 tree
1526 make_unsigned_type (precision)
1527      int precision;
1528 {
1529   register tree type = make_node (INTEGER_TYPE);
1530
1531   TYPE_PRECISION (type) = precision;
1532
1533   fixup_unsigned_type (type);
1534   return type;
1535 }
1536 \f
1537 /* Initialize sizetype and bitsizetype to a reasonable and temporary
1538    value to enable integer types to be created.  */
1539
1540 void
1541 initialize_sizetypes ()
1542 {
1543   tree t = make_node (INTEGER_TYPE);
1544
1545   /* Set this so we do something reasonable for the build_int_2 calls
1546      below.  */
1547   integer_type_node = t;
1548
1549   TYPE_MODE (t) = SImode;
1550   TYPE_ALIGN (t) = GET_MODE_ALIGNMENT (SImode);
1551   TYPE_USER_ALIGN (t) = 0;
1552   TYPE_SIZE (t) = build_int_2 (GET_MODE_BITSIZE (SImode), 0);
1553   TYPE_SIZE_UNIT (t) = build_int_2 (GET_MODE_SIZE (SImode), 0);
1554   TREE_UNSIGNED (t) = 1;
1555   TYPE_PRECISION (t) = GET_MODE_BITSIZE (SImode);
1556   TYPE_MIN_VALUE (t) = build_int_2 (0, 0);
1557   TYPE_IS_SIZETYPE (t) = 1;
1558
1559   /* 1000 avoids problems with possible overflow and is certainly
1560      larger than any size value we'd want to be storing.  */
1561   TYPE_MAX_VALUE (t) = build_int_2 (1000, 0);
1562
1563   /* These two must be different nodes because of the caching done in
1564      size_int_wide.  */
1565   sizetype = t;
1566   bitsizetype = copy_node (t);
1567   integer_type_node = 0;
1568 }
1569
1570 /* Set sizetype to TYPE, and initialize *sizetype accordingly.
1571    Also update the type of any standard type's sizes made so far.  */
1572
1573 void
1574 set_sizetype (type)
1575      tree type;
1576 {
1577   int oprecision = TYPE_PRECISION (type);
1578   /* The *bitsizetype types use a precision that avoids overflows when
1579      calculating signed sizes / offsets in bits.  However, when
1580      cross-compiling from a 32 bit to a 64 bit host, we are limited to 64 bit
1581      precision.  */
1582   int precision = MIN (oprecision + BITS_PER_UNIT_LOG + 1,
1583                        2 * HOST_BITS_PER_WIDE_INT);
1584   unsigned int i;
1585   tree t;
1586
1587   if (sizetype_set)
1588     abort ();
1589
1590   /* Make copies of nodes since we'll be setting TYPE_IS_SIZETYPE.  */
1591   sizetype = copy_node (type);
1592   TYPE_DOMAIN (sizetype) = type;
1593   TYPE_IS_SIZETYPE (sizetype) = 1;
1594   bitsizetype = make_node (INTEGER_TYPE);
1595   TYPE_NAME (bitsizetype) = TYPE_NAME (type);
1596   TYPE_PRECISION (bitsizetype) = precision;
1597   TYPE_IS_SIZETYPE (bitsizetype) = 1;
1598
1599   if (TREE_UNSIGNED (type))
1600     fixup_unsigned_type (bitsizetype);
1601   else
1602     fixup_signed_type (bitsizetype);
1603
1604   layout_type (bitsizetype);
1605
1606   if (TREE_UNSIGNED (type))
1607     {
1608       usizetype = sizetype;
1609       ubitsizetype = bitsizetype;
1610       ssizetype = copy_node (make_signed_type (oprecision));
1611       sbitsizetype = copy_node (make_signed_type (precision));
1612     }
1613   else
1614     {
1615       ssizetype = sizetype;
1616       sbitsizetype = bitsizetype;
1617       usizetype = copy_node (make_unsigned_type (oprecision));
1618       ubitsizetype = copy_node (make_unsigned_type (precision));
1619     }
1620
1621   TYPE_NAME (bitsizetype) = get_identifier ("bit_size_type");
1622
1623   /* Show is a sizetype, is a main type, and has no pointers to it.  */
1624   for (i = 0; i < ARRAY_SIZE (sizetype_tab); i++)
1625     {
1626       TYPE_IS_SIZETYPE (sizetype_tab[i]) = 1;
1627       TYPE_MAIN_VARIANT (sizetype_tab[i]) = sizetype_tab[i];
1628       TYPE_NEXT_VARIANT (sizetype_tab[i]) = 0;
1629       TYPE_POINTER_TO (sizetype_tab[i]) = 0;
1630       TYPE_REFERENCE_TO (sizetype_tab[i]) = 0;
1631     }
1632
1633   ggc_add_tree_root ((tree *) &sizetype_tab,
1634                      sizeof sizetype_tab / sizeof (tree));
1635
1636   /* Go down each of the types we already made and set the proper type
1637      for the sizes in them.  */
1638   for (t = early_type_list; t != 0; t = TREE_CHAIN (t))
1639     {
1640       if (TREE_CODE (TREE_VALUE (t)) != INTEGER_TYPE)
1641         abort ();
1642
1643       TREE_TYPE (TYPE_SIZE (TREE_VALUE (t))) = bitsizetype;
1644       TREE_TYPE (TYPE_SIZE_UNIT (TREE_VALUE (t))) = sizetype;
1645     }
1646
1647   early_type_list = 0;
1648   sizetype_set = 1;
1649 }
1650 \f
1651 /* Set the extreme values of TYPE based on its precision in bits,
1652    then lay it out.  Used when make_signed_type won't do
1653    because the tree code is not INTEGER_TYPE.
1654    E.g. for Pascal, when the -fsigned-char option is given.  */
1655
1656 void
1657 fixup_signed_type (type)
1658      tree type;
1659 {
1660   register int precision = TYPE_PRECISION (type);
1661
1662   TYPE_MIN_VALUE (type)
1663     = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1664                     ? 0 : (HOST_WIDE_INT) (-1) << (precision - 1)),
1665                    (((HOST_WIDE_INT) (-1)
1666                      << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1667                          ? precision - HOST_BITS_PER_WIDE_INT - 1
1668                          : 0))));
1669   TYPE_MAX_VALUE (type)
1670     = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1671                     ? -1 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
1672                    (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1673                     ? (((HOST_WIDE_INT) 1
1674                         << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
1675                     : 0));
1676
1677   TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
1678   TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
1679
1680   /* Lay out the type: set its alignment, size, etc.  */
1681   layout_type (type);
1682 }
1683
1684 /* Set the extreme values of TYPE based on its precision in bits,
1685    then lay it out.  This is used both in `make_unsigned_type'
1686    and for enumeral types.  */
1687
1688 void
1689 fixup_unsigned_type (type)
1690      tree type;
1691 {
1692   register int precision = TYPE_PRECISION (type);
1693
1694   TYPE_MIN_VALUE (type) = build_int_2 (0, 0);
1695   TYPE_MAX_VALUE (type)
1696     = build_int_2 (precision - HOST_BITS_PER_WIDE_INT >= 0
1697                    ? -1 : ((HOST_WIDE_INT) 1 << precision) - 1,
1698                    precision - HOST_BITS_PER_WIDE_INT > 0
1699                    ? ((unsigned HOST_WIDE_INT) ~0
1700                       >> (HOST_BITS_PER_WIDE_INT
1701                           - (precision - HOST_BITS_PER_WIDE_INT)))
1702                    : 0);
1703   TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
1704   TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
1705
1706   /* Lay out the type: set its alignment, size, etc.  */
1707   layout_type (type);
1708 }
1709 \f
1710 /* Find the best machine mode to use when referencing a bit field of length
1711    BITSIZE bits starting at BITPOS.
1712
1713    The underlying object is known to be aligned to a boundary of ALIGN bits.
1714    If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
1715    larger than LARGEST_MODE (usually SImode).
1716
1717    If no mode meets all these conditions, we return VOIDmode.  Otherwise, if
1718    VOLATILEP is true or SLOW_BYTE_ACCESS is false, we return the smallest
1719    mode meeting these conditions.
1720
1721    Otherwise (VOLATILEP is false and SLOW_BYTE_ACCESS is true), we return
1722    the largest mode (but a mode no wider than UNITS_PER_WORD) that meets
1723    all the conditions.  */
1724
1725 enum machine_mode
1726 get_best_mode (bitsize, bitpos, align, largest_mode, volatilep)
1727      int bitsize, bitpos;
1728      unsigned int align;
1729      enum machine_mode largest_mode;
1730      int volatilep;
1731 {
1732   enum machine_mode mode;
1733   unsigned int unit = 0;
1734
1735   /* Find the narrowest integer mode that contains the bit field.  */
1736   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
1737        mode = GET_MODE_WIDER_MODE (mode))
1738     {
1739       unit = GET_MODE_BITSIZE (mode);
1740       if ((bitpos % unit) + bitsize <= unit)
1741         break;
1742     }
1743
1744   if (mode == VOIDmode
1745       /* It is tempting to omit the following line
1746          if STRICT_ALIGNMENT is true.
1747          But that is incorrect, since if the bitfield uses part of 3 bytes
1748          and we use a 4-byte mode, we could get a spurious segv
1749          if the extra 4th byte is past the end of memory.
1750          (Though at least one Unix compiler ignores this problem:
1751          that on the Sequent 386 machine.  */
1752       || MIN (unit, BIGGEST_ALIGNMENT) > align
1753       || (largest_mode != VOIDmode && unit > GET_MODE_BITSIZE (largest_mode)))
1754     return VOIDmode;
1755
1756   if (SLOW_BYTE_ACCESS && ! volatilep)
1757     {
1758       enum machine_mode wide_mode = VOIDmode, tmode;
1759
1760       for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmode != VOIDmode;
1761            tmode = GET_MODE_WIDER_MODE (tmode))
1762         {
1763           unit = GET_MODE_BITSIZE (tmode);
1764           if (bitpos / unit == (bitpos + bitsize - 1) / unit
1765               && unit <= BITS_PER_WORD
1766               && unit <= MIN (align, BIGGEST_ALIGNMENT)
1767               && (largest_mode == VOIDmode
1768                   || unit <= GET_MODE_BITSIZE (largest_mode)))
1769             wide_mode = tmode;
1770         }
1771
1772       if (wide_mode != VOIDmode)
1773         return wide_mode;
1774     }
1775
1776   return mode;
1777 }
1778
1779 /* Return the alignment of MODE. This will be bounded by 1 and
1780    BIGGEST_ALIGNMENT.  */
1781
1782 unsigned int
1783 get_mode_alignment (mode)
1784      enum machine_mode mode;
1785 {
1786   unsigned int alignment = GET_MODE_UNIT_SIZE (mode) * BITS_PER_UNIT;
1787   
1788   /* Extract the LSB of the size.  */
1789   alignment = alignment & -alignment;
1790
1791   alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment));
1792   return alignment;
1793 }
1794
1795 /* This function is run once to initialize stor-layout.c.  */
1796
1797 void
1798 init_stor_layout_once ()
1799 {
1800   ggc_add_tree_root (&pending_sizes, 1);
1801 }