OSDN Git Service

* stor-layout.c (layout_type, case ARRAY_TYPE): Give one-element array
[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 \f
466 /* Hook for a front-end function that can modify the record layout as needed
467    immediately before it is finalized.  */
468
469 void (*lang_adjust_rli) PARAMS ((record_layout_info)) = 0;
470
471 void
472 set_lang_adjust_rli (f)
473      void (*f) PARAMS ((record_layout_info));
474 {
475   lang_adjust_rli = f;
476 }
477
478 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
479    QUAL_UNION_TYPE.  Return a pointer to a struct record_layout_info which
480    is to be passed to all other layout functions for this record.  It is the
481    responsibility of the caller to call `free' for the storage returned. 
482    Note that garbage collection is not permitted until we finish laying
483    out the record.  */
484
485 record_layout_info
486 start_record_layout (t)
487      tree t;
488 {
489   record_layout_info rli 
490     = (record_layout_info) xmalloc (sizeof (struct record_layout_info_s));
491
492   rli->t = t;
493
494   /* If the type has a minimum specified alignment (via an attribute
495      declaration, for example) use it -- otherwise, start with a
496      one-byte alignment.  */
497   rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
498   rli->unpacked_align = rli->unpadded_align = rli->record_align;
499   rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
500
501 #ifdef STRUCTURE_SIZE_BOUNDARY
502   /* Packed structures don't need to have minimum size.  */
503   if (! TYPE_PACKED (t))
504     rli->record_align = MAX (rli->record_align, STRUCTURE_SIZE_BOUNDARY);
505 #endif
506
507   rli->offset = size_zero_node;
508   rli->bitpos = bitsize_zero_node;
509   rli->prev_field = 0;
510   rli->pending_statics = 0;
511   rli->packed_maybe_necessary = 0;
512
513   return rli;
514 }
515
516 /* These four routines perform computations that convert between
517    the offset/bitpos forms and byte and bit offsets.  */
518
519 tree
520 bit_from_pos (offset, bitpos)
521      tree offset, bitpos;
522 {
523   return size_binop (PLUS_EXPR, bitpos,
524                      size_binop (MULT_EXPR, convert (bitsizetype, offset),
525                                  bitsize_unit_node));
526 }
527
528 tree
529 byte_from_pos (offset, bitpos)
530      tree offset, bitpos;
531 {
532   return size_binop (PLUS_EXPR, offset,
533                      convert (sizetype,
534                               size_binop (TRUNC_DIV_EXPR, bitpos,
535                                           bitsize_unit_node)));
536 }
537
538 void
539 pos_from_byte (poffset, pbitpos, off_align, pos)
540      tree *poffset, *pbitpos;
541      unsigned int off_align;
542      tree pos;
543 {
544   *poffset
545     = size_binop (MULT_EXPR,
546                   convert (sizetype,
547                            size_binop (FLOOR_DIV_EXPR, pos,
548                                        bitsize_int (off_align
549                                                     / BITS_PER_UNIT))),
550                   size_int (off_align / BITS_PER_UNIT));
551   *pbitpos = size_binop (MULT_EXPR,
552                          size_binop (FLOOR_MOD_EXPR, pos,
553                                      bitsize_int (off_align / BITS_PER_UNIT)),
554                          bitsize_unit_node);
555 }
556
557 void
558 pos_from_bit (poffset, pbitpos, off_align, pos)
559      tree *poffset, *pbitpos;
560      unsigned int off_align;
561      tree pos;
562 {
563   *poffset = size_binop (MULT_EXPR,
564                          convert (sizetype,
565                                   size_binop (FLOOR_DIV_EXPR, pos,
566                                               bitsize_int (off_align))),
567                          size_int (off_align / BITS_PER_UNIT));
568   *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, bitsize_int (off_align));
569 }
570
571 /* Given a pointer to bit and byte offsets and an offset alignment,
572    normalize the offsets so they are within the alignment.  */
573
574 void
575 normalize_offset (poffset, pbitpos, off_align)
576      tree *poffset, *pbitpos;
577      unsigned int off_align;
578 {
579   /* If the bit position is now larger than it should be, adjust it
580      downwards.  */
581   if (compare_tree_int (*pbitpos, off_align) >= 0)
582     {
583       tree extra_aligns = size_binop (FLOOR_DIV_EXPR, *pbitpos,
584                                       bitsize_int (off_align));
585
586       *poffset
587         = size_binop (PLUS_EXPR, *poffset,
588                       size_binop (MULT_EXPR, convert (sizetype, extra_aligns),
589                                   size_int (off_align / BITS_PER_UNIT)));
590                                 
591       *pbitpos
592         = size_binop (FLOOR_MOD_EXPR, *pbitpos, bitsize_int (off_align));
593     }
594 }
595
596 /* Print debugging information about the information in RLI.  */
597
598 void
599 debug_rli (rli)
600      record_layout_info rli;
601 {
602   print_node_brief (stderr, "type", rli->t, 0);
603   print_node_brief (stderr, "\noffset", rli->offset, 0);
604   print_node_brief (stderr, " bitpos", rli->bitpos, 0);
605
606   fprintf (stderr, "\naligns: rec = %u, unpack = %u, unpad = %u, off = %u\n",
607            rli->record_align, rli->unpacked_align, rli->unpadded_align,
608            rli->offset_align);
609   if (rli->packed_maybe_necessary)
610     fprintf (stderr, "packed may be necessary\n");
611
612   if (rli->pending_statics)
613     {
614       fprintf (stderr, "pending statics:\n");
615       debug_tree (rli->pending_statics);
616     }
617 }
618
619 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
620    BITPOS if necessary to keep BITPOS below OFFSET_ALIGN.  */
621
622 void
623 normalize_rli (rli)
624      record_layout_info rli;
625 {
626   normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
627 }
628
629 /* Returns the size in bytes allocated so far.  */
630
631 tree
632 rli_size_unit_so_far (rli)
633      record_layout_info rli;
634 {
635   return byte_from_pos (rli->offset, rli->bitpos);
636 }
637
638 /* Returns the size in bits allocated so far.  */
639
640 tree
641 rli_size_so_far (rli)
642      record_layout_info rli;
643 {
644   return bit_from_pos (rli->offset, rli->bitpos);
645 }
646
647 /* Called from place_field to handle unions.  */
648
649 static void
650 place_union_field (rli, field)
651      record_layout_info rli;
652      tree field;
653 {
654   unsigned int desired_align;
655
656   layout_decl (field, 0);
657   
658   DECL_FIELD_OFFSET (field) = size_zero_node;
659   DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
660   SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
661
662   desired_align = DECL_ALIGN (field);
663
664 #ifdef BIGGEST_FIELD_ALIGNMENT
665   /* Some targets (i.e. i386) limit union field alignment
666      to a lower boundary than alignment of variables unless
667      it was overridden by attribute aligned.  */
668   if (! DECL_USER_ALIGN (field))
669     desired_align =
670       MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
671 #endif
672
673 #ifdef ADJUST_FIELD_ALIGN
674   desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
675 #endif
676
677   TYPE_USER_ALIGN (rli->t) |= DECL_USER_ALIGN (field);
678
679   /* Union must be at least as aligned as any field requires.  */
680   rli->record_align = MAX (rli->record_align, desired_align);
681   rli->unpadded_align = MAX (rli->unpadded_align, desired_align);
682
683 #ifdef PCC_BITFIELD_TYPE_MATTERS
684   /* On the m88000, a bit field of declare type `int' forces the
685      entire union to have `int' alignment.  */
686   if (PCC_BITFIELD_TYPE_MATTERS && DECL_BIT_FIELD_TYPE (field))
687     {
688       rli->record_align = MAX (rli->record_align, 
689                                TYPE_ALIGN (TREE_TYPE (field)));
690       rli->unpadded_align = MAX (rli->unpadded_align,
691                                  TYPE_ALIGN (TREE_TYPE (field)));
692     }
693 #endif
694
695   /* We assume the union's size will be a multiple of a byte so we don't
696      bother with BITPOS.  */
697   if (TREE_CODE (rli->t) == UNION_TYPE)
698     rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
699   else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
700     rli->offset = fold (build (COND_EXPR, sizetype, 
701                                DECL_QUALIFIER (field),
702                                DECL_SIZE_UNIT (field), rli->offset));
703 }
704
705 /* RLI contains information about the layout of a RECORD_TYPE.  FIELD
706    is a FIELD_DECL to be added after those fields already present in
707    T.  (FIELD is not actually added to the TYPE_FIELDS list here;
708    callers that desire that behavior must manually perform that step.)  */
709
710 void
711 place_field (rli, field)
712      record_layout_info rli;
713      tree field;
714 {
715   /* The alignment required for FIELD.  */
716   unsigned int desired_align;
717   /* The alignment FIELD would have if we just dropped it into the
718      record as it presently stands.  */
719   unsigned int known_align;
720   unsigned int actual_align;
721   unsigned int user_align;
722   /* The type of this field.  */
723   tree type = TREE_TYPE (field);
724  
725   if (TREE_CODE (field) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK)
726       return;
727
728   /* If FIELD is static, then treat it like a separate variable, not
729      really like a structure field.  If it is a FUNCTION_DECL, it's a
730      method.  In both cases, all we do is lay out the decl, and we do
731      it *after* the record is laid out.  */
732   if (TREE_CODE (field) == VAR_DECL)
733     {
734       rli->pending_statics = tree_cons (NULL_TREE, field,
735                                         rli->pending_statics);
736       return;
737     }
738
739   /* Enumerators and enum types which are local to this class need not
740      be laid out.  Likewise for initialized constant fields.  */
741   else if (TREE_CODE (field) != FIELD_DECL)
742     return;
743
744   /* Unions are laid out very differently than records, so split
745      that code off to another function.  */
746   else if (TREE_CODE (rli->t) != RECORD_TYPE)
747     {
748       place_union_field (rli, field);
749       return;
750     }
751
752   /* Work out the known alignment so far.  Note that A & (-A) is the
753      value of the least-significant bit in A that is one.  */
754   if (! integer_zerop (rli->bitpos))
755     known_align = (tree_low_cst (rli->bitpos, 1)
756                    & - tree_low_cst (rli->bitpos, 1));
757   else if (integer_zerop (rli->offset))
758     known_align = BIGGEST_ALIGNMENT;
759   else if (host_integerp (rli->offset, 1))
760     known_align = (BITS_PER_UNIT
761                    * (tree_low_cst (rli->offset, 1)
762                       & - tree_low_cst (rli->offset, 1)));
763   else
764     known_align = rli->offset_align;
765
766   /* Lay out the field so we know what alignment it needs.  For a
767      packed field, use the alignment as specified, disregarding what
768      the type would want.  */
769   desired_align = DECL_ALIGN (field);
770   user_align = DECL_USER_ALIGN (field);
771   layout_decl (field, known_align);
772   if (! DECL_PACKED (field))
773     {
774       desired_align = DECL_ALIGN (field);
775       user_align = DECL_USER_ALIGN (field);
776     }
777
778   /* Some targets (i.e. i386, VMS) limit struct field alignment
779      to a lower boundary than alignment of variables unless
780      it was overridden by attribute aligned.  */
781 #ifdef BIGGEST_FIELD_ALIGNMENT
782   if (! user_align)
783     desired_align
784       = MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
785 #endif
786
787 #ifdef ADJUST_FIELD_ALIGN
788   desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
789 #endif
790
791   /* Record must have at least as much alignment as any field.
792      Otherwise, the alignment of the field within the record is
793      meaningless.  */
794   if ((* targetm.ms_bitfield_layout_p) (rli->t)
795       && type != error_mark_node
796       && DECL_BIT_FIELD_TYPE (field)
797       && ! integer_zerop (TYPE_SIZE (type))
798       && integer_zerop (DECL_SIZE (field)))
799     {
800       if (rli->prev_field
801           && DECL_BIT_FIELD_TYPE (rli->prev_field)
802           && ! integer_zerop (DECL_SIZE (rli->prev_field)))
803         {
804           rli->record_align = MAX (rli->record_align, desired_align);
805           rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
806         }
807       else
808         desired_align = 1;
809     }   
810   else
811 #ifdef PCC_BITFIELD_TYPE_MATTERS
812   if (PCC_BITFIELD_TYPE_MATTERS && type != error_mark_node
813       && ! (* targetm.ms_bitfield_layout_p) (rli->t)
814       && DECL_BIT_FIELD_TYPE (field)
815       && ! integer_zerop (TYPE_SIZE (type)))
816     {
817       /* For these machines, a zero-length field does not
818          affect the alignment of the structure as a whole.
819          It does, however, affect the alignment of the next field
820          within the structure.  */
821       if (! integer_zerop (DECL_SIZE (field)))
822         rli->record_align = MAX (rli->record_align, desired_align);
823       else if (! DECL_PACKED (field))
824         desired_align = TYPE_ALIGN (type);
825
826       /* A named bit field of declared type `int'
827          forces the entire structure to have `int' alignment.  */
828       if (DECL_NAME (field) != 0)
829         {
830           unsigned int type_align = TYPE_ALIGN (type);
831
832           if (maximum_field_alignment != 0)
833             type_align = MIN (type_align, maximum_field_alignment);
834           else if (DECL_PACKED (field))
835             type_align = MIN (type_align, BITS_PER_UNIT);
836
837           rli->record_align = MAX (rli->record_align, type_align);
838           rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field));
839           if (warn_packed)
840             rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
841         }
842     }
843   else
844 #endif
845     {
846       rli->record_align = MAX (rli->record_align, desired_align);
847       rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
848       rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field));
849     }
850
851   if (warn_packed && DECL_PACKED (field))
852     {
853       if (known_align > TYPE_ALIGN (type))
854         {
855           if (TYPE_ALIGN (type) > desired_align)
856             {
857               if (STRICT_ALIGNMENT)
858                 warning_with_decl (field, "packed attribute causes inefficient alignment for `%s'");
859               else
860                 warning_with_decl (field, "packed attribute is unnecessary for `%s'");
861             }
862         }
863       else
864         rli->packed_maybe_necessary = 1;
865     }
866
867   /* Does this field automatically have alignment it needs by virtue
868      of the fields that precede it and the record's own alignment?  */
869   if (known_align < desired_align)
870     {
871       /* No, we need to skip space before this field.
872          Bump the cumulative size to multiple of field alignment.  */
873
874       if (warn_padded)
875         warning_with_decl (field, "padding struct to align `%s'");
876
877       /* If the alignment is still within offset_align, just align
878          the bit position.  */
879       if (desired_align < rli->offset_align)
880         rli->bitpos = round_up (rli->bitpos, desired_align);
881       else
882         {
883           /* First adjust OFFSET by the partial bits, then align.  */
884           rli->offset
885             = size_binop (PLUS_EXPR, rli->offset,
886                           convert (sizetype,
887                                    size_binop (CEIL_DIV_EXPR, rli->bitpos,
888                                                bitsize_unit_node)));
889           rli->bitpos = bitsize_zero_node;
890
891           rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
892         }
893
894       if (! TREE_CONSTANT (rli->offset))
895         rli->offset_align = desired_align;
896
897     }
898
899   /* Handle compatibility with PCC.  Note that if the record has any
900      variable-sized fields, we need not worry about compatibility.  */
901 #ifdef PCC_BITFIELD_TYPE_MATTERS
902   if (PCC_BITFIELD_TYPE_MATTERS
903       && ! (* targetm.ms_bitfield_layout_p) (rli->t)
904       && TREE_CODE (field) == FIELD_DECL
905       && type != error_mark_node
906       && DECL_BIT_FIELD (field)
907       && ! DECL_PACKED (field)
908       && maximum_field_alignment == 0
909       && ! integer_zerop (DECL_SIZE (field))
910       && host_integerp (DECL_SIZE (field), 1)
911       && host_integerp (rli->offset, 1)
912       && host_integerp (TYPE_SIZE (type), 1))
913     {
914       unsigned int type_align = TYPE_ALIGN (type);
915       tree dsize = DECL_SIZE (field);
916       HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
917       HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
918       HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
919
920       /* A bit field may not span more units of alignment of its type
921          than its type itself.  Advance to next boundary if necessary.  */
922       if ((((offset * BITS_PER_UNIT + bit_offset + field_size +
923              type_align - 1)
924             / type_align)
925            - (offset * BITS_PER_UNIT + bit_offset) / type_align)
926           > tree_low_cst (TYPE_SIZE (type), 1) / type_align)
927         rli->bitpos = round_up (rli->bitpos, type_align);
928     }
929 #endif
930
931 #ifdef BITFIELD_NBYTES_LIMITED
932   if (BITFIELD_NBYTES_LIMITED
933       && ! (* targetm.ms_bitfield_layout_p) (rli->t)
934       && TREE_CODE (field) == FIELD_DECL
935       && type != error_mark_node
936       && DECL_BIT_FIELD_TYPE (field)
937       && ! DECL_PACKED (field)
938       && ! integer_zerop (DECL_SIZE (field))
939       && host_integerp (DECL_SIZE (field), 1)
940       && host_integerp (rli->offset, 1)
941       && host_integerp (TYPE_SIZE (type), 1))
942     {
943       unsigned int type_align = TYPE_ALIGN (type);
944       tree dsize = DECL_SIZE (field);
945       HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
946       HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
947       HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
948
949       if (maximum_field_alignment != 0)
950         type_align = MIN (type_align, maximum_field_alignment);
951       /* ??? This test is opposite the test in the containing if
952          statement, so this code is unreachable currently.  */
953       else if (DECL_PACKED (field))
954         type_align = MIN (type_align, BITS_PER_UNIT);
955
956       /* A bit field may not span the unit of alignment of its type.
957          Advance to next boundary if necessary.  */
958       /* ??? This code should match the code above for the
959          PCC_BITFIELD_TYPE_MATTERS case.  */
960       if ((offset * BITS_PER_UNIT + bit_offset) / type_align
961           != ((offset * BITS_PER_UNIT + bit_offset + field_size - 1)
962               / type_align))
963         rli->bitpos = round_up (rli->bitpos, type_align);
964     }
965 #endif
966
967   /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.  */
968   if ((* targetm.ms_bitfield_layout_p) (rli->t)
969       && TREE_CODE (field) == FIELD_DECL
970       && type != error_mark_node
971       && ! DECL_PACKED (field)
972       && rli->prev_field
973       && DECL_SIZE (field)
974       && host_integerp (DECL_SIZE (field), 1)
975       && DECL_SIZE (rli->prev_field)
976       && host_integerp (DECL_SIZE (rli->prev_field), 1)
977       && host_integerp (rli->offset, 1)
978       && host_integerp (TYPE_SIZE (type), 1)
979       && host_integerp (TYPE_SIZE (TREE_TYPE (rli->prev_field)), 1)
980       && ((DECL_BIT_FIELD_TYPE (rli->prev_field)
981            && ! integer_zerop (DECL_SIZE (rli->prev_field)))
982           || (DECL_BIT_FIELD_TYPE (field)
983               && ! integer_zerop (DECL_SIZE (field))))
984       && (! simple_cst_equal (TYPE_SIZE (type),
985                               TYPE_SIZE (TREE_TYPE (rli->prev_field)))
986           /* If the previous field was a zero-sized bit-field, either
987              it was ignored, in which case we must ensure the proper
988              alignment of this field here, or it already forced the
989              alignment of this field, in which case forcing the
990              alignment again is harmless.  So, do it in both cases.  */
991           || (DECL_BIT_FIELD_TYPE (rli->prev_field)
992               && integer_zerop (DECL_SIZE (rli->prev_field)))))
993     {
994       unsigned int type_align = TYPE_ALIGN (type);
995
996       if (rli->prev_field
997           && DECL_BIT_FIELD_TYPE (rli->prev_field)
998           /* If the previous bit-field is zero-sized, we've already
999              accounted for its alignment needs (or ignored it, if
1000              appropriate) while placing it.  */
1001           && ! integer_zerop (DECL_SIZE (rli->prev_field)))
1002         type_align = MAX (type_align,
1003                           TYPE_ALIGN (TREE_TYPE (rli->prev_field)));
1004
1005       if (maximum_field_alignment != 0)
1006         type_align = MIN (type_align, maximum_field_alignment);
1007
1008       rli->bitpos = round_up (rli->bitpos, type_align);
1009     }
1010
1011   /* Offset so far becomes the position of this field after normalizing.  */
1012   normalize_rli (rli);
1013   DECL_FIELD_OFFSET (field) = rli->offset;
1014   DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1015   SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1016
1017   TYPE_USER_ALIGN (rli->t) |= user_align;
1018
1019   /* If this field ended up more aligned than we thought it would be (we
1020      approximate this by seeing if its position changed), lay out the field
1021      again; perhaps we can use an integral mode for it now.  */
1022   if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
1023     actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1024                     & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
1025   else if (integer_zerop (DECL_FIELD_OFFSET (field)))
1026     actual_align = BIGGEST_ALIGNMENT;
1027   else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
1028     actual_align = (BITS_PER_UNIT
1029                    * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1030                       & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
1031   else
1032     actual_align = DECL_OFFSET_ALIGN (field);
1033
1034   if (known_align != actual_align)
1035     layout_decl (field, actual_align);
1036
1037   rli->prev_field = field;
1038
1039   /* Now add size of this field to the size of the record.  If the size is
1040      not constant, treat the field as being a multiple of bytes and just
1041      adjust the offset, resetting the bit position.  Otherwise, apportion the
1042      size amongst the bit position and offset.  First handle the case of an
1043      unspecified size, which can happen when we have an invalid nested struct
1044      definition, such as struct j { struct j { int i; } }.  The error message
1045      is printed in finish_struct.  */
1046   if (DECL_SIZE (field) == 0)
1047     /* Do nothing.  */;
1048   else if (TREE_CODE (DECL_SIZE_UNIT (field)) != INTEGER_CST
1049            || TREE_CONSTANT_OVERFLOW (DECL_SIZE_UNIT (field)))
1050     {
1051       rli->offset
1052         = size_binop (PLUS_EXPR, rli->offset,
1053                       convert (sizetype,
1054                                size_binop (CEIL_DIV_EXPR, rli->bitpos,
1055                                            bitsize_unit_node)));
1056       rli->offset
1057         = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1058       rli->bitpos = bitsize_zero_node;
1059       rli->offset_align = MIN (rli->offset_align, DECL_ALIGN (field));
1060     }
1061   else
1062     {
1063       rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1064       normalize_rli (rli);
1065     }
1066 }
1067
1068 /* Assuming that all the fields have been laid out, this function uses
1069    RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1070    inidicated by RLI.  */
1071
1072 static void
1073 finalize_record_size (rli)
1074      record_layout_info rli;
1075 {
1076   tree unpadded_size, unpadded_size_unit;
1077
1078   /* Now we want just byte and bit offsets, so set the offset alignment
1079      to be a byte and then normalize.  */
1080   rli->offset_align = BITS_PER_UNIT;
1081   normalize_rli (rli);
1082
1083   /* Determine the desired alignment.  */
1084 #ifdef ROUND_TYPE_ALIGN
1085   TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
1086                                           rli->record_align);
1087 #else
1088   TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
1089 #endif
1090
1091   /* Compute the size so far.  Be sure to allow for extra bits in the
1092      size in bytes.  We have guaranteed above that it will be no more
1093      than a single byte.  */
1094   unpadded_size = rli_size_so_far (rli);
1095   unpadded_size_unit = rli_size_unit_so_far (rli);
1096   if (! integer_zerop (rli->bitpos))
1097     unpadded_size_unit
1098       = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
1099
1100   /* Record the un-rounded size in the binfo node.  But first we check
1101      the size of TYPE_BINFO to make sure that BINFO_SIZE is available.  */
1102   if (TYPE_BINFO (rli->t) && TREE_VEC_LENGTH (TYPE_BINFO (rli->t)) > 6)
1103     {
1104       TYPE_BINFO_SIZE (rli->t) = unpadded_size;
1105       TYPE_BINFO_SIZE_UNIT (rli->t) = unpadded_size_unit;
1106     }
1107
1108     /* Round the size up to be a multiple of the required alignment */
1109 #ifdef ROUND_TYPE_SIZE
1110   TYPE_SIZE (rli->t) = ROUND_TYPE_SIZE (rli->t, unpadded_size,
1111                                         TYPE_ALIGN (rli->t));
1112   TYPE_SIZE_UNIT (rli->t)
1113     = ROUND_TYPE_SIZE_UNIT (rli->t, unpadded_size_unit,
1114                             TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
1115 #else
1116   TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
1117   TYPE_SIZE_UNIT (rli->t) = round_up (unpadded_size_unit,
1118                                       TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
1119 #endif
1120
1121   if (warn_padded && TREE_CONSTANT (unpadded_size)
1122       && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
1123     warning ("padding struct size to alignment boundary");
1124   
1125   if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1126       && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1127       && TREE_CONSTANT (unpadded_size))
1128     {
1129       tree unpacked_size;
1130
1131 #ifdef ROUND_TYPE_ALIGN
1132       rli->unpacked_align
1133         = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
1134 #else
1135       rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
1136 #endif
1137
1138 #ifdef ROUND_TYPE_SIZE
1139       unpacked_size = ROUND_TYPE_SIZE (rli->t, TYPE_SIZE (rli->t),
1140                                        rli->unpacked_align);
1141 #else
1142       unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
1143 #endif
1144
1145       if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
1146         {
1147           TYPE_PACKED (rli->t) = 0;
1148
1149           if (TYPE_NAME (rli->t))
1150             {
1151               const char *name;
1152
1153               if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1154                 name = IDENTIFIER_POINTER (TYPE_NAME (rli->t));
1155               else
1156                 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
1157
1158               if (STRICT_ALIGNMENT)
1159                 warning ("packed attribute causes inefficient alignment for `%s'", name);
1160               else
1161                 warning ("packed attribute is unnecessary for `%s'", name);
1162             }
1163           else
1164             {
1165               if (STRICT_ALIGNMENT)
1166                 warning ("packed attribute causes inefficient alignment");
1167               else
1168                 warning ("packed attribute is unnecessary");
1169             }
1170         }
1171     }
1172 }
1173
1174 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE).  */
1175
1176 void
1177 compute_record_mode (type)
1178      tree type;
1179 {
1180   tree field;
1181   enum machine_mode mode = VOIDmode;
1182
1183   /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1184      However, if possible, we use a mode that fits in a register
1185      instead, in order to allow for better optimization down the
1186      line.  */
1187   TYPE_MODE (type) = BLKmode;
1188
1189   if (! host_integerp (TYPE_SIZE (type), 1))
1190     return;
1191
1192   /* A record which has any BLKmode members must itself be
1193      BLKmode; it can't go in a register.  Unless the member is
1194      BLKmode only because it isn't aligned.  */
1195   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1196     {
1197       unsigned HOST_WIDE_INT bitpos;
1198
1199       if (TREE_CODE (field) != FIELD_DECL)
1200         continue;
1201
1202       if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1203           || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1204               && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field)))
1205           || ! host_integerp (bit_position (field), 1)
1206           || DECL_SIZE (field) == 0
1207           || ! host_integerp (DECL_SIZE (field), 1))
1208         return;
1209
1210       bitpos = int_bit_position (field);
1211           
1212       /* Must be BLKmode if any field crosses a word boundary,
1213          since extract_bit_field can't handle that in registers.  */
1214       if (bitpos / BITS_PER_WORD
1215           != ((tree_low_cst (DECL_SIZE (field), 1) + bitpos - 1)
1216               / BITS_PER_WORD)
1217           /* But there is no problem if the field is entire words.  */
1218           && tree_low_cst (DECL_SIZE (field), 1) % BITS_PER_WORD != 0)
1219         return;
1220
1221       /* If this field is the whole struct, remember its mode so
1222          that, say, we can put a double in a class into a DF
1223          register instead of forcing it to live in the stack.  */
1224       if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1225         mode = DECL_MODE (field);
1226
1227 #ifdef MEMBER_TYPE_FORCES_BLK
1228       /* With some targets, eg. c4x, it is sub-optimal
1229          to access an aligned BLKmode structure as a scalar.  */
1230
1231       /* On ia64-*-hpux we need to ensure that we don't change the
1232          mode of a structure containing a single field or else we
1233          will pass it incorrectly.  Since a structure with a single
1234          field causes mode to get set above we can't allow the
1235          check for mode == VOIDmode in this case.  Perhaps
1236          MEMBER_TYPE_FORCES_BLK should be extended to include mode
1237          as an argument and the check could be put in there for c4x.  */
1238
1239       if ((mode == VOIDmode || FUNCTION_ARG_REG_LITTLE_ENDIAN)
1240           && MEMBER_TYPE_FORCES_BLK (field))
1241         return;
1242 #endif /* MEMBER_TYPE_FORCES_BLK  */
1243     }
1244
1245   /* If we only have one real field; use its mode.  This only applies to
1246      RECORD_TYPE.  This does not apply to unions.  */
1247   if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode)
1248     TYPE_MODE (type) = mode;
1249   else
1250     TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1251
1252   /* If structure's known alignment is less than what the scalar
1253      mode would need, and it matters, then stick with BLKmode.  */
1254   if (TYPE_MODE (type) != BLKmode
1255       && STRICT_ALIGNMENT
1256       && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1257             || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1258     {
1259       /* If this is the only reason this type is BLKmode, then
1260          don't force containing types to be BLKmode.  */
1261       TYPE_NO_FORCE_BLK (type) = 1;
1262       TYPE_MODE (type) = BLKmode;
1263     }
1264 }
1265
1266 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1267    out.  */
1268
1269 static void
1270 finalize_type_size (type)
1271      tree type;
1272 {
1273   /* Normally, use the alignment corresponding to the mode chosen.
1274      However, where strict alignment is not required, avoid
1275      over-aligning structures, since most compilers do not do this
1276      alignment.  */
1277
1278   if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1279       && (STRICT_ALIGNMENT
1280           || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1281               && TREE_CODE (type) != QUAL_UNION_TYPE
1282               && TREE_CODE (type) != ARRAY_TYPE)))
1283     {
1284       TYPE_ALIGN (type) = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1285       TYPE_USER_ALIGN (type) = 0;
1286     }
1287
1288   /* Do machine-dependent extra alignment.  */
1289 #ifdef ROUND_TYPE_ALIGN
1290   TYPE_ALIGN (type)
1291     = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1292 #endif
1293
1294   /* If we failed to find a simple way to calculate the unit size
1295      of the type, find it by division.  */
1296   if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1297     /* TYPE_SIZE (type) is computed in bitsizetype.  After the division, the
1298        result will fit in sizetype.  We will get more efficient code using
1299        sizetype, so we force a conversion.  */
1300     TYPE_SIZE_UNIT (type)
1301       = convert (sizetype,
1302                  size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1303                              bitsize_unit_node));
1304
1305   if (TYPE_SIZE (type) != 0)
1306     {
1307 #ifdef ROUND_TYPE_SIZE
1308       TYPE_SIZE (type)
1309         = ROUND_TYPE_SIZE (type, TYPE_SIZE (type), TYPE_ALIGN (type));
1310       TYPE_SIZE_UNIT (type)
1311         = ROUND_TYPE_SIZE_UNIT (type, TYPE_SIZE_UNIT (type),
1312                                 TYPE_ALIGN (type) / BITS_PER_UNIT);
1313 #else
1314       TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1315       TYPE_SIZE_UNIT (type)
1316         = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN (type) / BITS_PER_UNIT);
1317 #endif
1318     }
1319
1320   /* Evaluate nonconstant sizes only once, either now or as soon as safe.  */
1321   if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1322     TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1323   if (TYPE_SIZE_UNIT (type) != 0
1324       && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1325     TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1326
1327   /* Also layout any other variants of the type.  */
1328   if (TYPE_NEXT_VARIANT (type)
1329       || type != TYPE_MAIN_VARIANT (type))
1330     {
1331       tree variant;
1332       /* Record layout info of this variant.  */
1333       tree size = TYPE_SIZE (type);
1334       tree size_unit = TYPE_SIZE_UNIT (type);
1335       unsigned int align = TYPE_ALIGN (type);
1336       unsigned int user_align = TYPE_USER_ALIGN (type);
1337       enum machine_mode mode = TYPE_MODE (type);
1338
1339       /* Copy it into all variants.  */
1340       for (variant = TYPE_MAIN_VARIANT (type);
1341            variant != 0;
1342            variant = TYPE_NEXT_VARIANT (variant))
1343         {
1344           TYPE_SIZE (variant) = size;
1345           TYPE_SIZE_UNIT (variant) = size_unit;
1346           TYPE_ALIGN (variant) = align;
1347           TYPE_USER_ALIGN (variant) = user_align;
1348           TYPE_MODE (variant) = mode;
1349         }
1350     }
1351 }
1352
1353 /* Do all of the work required to layout the type indicated by RLI,
1354    once the fields have been laid out.  This function will call `free'
1355    for RLI.  */
1356
1357 void
1358 finish_record_layout (rli)
1359      record_layout_info rli;
1360 {
1361   /* Compute the final size.  */
1362   finalize_record_size (rli);
1363
1364   /* Compute the TYPE_MODE for the record.  */
1365   compute_record_mode (rli->t);
1366
1367   /* Perform any last tweaks to the TYPE_SIZE, etc.  */
1368   finalize_type_size (rli->t);
1369
1370   /* Lay out any static members.  This is done now because their type
1371      may use the record's type.  */
1372   while (rli->pending_statics)
1373     {
1374       layout_decl (TREE_VALUE (rli->pending_statics), 0);
1375       rli->pending_statics = TREE_CHAIN (rli->pending_statics);
1376     }
1377
1378   /* Clean up.  */
1379   free (rli);
1380 }
1381 \f
1382 /* Calculate the mode, size, and alignment for TYPE.
1383    For an array type, calculate the element separation as well.
1384    Record TYPE on the chain of permanent or temporary types
1385    so that dbxout will find out about it.
1386
1387    TYPE_SIZE of a type is nonzero if the type has been laid out already.
1388    layout_type does nothing on such a type.
1389
1390    If the type is incomplete, its TYPE_SIZE remains zero.  */
1391
1392 void
1393 layout_type (type)
1394      tree type;
1395 {
1396   if (type == 0)
1397     abort ();
1398
1399   /* Do nothing if type has been laid out before.  */
1400   if (TYPE_SIZE (type))
1401     return;
1402
1403   switch (TREE_CODE (type))
1404     {
1405     case LANG_TYPE:
1406       /* This kind of type is the responsibility
1407          of the language-specific code.  */
1408       abort ();
1409
1410     case BOOLEAN_TYPE:  /* Used for Java, Pascal, and Chill.  */
1411       if (TYPE_PRECISION (type) == 0)
1412         TYPE_PRECISION (type) = 1; /* default to one byte/boolean.  */
1413
1414       /* ... fall through ...  */
1415
1416     case INTEGER_TYPE:
1417     case ENUMERAL_TYPE:
1418     case CHAR_TYPE:
1419       if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
1420           && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
1421         TREE_UNSIGNED (type) = 1;
1422
1423       TYPE_MODE (type) = smallest_mode_for_size (TYPE_PRECISION (type),
1424                                                  MODE_INT);
1425       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1426       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1427       break;
1428
1429     case REAL_TYPE:
1430       TYPE_MODE (type) = mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0);
1431       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1432       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1433       break;
1434
1435     case COMPLEX_TYPE:
1436       TREE_UNSIGNED (type) = TREE_UNSIGNED (TREE_TYPE (type));
1437       TYPE_MODE (type)
1438         = mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
1439                          (TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE
1440                           ? MODE_COMPLEX_INT : MODE_COMPLEX_FLOAT),
1441                          0);
1442       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1443       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1444       break;
1445
1446     case VECTOR_TYPE:
1447       {
1448         tree subtype;
1449
1450         subtype = TREE_TYPE (type);
1451         TREE_UNSIGNED (type) = TREE_UNSIGNED (subtype);
1452         TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1453         TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1454       }
1455       break;
1456
1457     case VOID_TYPE:
1458       /* This is an incomplete type and so doesn't have a size.  */
1459       TYPE_ALIGN (type) = 1;
1460       TYPE_USER_ALIGN (type) = 0;
1461       TYPE_MODE (type) = VOIDmode;
1462       break;
1463
1464     case OFFSET_TYPE:
1465       TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1466       TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1467       /* A pointer might be MODE_PARTIAL_INT,
1468          but ptrdiff_t must be integral.  */
1469       TYPE_MODE (type) = mode_for_size (POINTER_SIZE, MODE_INT, 0);
1470       break;
1471
1472     case FUNCTION_TYPE:
1473     case METHOD_TYPE:
1474       TYPE_MODE (type) = mode_for_size (2 * POINTER_SIZE, MODE_INT, 0);
1475       TYPE_SIZE (type) = bitsize_int (2 * POINTER_SIZE);
1476       TYPE_SIZE_UNIT (type) = size_int ((2 * POINTER_SIZE) / BITS_PER_UNIT);
1477       break;
1478
1479     case POINTER_TYPE:
1480     case REFERENCE_TYPE:
1481       {
1482         int nbits = ((TREE_CODE (type) == REFERENCE_TYPE
1483                       && reference_types_internal)
1484                      ? GET_MODE_BITSIZE (Pmode) : POINTER_SIZE);
1485
1486         TYPE_MODE (type) = nbits == POINTER_SIZE ? ptr_mode : Pmode;
1487         TYPE_SIZE (type) = bitsize_int (nbits);
1488         TYPE_SIZE_UNIT (type) = size_int (nbits / BITS_PER_UNIT);
1489         TREE_UNSIGNED (type) = 1;
1490         TYPE_PRECISION (type) = nbits;
1491       }
1492       break;
1493
1494     case ARRAY_TYPE:
1495       {
1496         tree index = TYPE_DOMAIN (type);
1497         tree element = TREE_TYPE (type);
1498
1499         build_pointer_type (element);
1500
1501         /* We need to know both bounds in order to compute the size.  */
1502         if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
1503             && TYPE_SIZE (element))
1504           {
1505             tree ub = TYPE_MAX_VALUE (index);
1506             tree lb = TYPE_MIN_VALUE (index);
1507             tree length;
1508             tree element_size;
1509
1510             /* The initial subtraction should happen in the original type so
1511                that (possible) negative values are handled appropriately.  */
1512             length = size_binop (PLUS_EXPR, size_one_node,
1513                                  convert (sizetype,
1514                                           fold (build (MINUS_EXPR,
1515                                                        TREE_TYPE (lb),
1516                                                        ub, lb))));
1517
1518             /* Special handling for arrays of bits (for Chill).  */
1519             element_size = TYPE_SIZE (element);
1520             if (TYPE_PACKED (type) && INTEGRAL_TYPE_P (element)
1521                 && (integer_zerop (TYPE_MAX_VALUE (element))
1522                     || integer_onep (TYPE_MAX_VALUE (element)))
1523                 && host_integerp (TYPE_MIN_VALUE (element), 1))
1524               {
1525                 HOST_WIDE_INT maxvalue
1526                   = tree_low_cst (TYPE_MAX_VALUE (element), 1);
1527                 HOST_WIDE_INT minvalue
1528                   = tree_low_cst (TYPE_MIN_VALUE (element), 1);
1529
1530                 if (maxvalue - minvalue == 1
1531                     && (maxvalue == 1 || maxvalue == 0))
1532                   element_size = integer_one_node;
1533               }
1534
1535             TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
1536                                            convert (bitsizetype, length));
1537
1538             /* If we know the size of the element, calculate the total
1539                size directly, rather than do some division thing below.
1540                This optimization helps Fortran assumed-size arrays
1541                (where the size of the array is determined at runtime)
1542                substantially.
1543                Note that we can't do this in the case where the size of
1544                the elements is one bit since TYPE_SIZE_UNIT cannot be
1545                set correctly in that case.  */
1546             if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
1547               TYPE_SIZE_UNIT (type)
1548                 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
1549           }
1550
1551         /* Now round the alignment and size,
1552            using machine-dependent criteria if any.  */
1553
1554 #ifdef ROUND_TYPE_ALIGN
1555         TYPE_ALIGN (type)
1556           = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
1557 #else
1558         TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1559 #endif
1560         TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
1561
1562 #ifdef ROUND_TYPE_SIZE
1563         if (TYPE_SIZE (type) != 0)
1564           {
1565             tree tmp
1566               = ROUND_TYPE_SIZE (type, TYPE_SIZE (type), TYPE_ALIGN (type));
1567
1568             /* If the rounding changed the size of the type, remove any
1569                pre-calculated TYPE_SIZE_UNIT.  */
1570             if (simple_cst_equal (TYPE_SIZE (type), tmp) != 1)
1571               TYPE_SIZE_UNIT (type) = NULL;
1572
1573             TYPE_SIZE (type) = tmp;
1574           }
1575 #endif
1576
1577         TYPE_MODE (type) = BLKmode;
1578         if (TYPE_SIZE (type) != 0
1579 #ifdef MEMBER_TYPE_FORCES_BLK
1580             && ! MEMBER_TYPE_FORCES_BLK (type)
1581 #endif
1582             /* BLKmode elements force BLKmode aggregate;
1583                else extract/store fields may lose.  */
1584             && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
1585                 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
1586           {
1587             /* One-element arrays get the component type's mode.  */
1588             if (simple_cst_equal (TYPE_SIZE (type),
1589                                   TYPE_SIZE (TREE_TYPE (type))))
1590               TYPE_MODE (type) = TYPE_MODE (TREE_TYPE (type));
1591             else
1592               TYPE_MODE (type)
1593                 = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1594
1595             if (TYPE_MODE (type) != BLKmode
1596                 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
1597                 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type))
1598                 && TYPE_MODE (type) != BLKmode)
1599               {
1600                 TYPE_NO_FORCE_BLK (type) = 1;
1601                 TYPE_MODE (type) = BLKmode;
1602               }
1603           }
1604         break;
1605       }
1606
1607     case RECORD_TYPE:
1608     case UNION_TYPE:
1609     case QUAL_UNION_TYPE:
1610       {
1611         tree field;
1612         record_layout_info rli;
1613
1614         /* Initialize the layout information.  */
1615         rli = start_record_layout (type);
1616
1617         /* If this is a QUAL_UNION_TYPE, we want to process the fields
1618            in the reverse order in building the COND_EXPR that denotes
1619            its size.  We reverse them again later.  */
1620         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1621           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1622
1623         /* Place all the fields.  */
1624         for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1625           place_field (rli, field);
1626
1627         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1628           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1629
1630         if (lang_adjust_rli)
1631           (*lang_adjust_rli) (rli);
1632
1633         /* Finish laying out the record.  */
1634         finish_record_layout (rli);
1635       }
1636       break;
1637
1638     case SET_TYPE:  /* Used by Chill and Pascal.  */
1639       if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST
1640           || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST)
1641         abort ();
1642       else
1643         {
1644 #ifndef SET_WORD_SIZE
1645 #define SET_WORD_SIZE BITS_PER_WORD
1646 #endif
1647           unsigned int alignment
1648             = set_alignment ? set_alignment : SET_WORD_SIZE;
1649           int size_in_bits
1650             = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
1651                - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1);
1652           int rounded_size
1653             = ((size_in_bits + alignment - 1) / alignment) * alignment;
1654
1655           if (rounded_size > (int) alignment)
1656             TYPE_MODE (type) = BLKmode;
1657           else
1658             TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1);
1659
1660           TYPE_SIZE (type) = bitsize_int (rounded_size);
1661           TYPE_SIZE_UNIT (type) = size_int (rounded_size / BITS_PER_UNIT);
1662           TYPE_ALIGN (type) = alignment;
1663           TYPE_USER_ALIGN (type) = 0;
1664           TYPE_PRECISION (type) = size_in_bits;
1665         }
1666       break;
1667
1668     case FILE_TYPE:
1669       /* The size may vary in different languages, so the language front end
1670          should fill in the size.  */
1671       TYPE_ALIGN (type) = BIGGEST_ALIGNMENT;
1672       TYPE_USER_ALIGN (type) = 0;
1673       TYPE_MODE  (type) = BLKmode;
1674       break;
1675
1676     default:
1677       abort ();
1678     }
1679
1680   /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE.  For
1681      records and unions, finish_record_layout already called this
1682      function.  */
1683   if (TREE_CODE (type) != RECORD_TYPE 
1684       && TREE_CODE (type) != UNION_TYPE
1685       && TREE_CODE (type) != QUAL_UNION_TYPE)
1686     finalize_type_size (type);
1687
1688   /* If this type is created before sizetype has been permanently set,
1689      record it so set_sizetype can fix it up.  */
1690   if (! sizetype_set)
1691     early_type_list = tree_cons (NULL_TREE, type, early_type_list);
1692
1693   /* If an alias set has been set for this aggregate when it was incomplete,
1694      force it into alias set 0.
1695      This is too conservative, but we cannot call record_component_aliases
1696      here because some frontends still change the aggregates after
1697      layout_type.  */
1698   if (AGGREGATE_TYPE_P (type) && TYPE_ALIAS_SET_KNOWN_P (type))
1699     TYPE_ALIAS_SET (type) = 0;
1700 }
1701 \f
1702 /* Create and return a type for signed integers of PRECISION bits.  */
1703
1704 tree
1705 make_signed_type (precision)
1706      int precision;
1707 {
1708   tree type = make_node (INTEGER_TYPE);
1709
1710   TYPE_PRECISION (type) = precision;
1711
1712   fixup_signed_type (type);
1713   return type;
1714 }
1715
1716 /* Create and return a type for unsigned integers of PRECISION bits.  */
1717
1718 tree
1719 make_unsigned_type (precision)
1720      int precision;
1721 {
1722   tree type = make_node (INTEGER_TYPE);
1723
1724   TYPE_PRECISION (type) = precision;
1725
1726   fixup_unsigned_type (type);
1727   return type;
1728 }
1729 \f
1730 /* Initialize sizetype and bitsizetype to a reasonable and temporary
1731    value to enable integer types to be created.  */
1732
1733 void
1734 initialize_sizetypes ()
1735 {
1736   tree t = make_node (INTEGER_TYPE);
1737
1738   /* Set this so we do something reasonable for the build_int_2 calls
1739      below.  */
1740   integer_type_node = t;
1741
1742   TYPE_MODE (t) = SImode;
1743   TYPE_ALIGN (t) = GET_MODE_ALIGNMENT (SImode);
1744   TYPE_USER_ALIGN (t) = 0;
1745   TYPE_SIZE (t) = build_int_2 (GET_MODE_BITSIZE (SImode), 0);
1746   TYPE_SIZE_UNIT (t) = build_int_2 (GET_MODE_SIZE (SImode), 0);
1747   TREE_UNSIGNED (t) = 1;
1748   TYPE_PRECISION (t) = GET_MODE_BITSIZE (SImode);
1749   TYPE_MIN_VALUE (t) = build_int_2 (0, 0);
1750   TYPE_IS_SIZETYPE (t) = 1;
1751
1752   /* 1000 avoids problems with possible overflow and is certainly
1753      larger than any size value we'd want to be storing.  */
1754   TYPE_MAX_VALUE (t) = build_int_2 (1000, 0);
1755
1756   /* These two must be different nodes because of the caching done in
1757      size_int_wide.  */
1758   sizetype = t;
1759   bitsizetype = copy_node (t);
1760   integer_type_node = 0;
1761 }
1762
1763 /* Set sizetype to TYPE, and initialize *sizetype accordingly.
1764    Also update the type of any standard type's sizes made so far.  */
1765
1766 void
1767 set_sizetype (type)
1768      tree type;
1769 {
1770   int oprecision = TYPE_PRECISION (type);
1771   /* The *bitsizetype types use a precision that avoids overflows when
1772      calculating signed sizes / offsets in bits.  However, when
1773      cross-compiling from a 32 bit to a 64 bit host, we are limited to 64 bit
1774      precision.  */
1775   int precision = MIN (oprecision + BITS_PER_UNIT_LOG + 1,
1776                        2 * HOST_BITS_PER_WIDE_INT);
1777   unsigned int i;
1778   tree t;
1779
1780   if (sizetype_set)
1781     abort ();
1782
1783   /* Make copies of nodes since we'll be setting TYPE_IS_SIZETYPE.  */
1784   sizetype = copy_node (type);
1785   TYPE_DOMAIN (sizetype) = type;
1786   TYPE_IS_SIZETYPE (sizetype) = 1;
1787   bitsizetype = make_node (INTEGER_TYPE);
1788   TYPE_NAME (bitsizetype) = TYPE_NAME (type);
1789   TYPE_PRECISION (bitsizetype) = precision;
1790   TYPE_IS_SIZETYPE (bitsizetype) = 1;
1791
1792   if (TREE_UNSIGNED (type))
1793     fixup_unsigned_type (bitsizetype);
1794   else
1795     fixup_signed_type (bitsizetype);
1796
1797   layout_type (bitsizetype);
1798
1799   if (TREE_UNSIGNED (type))
1800     {
1801       usizetype = sizetype;
1802       ubitsizetype = bitsizetype;
1803       ssizetype = copy_node (make_signed_type (oprecision));
1804       sbitsizetype = copy_node (make_signed_type (precision));
1805     }
1806   else
1807     {
1808       ssizetype = sizetype;
1809       sbitsizetype = bitsizetype;
1810       usizetype = copy_node (make_unsigned_type (oprecision));
1811       ubitsizetype = copy_node (make_unsigned_type (precision));
1812     }
1813
1814   TYPE_NAME (bitsizetype) = get_identifier ("bit_size_type");
1815
1816   /* Show is a sizetype, is a main type, and has no pointers to it.  */
1817   for (i = 0; i < ARRAY_SIZE (sizetype_tab); i++)
1818     {
1819       TYPE_IS_SIZETYPE (sizetype_tab[i]) = 1;
1820       TYPE_MAIN_VARIANT (sizetype_tab[i]) = sizetype_tab[i];
1821       TYPE_NEXT_VARIANT (sizetype_tab[i]) = 0;
1822       TYPE_POINTER_TO (sizetype_tab[i]) = 0;
1823       TYPE_REFERENCE_TO (sizetype_tab[i]) = 0;
1824     }
1825
1826   ggc_add_tree_root ((tree *) &sizetype_tab, ARRAY_SIZE (sizetype_tab));
1827
1828   /* Go down each of the types we already made and set the proper type
1829      for the sizes in them.  */
1830   for (t = early_type_list; t != 0; t = TREE_CHAIN (t))
1831     {
1832       if (TREE_CODE (TREE_VALUE (t)) != INTEGER_TYPE)
1833         abort ();
1834
1835       TREE_TYPE (TYPE_SIZE (TREE_VALUE (t))) = bitsizetype;
1836       TREE_TYPE (TYPE_SIZE_UNIT (TREE_VALUE (t))) = sizetype;
1837     }
1838
1839   early_type_list = 0;
1840   sizetype_set = 1;
1841 }
1842 \f
1843 /* Set the extreme values of TYPE based on its precision in bits,
1844    then lay it out.  Used when make_signed_type won't do
1845    because the tree code is not INTEGER_TYPE.
1846    E.g. for Pascal, when the -fsigned-char option is given.  */
1847
1848 void
1849 fixup_signed_type (type)
1850      tree type;
1851 {
1852   int precision = TYPE_PRECISION (type);
1853
1854   /* We can not represent properly constants greater then
1855      2 * HOST_BITS_PER_WIDE_INT, still we need the types
1856      as they are used by i386 vector extensions and friends.  */
1857   if (precision > HOST_BITS_PER_WIDE_INT * 2)
1858     precision = HOST_BITS_PER_WIDE_INT * 2;
1859
1860   TYPE_MIN_VALUE (type)
1861     = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1862                     ? 0 : (HOST_WIDE_INT) (-1) << (precision - 1)),
1863                    (((HOST_WIDE_INT) (-1)
1864                      << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1865                          ? precision - HOST_BITS_PER_WIDE_INT - 1
1866                          : 0))));
1867   TYPE_MAX_VALUE (type)
1868     = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1869                     ? -1 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
1870                    (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1871                     ? (((HOST_WIDE_INT) 1
1872                         << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
1873                     : 0));
1874
1875   TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
1876   TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
1877
1878   /* Lay out the type: set its alignment, size, etc.  */
1879   layout_type (type);
1880 }
1881
1882 /* Set the extreme values of TYPE based on its precision in bits,
1883    then lay it out.  This is used both in `make_unsigned_type'
1884    and for enumeral types.  */
1885
1886 void
1887 fixup_unsigned_type (type)
1888      tree type;
1889 {
1890   int precision = TYPE_PRECISION (type);
1891
1892   /* We can not represent properly constants greater then
1893      2 * HOST_BITS_PER_WIDE_INT, still we need the types
1894      as they are used by i386 vector extensions and friends.  */
1895   if (precision > HOST_BITS_PER_WIDE_INT * 2)
1896     precision = HOST_BITS_PER_WIDE_INT * 2;
1897
1898   TYPE_MIN_VALUE (type) = build_int_2 (0, 0);
1899   TYPE_MAX_VALUE (type)
1900     = build_int_2 (precision - HOST_BITS_PER_WIDE_INT >= 0
1901                    ? -1 : ((HOST_WIDE_INT) 1 << precision) - 1,
1902                    precision - HOST_BITS_PER_WIDE_INT > 0
1903                    ? ((unsigned HOST_WIDE_INT) ~0
1904                       >> (HOST_BITS_PER_WIDE_INT
1905                           - (precision - HOST_BITS_PER_WIDE_INT)))
1906                    : 0);
1907   TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
1908   TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
1909
1910   /* Lay out the type: set its alignment, size, etc.  */
1911   layout_type (type);
1912 }
1913 \f
1914 /* Find the best machine mode to use when referencing a bit field of length
1915    BITSIZE bits starting at BITPOS.
1916
1917    The underlying object is known to be aligned to a boundary of ALIGN bits.
1918    If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
1919    larger than LARGEST_MODE (usually SImode).
1920
1921    If no mode meets all these conditions, we return VOIDmode.  Otherwise, if
1922    VOLATILEP is true or SLOW_BYTE_ACCESS is false, we return the smallest
1923    mode meeting these conditions.
1924
1925    Otherwise (VOLATILEP is false and SLOW_BYTE_ACCESS is true), we return
1926    the largest mode (but a mode no wider than UNITS_PER_WORD) that meets
1927    all the conditions.  */
1928
1929 enum machine_mode
1930 get_best_mode (bitsize, bitpos, align, largest_mode, volatilep)
1931      int bitsize, bitpos;
1932      unsigned int align;
1933      enum machine_mode largest_mode;
1934      int volatilep;
1935 {
1936   enum machine_mode mode;
1937   unsigned int unit = 0;
1938
1939   /* Find the narrowest integer mode that contains the bit field.  */
1940   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
1941        mode = GET_MODE_WIDER_MODE (mode))
1942     {
1943       unit = GET_MODE_BITSIZE (mode);
1944       if ((bitpos % unit) + bitsize <= unit)
1945         break;
1946     }
1947
1948   if (mode == VOIDmode
1949       /* It is tempting to omit the following line
1950          if STRICT_ALIGNMENT is true.
1951          But that is incorrect, since if the bitfield uses part of 3 bytes
1952          and we use a 4-byte mode, we could get a spurious segv
1953          if the extra 4th byte is past the end of memory.
1954          (Though at least one Unix compiler ignores this problem:
1955          that on the Sequent 386 machine.  */
1956       || MIN (unit, BIGGEST_ALIGNMENT) > align
1957       || (largest_mode != VOIDmode && unit > GET_MODE_BITSIZE (largest_mode)))
1958     return VOIDmode;
1959
1960   if (SLOW_BYTE_ACCESS && ! volatilep)
1961     {
1962       enum machine_mode wide_mode = VOIDmode, tmode;
1963
1964       for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmode != VOIDmode;
1965            tmode = GET_MODE_WIDER_MODE (tmode))
1966         {
1967           unit = GET_MODE_BITSIZE (tmode);
1968           if (bitpos / unit == (bitpos + bitsize - 1) / unit
1969               && unit <= BITS_PER_WORD
1970               && unit <= MIN (align, BIGGEST_ALIGNMENT)
1971               && (largest_mode == VOIDmode
1972                   || unit <= GET_MODE_BITSIZE (largest_mode)))
1973             wide_mode = tmode;
1974         }
1975
1976       if (wide_mode != VOIDmode)
1977         return wide_mode;
1978     }
1979
1980   return mode;
1981 }
1982
1983 /* This function is run once to initialize stor-layout.c.  */
1984
1985 void
1986 init_stor_layout_once ()
1987 {
1988   ggc_add_tree_root (&pending_sizes, 1);
1989 }