OSDN Git Service

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