OSDN Git Service

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