OSDN Git Service

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