OSDN Git Service

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