OSDN Git Service

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