OSDN Git Service

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