OSDN Git Service

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