OSDN Git Service

* targhooks.c: New file.
[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           rli->offset_align = tree_low_cst (TYPE_SIZE (type), 0);
1097           normalize_rli (rli);
1098         }
1099
1100       /* If we're starting a new run of same size type bitfields
1101          (or a run of non-bitfields), set up the "first of the run"
1102          fields.
1103
1104          That is, if the current field is not a bitfield, or if there
1105          was a prior bitfield the type sizes differ, or if there wasn't
1106          a prior bitfield the size of the current field is nonzero.
1107
1108          Note: we must be sure to test ONLY the type size if there was
1109          a prior bitfield and ONLY for the current field being zero if
1110          there wasn't.  */
1111
1112       if (!DECL_BIT_FIELD_TYPE (field)
1113           || ( prev_saved != NULL
1114                ? !simple_cst_equal (TYPE_SIZE (type),
1115                                     TYPE_SIZE (TREE_TYPE (prev_saved)))
1116               : !integer_zerop (DECL_SIZE (field)) ))
1117         {
1118           /* Never smaller than a byte for compatibility.  */
1119           unsigned int type_align = BITS_PER_UNIT;
1120
1121           /* (When not a bitfield), we could be seeing a flex array (with
1122              no DECL_SIZE).  Since we won't be using remaining_in_alignment
1123              until we see a bitfield (and come by here again) we just skip
1124              calculating it.  */
1125           if (DECL_SIZE (field) != NULL
1126               && host_integerp (TYPE_SIZE (TREE_TYPE (field)), 0)
1127               && host_integerp (DECL_SIZE (field), 0))
1128             rli->remaining_in_alignment
1129               = tree_low_cst (TYPE_SIZE (TREE_TYPE(field)), 0)
1130                 - tree_low_cst (DECL_SIZE (field), 0);
1131
1132           /* Now align (conventionally) for the new type.  */
1133           if (!DECL_PACKED(field))
1134             type_align = MAX(TYPE_ALIGN (type), type_align);
1135
1136           if (prev_saved
1137               && DECL_BIT_FIELD_TYPE (prev_saved)
1138               /* If the previous bit-field is zero-sized, we've already
1139                  accounted for its alignment needs (or ignored it, if
1140                  appropriate) while placing it.  */
1141               && ! integer_zerop (DECL_SIZE (prev_saved)))
1142             type_align = MAX (type_align,
1143                               TYPE_ALIGN (TREE_TYPE (prev_saved)));
1144
1145           if (maximum_field_alignment != 0)
1146             type_align = MIN (type_align, maximum_field_alignment);
1147
1148           rli->bitpos = round_up (rli->bitpos, type_align);
1149
1150           /* If we really aligned, don't allow subsequent bitfields
1151              to undo that.  */
1152           rli->prev_field = NULL;
1153         }
1154     }
1155
1156   /* Offset so far becomes the position of this field after normalizing.  */
1157   normalize_rli (rli);
1158   DECL_FIELD_OFFSET (field) = rli->offset;
1159   DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1160   SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1161
1162   /* If this field ended up more aligned than we thought it would be (we
1163      approximate this by seeing if its position changed), lay out the field
1164      again; perhaps we can use an integral mode for it now.  */
1165   if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
1166     actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1167                     & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
1168   else if (integer_zerop (DECL_FIELD_OFFSET (field)))
1169     actual_align = BIGGEST_ALIGNMENT;
1170   else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
1171     actual_align = (BITS_PER_UNIT
1172                    * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1173                       & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
1174   else
1175     actual_align = DECL_OFFSET_ALIGN (field);
1176
1177   if (known_align != actual_align)
1178     layout_decl (field, actual_align);
1179
1180   /* Only the MS bitfields use this.  */
1181   if (rli->prev_field == NULL && DECL_BIT_FIELD_TYPE(field))
1182       rli->prev_field = field;
1183
1184   /* Now add size of this field to the size of the record.  If the size is
1185      not constant, treat the field as being a multiple of bytes and just
1186      adjust the offset, resetting the bit position.  Otherwise, apportion the
1187      size amongst the bit position and offset.  First handle the case of an
1188      unspecified size, which can happen when we have an invalid nested struct
1189      definition, such as struct j { struct j { int i; } }.  The error message
1190      is printed in finish_struct.  */
1191   if (DECL_SIZE (field) == 0)
1192     /* Do nothing.  */;
1193   else if (TREE_CODE (DECL_SIZE_UNIT (field)) != INTEGER_CST
1194            || TREE_CONSTANT_OVERFLOW (DECL_SIZE_UNIT (field)))
1195     {
1196       rli->offset
1197         = size_binop (PLUS_EXPR, rli->offset,
1198                       convert (sizetype,
1199                                size_binop (CEIL_DIV_EXPR, rli->bitpos,
1200                                            bitsize_unit_node)));
1201       rli->offset
1202         = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1203       rli->bitpos = bitsize_zero_node;
1204       rli->offset_align = MIN (rli->offset_align, desired_align);
1205     }
1206   else
1207     {
1208       rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1209       normalize_rli (rli);
1210     }
1211 }
1212
1213 /* Assuming that all the fields have been laid out, this function uses
1214    RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1215    indicated by RLI.  */
1216
1217 static void
1218 finalize_record_size (record_layout_info rli)
1219 {
1220   tree unpadded_size, unpadded_size_unit;
1221
1222   /* Now we want just byte and bit offsets, so set the offset alignment
1223      to be a byte and then normalize.  */
1224   rli->offset_align = BITS_PER_UNIT;
1225   normalize_rli (rli);
1226
1227   /* Determine the desired alignment.  */
1228 #ifdef ROUND_TYPE_ALIGN
1229   TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
1230                                           rli->record_align);
1231 #else
1232   TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
1233 #endif
1234
1235   /* Compute the size so far.  Be sure to allow for extra bits in the
1236      size in bytes.  We have guaranteed above that it will be no more
1237      than a single byte.  */
1238   unpadded_size = rli_size_so_far (rli);
1239   unpadded_size_unit = rli_size_unit_so_far (rli);
1240   if (! integer_zerop (rli->bitpos))
1241     unpadded_size_unit
1242       = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
1243
1244   /* Round the size up to be a multiple of the required alignment.  */
1245   TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
1246   TYPE_SIZE_UNIT (rli->t) = round_up (unpadded_size_unit,
1247                                       TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
1248
1249   if (warn_padded && TREE_CONSTANT (unpadded_size)
1250       && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
1251     warning ("padding struct size to alignment boundary");
1252
1253   if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1254       && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1255       && TREE_CONSTANT (unpadded_size))
1256     {
1257       tree unpacked_size;
1258
1259 #ifdef ROUND_TYPE_ALIGN
1260       rli->unpacked_align
1261         = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
1262 #else
1263       rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
1264 #endif
1265
1266       unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
1267       if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
1268         {
1269           TYPE_PACKED (rli->t) = 0;
1270
1271           if (TYPE_NAME (rli->t))
1272             {
1273               const char *name;
1274
1275               if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1276                 name = IDENTIFIER_POINTER (TYPE_NAME (rli->t));
1277               else
1278                 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
1279
1280               if (STRICT_ALIGNMENT)
1281                 warning ("packed attribute causes inefficient alignment for `%s'", name);
1282               else
1283                 warning ("packed attribute is unnecessary for `%s'", name);
1284             }
1285           else
1286             {
1287               if (STRICT_ALIGNMENT)
1288                 warning ("packed attribute causes inefficient alignment");
1289               else
1290                 warning ("packed attribute is unnecessary");
1291             }
1292         }
1293     }
1294 }
1295
1296 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE).  */
1297
1298 void
1299 compute_record_mode (tree type)
1300 {
1301   tree field;
1302   enum machine_mode mode = VOIDmode;
1303
1304   /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1305      However, if possible, we use a mode that fits in a register
1306      instead, in order to allow for better optimization down the
1307      line.  */
1308   TYPE_MODE (type) = BLKmode;
1309
1310   if (! host_integerp (TYPE_SIZE (type), 1))
1311     return;
1312
1313   /* A record which has any BLKmode members must itself be
1314      BLKmode; it can't go in a register.  Unless the member is
1315      BLKmode only because it isn't aligned.  */
1316   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1317     {
1318       if (TREE_CODE (field) != FIELD_DECL)
1319         continue;
1320
1321       if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1322           || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1323               && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field)))
1324           || ! host_integerp (bit_position (field), 1)
1325           || DECL_SIZE (field) == 0
1326           || ! host_integerp (DECL_SIZE (field), 1))
1327         return;
1328
1329       /* If this field is the whole struct, remember its mode so
1330          that, say, we can put a double in a class into a DF
1331          register instead of forcing it to live in the stack.  */
1332       if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1333         mode = DECL_MODE (field);
1334
1335 #ifdef MEMBER_TYPE_FORCES_BLK
1336       /* With some targets, eg. c4x, it is sub-optimal
1337          to access an aligned BLKmode structure as a scalar.  */
1338
1339       if (MEMBER_TYPE_FORCES_BLK (field, mode))
1340         return;
1341 #endif /* MEMBER_TYPE_FORCES_BLK  */
1342     }
1343
1344   /* If we only have one real field; use its mode.  This only applies to
1345      RECORD_TYPE.  This does not apply to unions.  */
1346   if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode)
1347     TYPE_MODE (type) = mode;
1348   else
1349     TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1350
1351   /* If structure's known alignment is less than what the scalar
1352      mode would need, and it matters, then stick with BLKmode.  */
1353   if (TYPE_MODE (type) != BLKmode
1354       && STRICT_ALIGNMENT
1355       && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1356             || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1357     {
1358       /* If this is the only reason this type is BLKmode, then
1359          don't force containing types to be BLKmode.  */
1360       TYPE_NO_FORCE_BLK (type) = 1;
1361       TYPE_MODE (type) = BLKmode;
1362     }
1363 }
1364
1365 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1366    out.  */
1367
1368 static void
1369 finalize_type_size (tree type)
1370 {
1371   /* Normally, use the alignment corresponding to the mode chosen.
1372      However, where strict alignment is not required, avoid
1373      over-aligning structures, since most compilers do not do this
1374      alignment.  */
1375
1376   if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1377       && (STRICT_ALIGNMENT
1378           || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1379               && TREE_CODE (type) != QUAL_UNION_TYPE
1380               && TREE_CODE (type) != ARRAY_TYPE)))
1381     {
1382       TYPE_ALIGN (type) = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1383       TYPE_USER_ALIGN (type) = 0;
1384     }
1385
1386   /* Do machine-dependent extra alignment.  */
1387 #ifdef ROUND_TYPE_ALIGN
1388   TYPE_ALIGN (type)
1389     = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1390 #endif
1391
1392   /* If we failed to find a simple way to calculate the unit size
1393      of the type, find it by division.  */
1394   if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1395     /* TYPE_SIZE (type) is computed in bitsizetype.  After the division, the
1396        result will fit in sizetype.  We will get more efficient code using
1397        sizetype, so we force a conversion.  */
1398     TYPE_SIZE_UNIT (type)
1399       = convert (sizetype,
1400                  size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1401                              bitsize_unit_node));
1402
1403   if (TYPE_SIZE (type) != 0)
1404     {
1405       TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1406       TYPE_SIZE_UNIT (type)
1407         = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN (type) / BITS_PER_UNIT);
1408     }
1409
1410   /* Evaluate nonconstant sizes only once, either now or as soon as safe.  */
1411   if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1412     TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1413   if (TYPE_SIZE_UNIT (type) != 0
1414       && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1415     TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1416
1417   /* Also layout any other variants of the type.  */
1418   if (TYPE_NEXT_VARIANT (type)
1419       || type != TYPE_MAIN_VARIANT (type))
1420     {
1421       tree variant;
1422       /* Record layout info of this variant.  */
1423       tree size = TYPE_SIZE (type);
1424       tree size_unit = TYPE_SIZE_UNIT (type);
1425       unsigned int align = TYPE_ALIGN (type);
1426       unsigned int user_align = TYPE_USER_ALIGN (type);
1427       enum machine_mode mode = TYPE_MODE (type);
1428
1429       /* Copy it into all variants.  */
1430       for (variant = TYPE_MAIN_VARIANT (type);
1431            variant != 0;
1432            variant = TYPE_NEXT_VARIANT (variant))
1433         {
1434           TYPE_SIZE (variant) = size;
1435           TYPE_SIZE_UNIT (variant) = size_unit;
1436           TYPE_ALIGN (variant) = align;
1437           TYPE_USER_ALIGN (variant) = user_align;
1438           TYPE_MODE (variant) = mode;
1439         }
1440     }
1441 }
1442
1443 /* Do all of the work required to layout the type indicated by RLI,
1444    once the fields have been laid out.  This function will call `free'
1445    for RLI, unless FREE_P is false.  Passing a value other than false
1446    for FREE_P is bad practice; this option only exists to support the
1447    G++ 3.2 ABI.  */
1448
1449 void
1450 finish_record_layout (record_layout_info rli, int free_p)
1451 {
1452   /* Compute the final size.  */
1453   finalize_record_size (rli);
1454
1455   /* Compute the TYPE_MODE for the record.  */
1456   compute_record_mode (rli->t);
1457
1458   /* Perform any last tweaks to the TYPE_SIZE, etc.  */
1459   finalize_type_size (rli->t);
1460
1461   /* Lay out any static members.  This is done now because their type
1462      may use the record's type.  */
1463   while (rli->pending_statics)
1464     {
1465       layout_decl (TREE_VALUE (rli->pending_statics), 0);
1466       rli->pending_statics = TREE_CHAIN (rli->pending_statics);
1467     }
1468
1469   /* Clean up.  */
1470   if (free_p)
1471     free (rli);
1472 }
1473 \f
1474
1475 /* Finish processing a builtin RECORD_TYPE type TYPE.  It's name is
1476    NAME, its fields are chained in reverse on FIELDS.
1477
1478    If ALIGN_TYPE is non-null, it is given the same alignment as
1479    ALIGN_TYPE.  */
1480
1481 void
1482 finish_builtin_struct (tree type, const char *name, tree fields,
1483                        tree align_type)
1484 {
1485   tree tail, next;
1486
1487   for (tail = NULL_TREE; fields; tail = fields, fields = next)
1488     {
1489       DECL_FIELD_CONTEXT (fields) = type;
1490       next = TREE_CHAIN (fields);
1491       TREE_CHAIN (fields) = tail;
1492     }
1493   TYPE_FIELDS (type) = tail;
1494
1495   if (align_type)
1496     {
1497       TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
1498       TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (align_type);
1499     }
1500
1501   layout_type (type);
1502 #if 0 /* not yet, should get fixed properly later */
1503   TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
1504 #else
1505   TYPE_NAME (type) = build_decl (TYPE_DECL, get_identifier (name), type);
1506 #endif
1507   TYPE_STUB_DECL (type) = TYPE_NAME (type);
1508   layout_decl (TYPE_NAME (type), 0);
1509 }
1510
1511 /* Calculate the mode, size, and alignment for TYPE.
1512    For an array type, calculate the element separation as well.
1513    Record TYPE on the chain of permanent or temporary types
1514    so that dbxout will find out about it.
1515
1516    TYPE_SIZE of a type is nonzero if the type has been laid out already.
1517    layout_type does nothing on such a type.
1518
1519    If the type is incomplete, its TYPE_SIZE remains zero.  */
1520
1521 void
1522 layout_type (tree type)
1523 {
1524   if (type == 0)
1525     abort ();
1526
1527   /* Do nothing if type has been laid out before.  */
1528   if (TYPE_SIZE (type))
1529     return;
1530
1531   switch (TREE_CODE (type))
1532     {
1533     case LANG_TYPE:
1534       /* This kind of type is the responsibility
1535          of the language-specific code.  */
1536       abort ();
1537
1538     case BOOLEAN_TYPE:  /* Used for Java, Pascal, and Chill.  */
1539       if (TYPE_PRECISION (type) == 0)
1540         TYPE_PRECISION (type) = 1; /* default to one byte/boolean.  */
1541
1542       /* ... fall through ...  */
1543
1544     case INTEGER_TYPE:
1545     case ENUMERAL_TYPE:
1546     case CHAR_TYPE:
1547       if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
1548           && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
1549         TREE_UNSIGNED (type) = 1;
1550
1551       TYPE_MODE (type) = smallest_mode_for_size (TYPE_PRECISION (type),
1552                                                  MODE_INT);
1553       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1554       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1555       break;
1556
1557     case REAL_TYPE:
1558       TYPE_MODE (type) = mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0);
1559       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1560       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1561       break;
1562
1563     case COMPLEX_TYPE:
1564       TREE_UNSIGNED (type) = TREE_UNSIGNED (TREE_TYPE (type));
1565       TYPE_MODE (type)
1566         = mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
1567                          (TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE
1568                           ? MODE_COMPLEX_INT : MODE_COMPLEX_FLOAT),
1569                          0);
1570       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1571       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1572       break;
1573
1574     case VECTOR_TYPE:
1575       {
1576         tree subtype;
1577
1578         subtype = TREE_TYPE (type);
1579         TREE_UNSIGNED (type) = TREE_UNSIGNED (subtype);
1580         TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1581         TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1582       }
1583       break;
1584
1585     case VOID_TYPE:
1586       /* This is an incomplete type and so doesn't have a size.  */
1587       TYPE_ALIGN (type) = 1;
1588       TYPE_USER_ALIGN (type) = 0;
1589       TYPE_MODE (type) = VOIDmode;
1590       break;
1591
1592     case OFFSET_TYPE:
1593       TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1594       TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1595       /* A pointer might be MODE_PARTIAL_INT,
1596          but ptrdiff_t must be integral.  */
1597       TYPE_MODE (type) = mode_for_size (POINTER_SIZE, MODE_INT, 0);
1598       break;
1599
1600     case FUNCTION_TYPE:
1601     case METHOD_TYPE:
1602       TYPE_MODE (type) = mode_for_size (2 * POINTER_SIZE, MODE_INT, 0);
1603       TYPE_SIZE (type) = bitsize_int (2 * POINTER_SIZE);
1604       TYPE_SIZE_UNIT (type) = size_int ((2 * POINTER_SIZE) / BITS_PER_UNIT);
1605       break;
1606
1607     case POINTER_TYPE:
1608     case REFERENCE_TYPE:
1609       {
1610
1611         enum machine_mode mode = ((TREE_CODE (type) == REFERENCE_TYPE
1612                                    && reference_types_internal)
1613                                   ? Pmode : TYPE_MODE (type));
1614
1615         int nbits = GET_MODE_BITSIZE (mode);
1616
1617         TYPE_SIZE (type) = bitsize_int (nbits);
1618         TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
1619         TREE_UNSIGNED (type) = 1;
1620         TYPE_PRECISION (type) = nbits;
1621       }
1622       break;
1623
1624     case ARRAY_TYPE:
1625       {
1626         tree index = TYPE_DOMAIN (type);
1627         tree element = TREE_TYPE (type);
1628
1629         build_pointer_type (element);
1630
1631         /* We need to know both bounds in order to compute the size.  */
1632         if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
1633             && TYPE_SIZE (element))
1634           {
1635             tree ub = TYPE_MAX_VALUE (index);
1636             tree lb = TYPE_MIN_VALUE (index);
1637             tree length;
1638             tree element_size;
1639
1640             /* The initial subtraction should happen in the original type so
1641                that (possible) negative values are handled appropriately.  */
1642             length = size_binop (PLUS_EXPR, size_one_node,
1643                                  convert (sizetype,
1644                                           fold (build (MINUS_EXPR,
1645                                                        TREE_TYPE (lb),
1646                                                        ub, lb))));
1647
1648             /* Special handling for arrays of bits (for Chill).  */
1649             element_size = TYPE_SIZE (element);
1650             if (TYPE_PACKED (type) && INTEGRAL_TYPE_P (element)
1651                 && (integer_zerop (TYPE_MAX_VALUE (element))
1652                     || integer_onep (TYPE_MAX_VALUE (element)))
1653                 && host_integerp (TYPE_MIN_VALUE (element), 1))
1654               {
1655                 HOST_WIDE_INT maxvalue
1656                   = tree_low_cst (TYPE_MAX_VALUE (element), 1);
1657                 HOST_WIDE_INT minvalue
1658                   = tree_low_cst (TYPE_MIN_VALUE (element), 1);
1659
1660                 if (maxvalue - minvalue == 1
1661                     && (maxvalue == 1 || maxvalue == 0))
1662                   element_size = integer_one_node;
1663               }
1664
1665             /* If neither bound is a constant and sizetype is signed, make
1666                sure the size is never negative.  We should really do this
1667                if *either* bound is non-constant, but this is the best
1668                compromise between C and Ada.  */
1669             if (! TREE_UNSIGNED (sizetype)
1670                 && TREE_CODE (TYPE_MIN_VALUE (index)) != INTEGER_CST
1671                 && TREE_CODE (TYPE_MAX_VALUE (index)) != INTEGER_CST)
1672               length = size_binop (MAX_EXPR, length, size_zero_node);
1673
1674             TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
1675                                            convert (bitsizetype, length));
1676
1677             /* If we know the size of the element, calculate the total
1678                size directly, rather than do some division thing below.
1679                This optimization helps Fortran assumed-size arrays
1680                (where the size of the array is determined at runtime)
1681                substantially.
1682                Note that we can't do this in the case where the size of
1683                the elements is one bit since TYPE_SIZE_UNIT cannot be
1684                set correctly in that case.  */
1685             if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
1686               TYPE_SIZE_UNIT (type)
1687                 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
1688           }
1689
1690         /* Now round the alignment and size,
1691            using machine-dependent criteria if any.  */
1692
1693 #ifdef ROUND_TYPE_ALIGN
1694         TYPE_ALIGN (type)
1695           = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
1696 #else
1697         TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1698 #endif
1699         TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
1700         TYPE_MODE (type) = BLKmode;
1701         if (TYPE_SIZE (type) != 0
1702 #ifdef MEMBER_TYPE_FORCES_BLK
1703             && ! MEMBER_TYPE_FORCES_BLK (type, VOIDmode)
1704 #endif
1705             /* BLKmode elements force BLKmode aggregate;
1706                else extract/store fields may lose.  */
1707             && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
1708                 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
1709           {
1710             /* One-element arrays get the component type's mode.  */
1711             if (simple_cst_equal (TYPE_SIZE (type),
1712                                   TYPE_SIZE (TREE_TYPE (type))))
1713               TYPE_MODE (type) = TYPE_MODE (TREE_TYPE (type));
1714             else
1715               TYPE_MODE (type)
1716                 = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1717
1718             if (TYPE_MODE (type) != BLKmode
1719                 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
1720                 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type))
1721                 && TYPE_MODE (type) != BLKmode)
1722               {
1723                 TYPE_NO_FORCE_BLK (type) = 1;
1724                 TYPE_MODE (type) = BLKmode;
1725               }
1726           }
1727         break;
1728       }
1729
1730     case RECORD_TYPE:
1731     case UNION_TYPE:
1732     case QUAL_UNION_TYPE:
1733       {
1734         tree field;
1735         record_layout_info rli;
1736
1737         /* Initialize the layout information.  */
1738         rli = start_record_layout (type);
1739
1740         /* If this is a QUAL_UNION_TYPE, we want to process the fields
1741            in the reverse order in building the COND_EXPR that denotes
1742            its size.  We reverse them again later.  */
1743         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1744           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1745
1746         /* Place all the fields.  */
1747         for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1748           place_field (rli, field);
1749
1750         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1751           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1752
1753         if (lang_adjust_rli)
1754           (*lang_adjust_rli) (rli);
1755
1756         /* Finish laying out the record.  */
1757         finish_record_layout (rli, /*free_p=*/true);
1758       }
1759       break;
1760
1761     case SET_TYPE:  /* Used by Chill and Pascal.  */
1762       if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST
1763           || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST)
1764         abort ();
1765       else
1766         {
1767 #ifndef SET_WORD_SIZE
1768 #define SET_WORD_SIZE BITS_PER_WORD
1769 #endif
1770           unsigned int alignment
1771             = set_alignment ? set_alignment : SET_WORD_SIZE;
1772           HOST_WIDE_INT size_in_bits
1773             = (tree_low_cst (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), 0)
1774                - tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0) + 1);
1775           HOST_WIDE_INT rounded_size
1776             = ((size_in_bits + alignment - 1) / alignment) * alignment;
1777
1778           if (rounded_size > (int) alignment)
1779             TYPE_MODE (type) = BLKmode;
1780           else
1781             TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1);
1782
1783           TYPE_SIZE (type) = bitsize_int (rounded_size);
1784           TYPE_SIZE_UNIT (type) = size_int (rounded_size / BITS_PER_UNIT);
1785           TYPE_ALIGN (type) = alignment;
1786           TYPE_USER_ALIGN (type) = 0;
1787           TYPE_PRECISION (type) = size_in_bits;
1788         }
1789       break;
1790
1791     case FILE_TYPE:
1792       /* The size may vary in different languages, so the language front end
1793          should fill in the size.  */
1794       TYPE_ALIGN (type) = BIGGEST_ALIGNMENT;
1795       TYPE_USER_ALIGN (type) = 0;
1796       TYPE_MODE  (type) = BLKmode;
1797       break;
1798
1799     default:
1800       abort ();
1801     }
1802
1803   /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE.  For
1804      records and unions, finish_record_layout already called this
1805      function.  */
1806   if (TREE_CODE (type) != RECORD_TYPE
1807       && TREE_CODE (type) != UNION_TYPE
1808       && TREE_CODE (type) != QUAL_UNION_TYPE)
1809     finalize_type_size (type);
1810
1811   /* If this type is created before sizetype has been permanently set,
1812      record it so set_sizetype can fix it up.  */
1813   if (! sizetype_set)
1814     early_type_list = tree_cons (NULL_TREE, type, early_type_list);
1815
1816   /* If an alias set has been set for this aggregate when it was incomplete,
1817      force it into alias set 0.
1818      This is too conservative, but we cannot call record_component_aliases
1819      here because some frontends still change the aggregates after
1820      layout_type.  */
1821   if (AGGREGATE_TYPE_P (type) && TYPE_ALIAS_SET_KNOWN_P (type))
1822     TYPE_ALIAS_SET (type) = 0;
1823 }
1824 \f
1825 /* Create and return a type for signed integers of PRECISION bits.  */
1826
1827 tree
1828 make_signed_type (int precision)
1829 {
1830   tree type = make_node (INTEGER_TYPE);
1831
1832   TYPE_PRECISION (type) = precision;
1833
1834   fixup_signed_type (type);
1835   return type;
1836 }
1837
1838 /* Create and return a type for unsigned integers of PRECISION bits.  */
1839
1840 tree
1841 make_unsigned_type (int precision)
1842 {
1843   tree type = make_node (INTEGER_TYPE);
1844
1845   TYPE_PRECISION (type) = precision;
1846
1847   fixup_unsigned_type (type);
1848   return type;
1849 }
1850 \f
1851 /* Initialize sizetype and bitsizetype to a reasonable and temporary
1852    value to enable integer types to be created.  */
1853
1854 void
1855 initialize_sizetypes (void)
1856 {
1857   tree t = make_node (INTEGER_TYPE);
1858
1859   /* Set this so we do something reasonable for the build_int_2 calls
1860      below.  */
1861   integer_type_node = t;
1862
1863   TYPE_MODE (t) = SImode;
1864   TYPE_ALIGN (t) = GET_MODE_ALIGNMENT (SImode);
1865   TYPE_USER_ALIGN (t) = 0;
1866   TYPE_SIZE (t) = build_int_2 (GET_MODE_BITSIZE (SImode), 0);
1867   TYPE_SIZE_UNIT (t) = build_int_2 (GET_MODE_SIZE (SImode), 0);
1868   TREE_UNSIGNED (t) = 1;
1869   TYPE_PRECISION (t) = GET_MODE_BITSIZE (SImode);
1870   TYPE_MIN_VALUE (t) = build_int_2 (0, 0);
1871   TYPE_IS_SIZETYPE (t) = 1;
1872
1873   /* 1000 avoids problems with possible overflow and is certainly
1874      larger than any size value we'd want to be storing.  */
1875   TYPE_MAX_VALUE (t) = build_int_2 (1000, 0);
1876
1877   /* These two must be different nodes because of the caching done in
1878      size_int_wide.  */
1879   sizetype = t;
1880   bitsizetype = copy_node (t);
1881   integer_type_node = 0;
1882 }
1883
1884 /* Set sizetype to TYPE, and initialize *sizetype accordingly.
1885    Also update the type of any standard type's sizes made so far.  */
1886
1887 void
1888 set_sizetype (tree type)
1889 {
1890   int oprecision = TYPE_PRECISION (type);
1891   /* The *bitsizetype types use a precision that avoids overflows when
1892      calculating signed sizes / offsets in bits.  However, when
1893      cross-compiling from a 32 bit to a 64 bit host, we are limited to 64 bit
1894      precision.  */
1895   int precision = MIN (oprecision + BITS_PER_UNIT_LOG + 1,
1896                        2 * HOST_BITS_PER_WIDE_INT);
1897   unsigned int i;
1898   tree t;
1899
1900   if (sizetype_set)
1901     abort ();
1902
1903   /* Make copies of nodes since we'll be setting TYPE_IS_SIZETYPE.  */
1904   sizetype = copy_node (type);
1905   TYPE_DOMAIN (sizetype) = type;
1906   TYPE_IS_SIZETYPE (sizetype) = 1;
1907   bitsizetype = make_node (INTEGER_TYPE);
1908   TYPE_NAME (bitsizetype) = TYPE_NAME (type);
1909   TYPE_PRECISION (bitsizetype) = precision;
1910   TYPE_IS_SIZETYPE (bitsizetype) = 1;
1911
1912   if (TREE_UNSIGNED (type))
1913     fixup_unsigned_type (bitsizetype);
1914   else
1915     fixup_signed_type (bitsizetype);
1916
1917   layout_type (bitsizetype);
1918
1919   if (TREE_UNSIGNED (type))
1920     {
1921       usizetype = sizetype;
1922       ubitsizetype = bitsizetype;
1923       ssizetype = copy_node (make_signed_type (oprecision));
1924       sbitsizetype = copy_node (make_signed_type (precision));
1925     }
1926   else
1927     {
1928       ssizetype = sizetype;
1929       sbitsizetype = bitsizetype;
1930       usizetype = copy_node (make_unsigned_type (oprecision));
1931       ubitsizetype = copy_node (make_unsigned_type (precision));
1932     }
1933
1934   TYPE_NAME (bitsizetype) = get_identifier ("bit_size_type");
1935
1936   /* Show is a sizetype, is a main type, and has no pointers to it.  */
1937   for (i = 0; i < ARRAY_SIZE (sizetype_tab); i++)
1938     {
1939       TYPE_IS_SIZETYPE (sizetype_tab[i]) = 1;
1940       TYPE_MAIN_VARIANT (sizetype_tab[i]) = sizetype_tab[i];
1941       TYPE_NEXT_VARIANT (sizetype_tab[i]) = 0;
1942       TYPE_POINTER_TO (sizetype_tab[i]) = 0;
1943       TYPE_REFERENCE_TO (sizetype_tab[i]) = 0;
1944     }
1945
1946   /* Go down each of the types we already made and set the proper type
1947      for the sizes in them.  */
1948   for (t = early_type_list; t != 0; t = TREE_CHAIN (t))
1949     {
1950       if (TREE_CODE (TREE_VALUE (t)) != INTEGER_TYPE
1951           && TREE_CODE (TREE_VALUE (t)) != BOOLEAN_TYPE)
1952         abort ();
1953
1954       TREE_TYPE (TYPE_SIZE (TREE_VALUE (t))) = bitsizetype;
1955       TREE_TYPE (TYPE_SIZE_UNIT (TREE_VALUE (t))) = sizetype;
1956     }
1957
1958   early_type_list = 0;
1959   sizetype_set = 1;
1960 }
1961 \f
1962 /* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE,
1963    BOOLEAN_TYPE, or CHAR_TYPE.  Set TYPE_MIN_VALUE and TYPE_MAX_VALUE
1964    for TYPE, based on the PRECISION and whether or not the TYPE
1965    IS_UNSIGNED.  PRECISION need not correspond to a width supported
1966    natively by the hardware; for example, on a machine with 8-bit,
1967    16-bit, and 32-bit register modes, PRECISION might be 7, 23, or
1968    61.  */
1969
1970 void
1971 set_min_and_max_values_for_integral_type (tree type,
1972                                           int precision,
1973                                           bool is_unsigned)
1974 {
1975   tree min_value;
1976   tree max_value;
1977
1978   if (is_unsigned)
1979     {
1980       min_value = build_int_2 (0, 0);
1981       max_value 
1982         = build_int_2 (precision - HOST_BITS_PER_WIDE_INT >= 0
1983                        ? -1 : ((HOST_WIDE_INT) 1 << precision) - 1,
1984                        precision - HOST_BITS_PER_WIDE_INT > 0
1985                        ? ((unsigned HOST_WIDE_INT) ~0
1986                           >> (HOST_BITS_PER_WIDE_INT
1987                               - (precision - HOST_BITS_PER_WIDE_INT)))
1988                        : 0);
1989     }
1990   else
1991     {
1992       min_value 
1993         = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1994                         ? 0 : (HOST_WIDE_INT) (-1) << (precision - 1)),
1995                        (((HOST_WIDE_INT) (-1)
1996                          << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1997                              ? precision - HOST_BITS_PER_WIDE_INT - 1
1998                              : 0))));    
1999       max_value
2000         = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
2001                         ? -1 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
2002                        (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2003                         ? (((HOST_WIDE_INT) 1
2004                             << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
2005                         : 0));
2006     }
2007
2008   TREE_TYPE (min_value) = type;
2009   TREE_TYPE (max_value) = type;
2010   TYPE_MIN_VALUE (type) = min_value;
2011   TYPE_MAX_VALUE (type) = max_value;
2012 }
2013
2014 /* Set the extreme values of TYPE based on its precision in bits,
2015    then lay it out.  Used when make_signed_type won't do
2016    because the tree code is not INTEGER_TYPE.
2017    E.g. for Pascal, when the -fsigned-char option is given.  */
2018
2019 void
2020 fixup_signed_type (tree type)
2021 {
2022   int precision = TYPE_PRECISION (type);
2023
2024   /* We can not represent properly constants greater then
2025      2 * HOST_BITS_PER_WIDE_INT, still we need the types
2026      as they are used by i386 vector extensions and friends.  */
2027   if (precision > HOST_BITS_PER_WIDE_INT * 2)
2028     precision = HOST_BITS_PER_WIDE_INT * 2;
2029
2030   set_min_and_max_values_for_integral_type (type, precision, 
2031                                             /*is_unsigned=*/false);
2032
2033   /* Lay out the type: set its alignment, size, etc.  */
2034   layout_type (type);
2035 }
2036
2037 /* Set the extreme values of TYPE based on its precision in bits,
2038    then lay it out.  This is used both in `make_unsigned_type'
2039    and for enumeral types.  */
2040
2041 void
2042 fixup_unsigned_type (tree type)
2043 {
2044   int precision = TYPE_PRECISION (type);
2045
2046   /* We can not represent properly constants greater then
2047      2 * HOST_BITS_PER_WIDE_INT, still we need the types
2048      as they are used by i386 vector extensions and friends.  */
2049   if (precision > HOST_BITS_PER_WIDE_INT * 2)
2050     precision = HOST_BITS_PER_WIDE_INT * 2;
2051
2052   set_min_and_max_values_for_integral_type (type, precision, 
2053                                             /*is_unsigned=*/true);
2054
2055   /* Lay out the type: set its alignment, size, etc.  */
2056   layout_type (type);
2057 }
2058 \f
2059 /* Find the best machine mode to use when referencing a bit field of length
2060    BITSIZE bits starting at BITPOS.
2061
2062    The underlying object is known to be aligned to a boundary of ALIGN bits.
2063    If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
2064    larger than LARGEST_MODE (usually SImode).
2065
2066    If no mode meets all these conditions, we return VOIDmode.  Otherwise, if
2067    VOLATILEP is true or SLOW_BYTE_ACCESS is false, we return the smallest
2068    mode meeting these conditions.
2069
2070    Otherwise (VOLATILEP is false and SLOW_BYTE_ACCESS is true), we return
2071    the largest mode (but a mode no wider than UNITS_PER_WORD) that meets
2072    all the conditions.  */
2073
2074 enum machine_mode
2075 get_best_mode (int bitsize, int bitpos, unsigned int align,
2076                enum machine_mode largest_mode, int volatilep)
2077 {
2078   enum machine_mode mode;
2079   unsigned int unit = 0;
2080
2081   /* Find the narrowest integer mode that contains the bit field.  */
2082   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
2083        mode = GET_MODE_WIDER_MODE (mode))
2084     {
2085       unit = GET_MODE_BITSIZE (mode);
2086       if ((bitpos % unit) + bitsize <= unit)
2087         break;
2088     }
2089
2090   if (mode == VOIDmode
2091       /* It is tempting to omit the following line
2092          if STRICT_ALIGNMENT is true.
2093          But that is incorrect, since if the bitfield uses part of 3 bytes
2094          and we use a 4-byte mode, we could get a spurious segv
2095          if the extra 4th byte is past the end of memory.
2096          (Though at least one Unix compiler ignores this problem:
2097          that on the Sequent 386 machine.  */
2098       || MIN (unit, BIGGEST_ALIGNMENT) > align
2099       || (largest_mode != VOIDmode && unit > GET_MODE_BITSIZE (largest_mode)))
2100     return VOIDmode;
2101
2102   if (SLOW_BYTE_ACCESS && ! volatilep)
2103     {
2104       enum machine_mode wide_mode = VOIDmode, tmode;
2105
2106       for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmode != VOIDmode;
2107            tmode = GET_MODE_WIDER_MODE (tmode))
2108         {
2109           unit = GET_MODE_BITSIZE (tmode);
2110           if (bitpos / unit == (bitpos + bitsize - 1) / unit
2111               && unit <= BITS_PER_WORD
2112               && unit <= MIN (align, BIGGEST_ALIGNMENT)
2113               && (largest_mode == VOIDmode
2114                   || unit <= GET_MODE_BITSIZE (largest_mode)))
2115             wide_mode = tmode;
2116         }
2117
2118       if (wide_mode != VOIDmode)
2119         return wide_mode;
2120     }
2121
2122   return mode;
2123 }
2124
2125 #include "gt-stor-layout.h"