OSDN Git Service

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