OSDN Git Service

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