* basic-block.h (FOR_EACH_EDGE): Record initial edge count.
[official-gcc.git] / gcc / stor-layout.c
blob772177077f2b10041c163f54ed5bad74cd76cbf7
1 /* C-compiler utilities for types and variables storage layout
2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5 This file is part of GCC.
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.
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.
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. */
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "tree.h"
28 #include "rtl.h"
29 #include "tm_p.h"
30 #include "flags.h"
31 #include "function.h"
32 #include "expr.h"
33 #include "toplev.h"
34 #include "ggc.h"
35 #include "target.h"
36 #include "langhooks.h"
37 #include "regs.h"
39 /* Set to one when set_sizetype has been called. */
40 static int sizetype_set;
42 /* List of types created before set_sizetype has been called. We do not
43 make this a GGC root since we want these nodes to be reclaimed. */
44 static tree early_type_list;
46 /* Data type for the expressions representing sizes of data types.
47 It is the first integer type laid out. */
48 tree sizetype_tab[(int) TYPE_KIND_LAST];
50 /* If nonzero, this is an upper limit on alignment of structure fields.
51 The value is measured in bits. */
52 unsigned int maximum_field_alignment;
54 /* If nonzero, the alignment of a bitstring or (power-)set value, in bits.
55 May be overridden by front-ends. */
56 unsigned int set_alignment = 0;
58 /* Nonzero if all REFERENCE_TYPEs are internal and hence should be
59 allocated in Pmode, not ptr_mode. Set only by internal_reference_types
60 called only by a front end. */
61 static int reference_types_internal = 0;
63 static void finalize_record_size (record_layout_info);
64 static void finalize_type_size (tree);
65 static void place_union_field (record_layout_info, tree);
66 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
67 static int excess_unit_span (HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT,
68 HOST_WIDE_INT, tree);
69 #endif
70 extern void debug_rli (record_layout_info);
72 /* SAVE_EXPRs for sizes of types and decls, waiting to be expanded. */
74 static GTY(()) tree pending_sizes;
76 /* Show that REFERENCE_TYPES are internal and should be Pmode. Called only
77 by front end. */
79 void
80 internal_reference_types (void)
82 reference_types_internal = 1;
85 /* Get a list of all the objects put on the pending sizes list. */
87 tree
88 get_pending_sizes (void)
90 tree chain = pending_sizes;
92 pending_sizes = 0;
93 return chain;
96 /* Add EXPR to the pending sizes list. */
98 void
99 put_pending_size (tree expr)
101 /* Strip any simple arithmetic from EXPR to see if it has an underlying
102 SAVE_EXPR. */
103 expr = skip_simple_arithmetic (expr);
105 if (TREE_CODE (expr) == SAVE_EXPR)
106 pending_sizes = tree_cons (NULL_TREE, expr, pending_sizes);
109 /* Put a chain of objects into the pending sizes list, which must be
110 empty. */
112 void
113 put_pending_sizes (tree chain)
115 if (pending_sizes)
116 abort ();
118 pending_sizes = chain;
121 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR
122 to serve as the actual size-expression for a type or decl. */
124 tree
125 variable_size (tree size)
127 tree save;
129 /* If the language-processor is to take responsibility for variable-sized
130 items (e.g., languages which have elaboration procedures like Ada),
131 just return SIZE unchanged. Likewise for self-referential sizes and
132 constant sizes. */
133 if (TREE_CONSTANT (size)
134 || lang_hooks.decls.global_bindings_p () < 0
135 || CONTAINS_PLACEHOLDER_P (size))
136 return size;
138 size = save_expr (size);
140 /* If an array with a variable number of elements is declared, and
141 the elements require destruction, we will emit a cleanup for the
142 array. That cleanup is run both on normal exit from the block
143 and in the exception-handler for the block. Normally, when code
144 is used in both ordinary code and in an exception handler it is
145 `unsaved', i.e., all SAVE_EXPRs are recalculated. However, we do
146 not wish to do that here; the array-size is the same in both
147 places. */
148 save = skip_simple_arithmetic (size);
150 if (cfun && cfun->x_dont_save_pending_sizes_p)
151 /* The front-end doesn't want us to keep a list of the expressions
152 that determine sizes for variable size objects. Trust it. */
153 return size;
155 if (lang_hooks.decls.global_bindings_p ())
157 if (TREE_CONSTANT (size))
158 error ("type size can't be explicitly evaluated");
159 else
160 error ("variable-size type declared outside of any function");
162 return size_one_node;
165 put_pending_size (save);
167 return size;
170 #ifndef MAX_FIXED_MODE_SIZE
171 #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
172 #endif
174 /* Return the machine mode to use for a nonscalar of SIZE bits. The
175 mode must be in class CLASS, and have exactly that many value bits;
176 it may have padding as well. If LIMIT is nonzero, modes of wider
177 than MAX_FIXED_MODE_SIZE will not be used. */
179 enum machine_mode
180 mode_for_size (unsigned int size, enum mode_class class, int limit)
182 enum machine_mode mode;
184 if (limit && size > MAX_FIXED_MODE_SIZE)
185 return BLKmode;
187 /* Get the first mode which has this size, in the specified class. */
188 for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
189 mode = GET_MODE_WIDER_MODE (mode))
190 if (GET_MODE_PRECISION (mode) == size)
191 return mode;
193 return BLKmode;
196 /* Similar, except passed a tree node. */
198 enum machine_mode
199 mode_for_size_tree (tree size, enum mode_class class, int limit)
201 if (TREE_CODE (size) != INTEGER_CST
202 || TREE_OVERFLOW (size)
203 /* What we really want to say here is that the size can fit in a
204 host integer, but we know there's no way we'd find a mode for
205 this many bits, so there's no point in doing the precise test. */
206 || compare_tree_int (size, 1000) > 0)
207 return BLKmode;
208 else
209 return mode_for_size (tree_low_cst (size, 1), class, limit);
212 /* Similar, but never return BLKmode; return the narrowest mode that
213 contains at least the requested number of value bits. */
215 enum machine_mode
216 smallest_mode_for_size (unsigned int size, enum mode_class class)
218 enum machine_mode mode;
220 /* Get the first mode which has at least this size, in the
221 specified class. */
222 for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
223 mode = GET_MODE_WIDER_MODE (mode))
224 if (GET_MODE_PRECISION (mode) >= size)
225 return mode;
227 abort ();
230 /* Find an integer mode of the exact same size, or BLKmode on failure. */
232 enum machine_mode
233 int_mode_for_mode (enum machine_mode mode)
235 switch (GET_MODE_CLASS (mode))
237 case MODE_INT:
238 case MODE_PARTIAL_INT:
239 break;
241 case MODE_COMPLEX_INT:
242 case MODE_COMPLEX_FLOAT:
243 case MODE_FLOAT:
244 case MODE_VECTOR_INT:
245 case MODE_VECTOR_FLOAT:
246 mode = mode_for_size (GET_MODE_BITSIZE (mode), MODE_INT, 0);
247 break;
249 case MODE_RANDOM:
250 if (mode == BLKmode)
251 break;
253 /* ... fall through ... */
255 case MODE_CC:
256 default:
257 abort ();
260 return mode;
263 /* Return the alignment of MODE. This will be bounded by 1 and
264 BIGGEST_ALIGNMENT. */
266 unsigned int
267 get_mode_alignment (enum machine_mode mode)
269 return MIN (BIGGEST_ALIGNMENT, MAX (1, mode_base_align[mode]*BITS_PER_UNIT));
272 /* Return the value of VALUE, rounded up to a multiple of DIVISOR.
273 This can only be applied to objects of a sizetype. */
275 tree
276 round_up (tree value, int divisor)
278 tree t;
280 /* If divisor is a power of two, simplify this to bit manipulation. */
281 if (divisor == (divisor & -divisor))
283 t = size_int_type (divisor - 1, TREE_TYPE (value));
284 value = size_binop (PLUS_EXPR, value, t);
285 t = size_int_type (-divisor, TREE_TYPE (value));
286 value = size_binop (BIT_AND_EXPR, value, t);
288 else
290 t = size_int_type (divisor, TREE_TYPE (value));
291 value = size_binop (CEIL_DIV_EXPR, value, t);
292 value = size_binop (MULT_EXPR, value, t);
295 return value;
298 /* Likewise, but round down. */
300 tree
301 round_down (tree value, int divisor)
303 tree t;
305 /* If divisor is a power of two, simplify this to bit manipulation. */
306 if (divisor == (divisor & -divisor))
308 t = size_int_type (-divisor, TREE_TYPE (value));
309 value = size_binop (BIT_AND_EXPR, value, t);
311 else
313 t = size_int_type (divisor, TREE_TYPE (value));
314 value = size_binop (FLOOR_DIV_EXPR, value, t);
315 value = size_binop (MULT_EXPR, value, t);
318 return value;
321 /* Subroutine of layout_decl: Force alignment required for the data type.
322 But if the decl itself wants greater alignment, don't override that. */
324 static inline void
325 do_type_align (tree type, tree decl)
327 if (TYPE_ALIGN (type) > DECL_ALIGN (decl))
329 DECL_ALIGN (decl) = TYPE_ALIGN (type);
330 if (TREE_CODE (decl) == FIELD_DECL)
331 DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type);
335 /* Set the size, mode and alignment of a ..._DECL node.
336 TYPE_DECL does need this for C++.
337 Note that LABEL_DECL and CONST_DECL nodes do not need this,
338 and FUNCTION_DECL nodes have them set up in a special (and simple) way.
339 Don't call layout_decl for them.
341 KNOWN_ALIGN is the amount of alignment we can assume this
342 decl has with no special effort. It is relevant only for FIELD_DECLs
343 and depends on the previous fields.
344 All that matters about KNOWN_ALIGN is which powers of 2 divide it.
345 If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
346 the record will be aligned to suit. */
348 void
349 layout_decl (tree decl, unsigned int known_align)
351 tree type = TREE_TYPE (decl);
352 enum tree_code code = TREE_CODE (decl);
353 rtx rtl = NULL_RTX;
355 if (code == CONST_DECL)
356 return;
357 else if (code != VAR_DECL && code != PARM_DECL && code != RESULT_DECL
358 && code != TYPE_DECL && code != FIELD_DECL)
359 abort ();
361 rtl = DECL_RTL_IF_SET (decl);
363 if (type == error_mark_node)
364 type = void_type_node;
366 /* Usually the size and mode come from the data type without change,
367 however, the front-end may set the explicit width of the field, so its
368 size may not be the same as the size of its type. This happens with
369 bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
370 also happens with other fields. For example, the C++ front-end creates
371 zero-sized fields corresponding to empty base classes, and depends on
372 layout_type setting DECL_FIELD_BITPOS correctly for the field. Set the
373 size in bytes from the size in bits. If we have already set the mode,
374 don't set it again since we can be called twice for FIELD_DECLs. */
376 DECL_UNSIGNED (decl) = TYPE_UNSIGNED (type);
377 if (DECL_MODE (decl) == VOIDmode)
378 DECL_MODE (decl) = TYPE_MODE (type);
380 if (DECL_SIZE (decl) == 0)
382 DECL_SIZE (decl) = TYPE_SIZE (type);
383 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type);
385 else if (DECL_SIZE_UNIT (decl) == 0)
386 DECL_SIZE_UNIT (decl)
387 = convert (sizetype, size_binop (CEIL_DIV_EXPR, DECL_SIZE (decl),
388 bitsize_unit_node));
390 if (code != FIELD_DECL)
391 /* For non-fields, update the alignment from the type. */
392 do_type_align (type, decl);
393 else
394 /* For fields, it's a bit more complicated... */
396 bool old_user_align = DECL_USER_ALIGN (decl);
398 if (DECL_BIT_FIELD (decl))
400 DECL_BIT_FIELD_TYPE (decl) = type;
402 /* A zero-length bit-field affects the alignment of the next
403 field. */
404 if (integer_zerop (DECL_SIZE (decl))
405 && ! DECL_PACKED (decl)
406 && ! targetm.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl)))
408 #ifdef PCC_BITFIELD_TYPE_MATTERS
409 if (PCC_BITFIELD_TYPE_MATTERS)
410 do_type_align (type, decl);
411 else
412 #endif
414 #ifdef EMPTY_FIELD_BOUNDARY
415 if (EMPTY_FIELD_BOUNDARY > DECL_ALIGN (decl))
417 DECL_ALIGN (decl) = EMPTY_FIELD_BOUNDARY;
418 DECL_USER_ALIGN (decl) = 0;
420 #endif
424 /* See if we can use an ordinary integer mode for a bit-field.
425 Conditions are: a fixed size that is correct for another mode
426 and occupying a complete byte or bytes on proper boundary. */
427 if (TYPE_SIZE (type) != 0
428 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
429 && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
431 enum machine_mode xmode
432 = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
434 if (xmode != BLKmode
435 && (known_align == 0
436 || known_align >= GET_MODE_ALIGNMENT (xmode)))
438 DECL_ALIGN (decl) = MAX (GET_MODE_ALIGNMENT (xmode),
439 DECL_ALIGN (decl));
440 DECL_MODE (decl) = xmode;
441 DECL_BIT_FIELD (decl) = 0;
445 /* Turn off DECL_BIT_FIELD if we won't need it set. */
446 if (TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
447 && known_align >= TYPE_ALIGN (type)
448 && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
449 DECL_BIT_FIELD (decl) = 0;
451 else if (DECL_PACKED (decl) && DECL_USER_ALIGN (decl))
452 /* Don't touch DECL_ALIGN. For other packed fields, go ahead and
453 round up; we'll reduce it again below. We want packing to
454 supersede USER_ALIGN inherited from the type, but defer to
455 alignment explicitly specified on the field decl. */;
456 else
457 do_type_align (type, decl);
459 /* If the field is of variable size, we can't misalign it since we
460 have no way to make a temporary to align the result. But this
461 isn't an issue if the decl is not addressable. Likewise if it
462 is of unknown size.
464 Note that do_type_align may set DECL_USER_ALIGN, so we need to
465 check old_user_align instead. */
466 if (DECL_PACKED (decl)
467 && !old_user_align
468 && (DECL_NONADDRESSABLE_P (decl)
469 || DECL_SIZE_UNIT (decl) == 0
470 || TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST))
471 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
473 if (! DECL_USER_ALIGN (decl) && ! DECL_PACKED (decl))
475 /* Some targets (i.e. i386, VMS) limit struct field alignment
476 to a lower boundary than alignment of variables unless
477 it was overridden by attribute aligned. */
478 #ifdef BIGGEST_FIELD_ALIGNMENT
479 DECL_ALIGN (decl)
480 = MIN (DECL_ALIGN (decl), (unsigned) BIGGEST_FIELD_ALIGNMENT);
481 #endif
482 #ifdef ADJUST_FIELD_ALIGN
483 DECL_ALIGN (decl) = ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl));
484 #endif
487 /* Should this be controlled by DECL_USER_ALIGN, too? */
488 if (maximum_field_alignment != 0)
489 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
492 /* Evaluate nonconstant size only once, either now or as soon as safe. */
493 if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
494 DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
495 if (DECL_SIZE_UNIT (decl) != 0
496 && TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST)
497 DECL_SIZE_UNIT (decl) = variable_size (DECL_SIZE_UNIT (decl));
499 /* If requested, warn about definitions of large data objects. */
500 if (warn_larger_than
501 && (code == VAR_DECL || code == PARM_DECL)
502 && ! DECL_EXTERNAL (decl))
504 tree size = DECL_SIZE_UNIT (decl);
506 if (size != 0 && TREE_CODE (size) == INTEGER_CST
507 && compare_tree_int (size, larger_than_size) > 0)
509 int size_as_int = TREE_INT_CST_LOW (size);
511 if (compare_tree_int (size, size_as_int) == 0)
512 warning ("%Jsize of '%D' is %d bytes", decl, decl, size_as_int);
513 else
514 warning ("%Jsize of '%D' is larger than %d bytes",
515 decl, decl, larger_than_size);
519 /* If the RTL was already set, update its mode and mem attributes. */
520 if (rtl)
522 PUT_MODE (rtl, DECL_MODE (decl));
523 SET_DECL_RTL (decl, 0);
524 set_mem_attributes (rtl, decl, 1);
525 SET_DECL_RTL (decl, rtl);
529 /* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
530 a previous call to layout_decl and calls it again. */
532 void
533 relayout_decl (tree decl)
535 DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
536 DECL_MODE (decl) = VOIDmode;
537 DECL_ALIGN (decl) = 0;
538 SET_DECL_RTL (decl, 0);
540 layout_decl (decl, 0);
543 /* Hook for a front-end function that can modify the record layout as needed
544 immediately before it is finalized. */
546 void (*lang_adjust_rli) (record_layout_info) = 0;
548 void
549 set_lang_adjust_rli (void (*f) (record_layout_info))
551 lang_adjust_rli = f;
554 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
555 QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which
556 is to be passed to all other layout functions for this record. It is the
557 responsibility of the caller to call `free' for the storage returned.
558 Note that garbage collection is not permitted until we finish laying
559 out the record. */
561 record_layout_info
562 start_record_layout (tree t)
564 record_layout_info rli = xmalloc (sizeof (struct record_layout_info_s));
566 rli->t = t;
568 /* If the type has a minimum specified alignment (via an attribute
569 declaration, for example) use it -- otherwise, start with a
570 one-byte alignment. */
571 rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
572 rli->unpacked_align = rli->record_align;
573 rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
575 #ifdef STRUCTURE_SIZE_BOUNDARY
576 /* Packed structures don't need to have minimum size. */
577 if (! TYPE_PACKED (t))
578 rli->record_align = MAX (rli->record_align, (unsigned) STRUCTURE_SIZE_BOUNDARY);
579 #endif
581 rli->offset = size_zero_node;
582 rli->bitpos = bitsize_zero_node;
583 rli->prev_field = 0;
584 rli->pending_statics = 0;
585 rli->packed_maybe_necessary = 0;
587 return rli;
590 /* These four routines perform computations that convert between
591 the offset/bitpos forms and byte and bit offsets. */
593 tree
594 bit_from_pos (tree offset, tree bitpos)
596 return size_binop (PLUS_EXPR, bitpos,
597 size_binop (MULT_EXPR, convert (bitsizetype, offset),
598 bitsize_unit_node));
601 tree
602 byte_from_pos (tree offset, tree bitpos)
604 return size_binop (PLUS_EXPR, offset,
605 convert (sizetype,
606 size_binop (TRUNC_DIV_EXPR, bitpos,
607 bitsize_unit_node)));
610 void
611 pos_from_bit (tree *poffset, tree *pbitpos, unsigned int off_align,
612 tree pos)
614 *poffset = size_binop (MULT_EXPR,
615 convert (sizetype,
616 size_binop (FLOOR_DIV_EXPR, pos,
617 bitsize_int (off_align))),
618 size_int (off_align / BITS_PER_UNIT));
619 *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, bitsize_int (off_align));
622 /* Given a pointer to bit and byte offsets and an offset alignment,
623 normalize the offsets so they are within the alignment. */
625 void
626 normalize_offset (tree *poffset, tree *pbitpos, unsigned int off_align)
628 /* If the bit position is now larger than it should be, adjust it
629 downwards. */
630 if (compare_tree_int (*pbitpos, off_align) >= 0)
632 tree extra_aligns = size_binop (FLOOR_DIV_EXPR, *pbitpos,
633 bitsize_int (off_align));
635 *poffset
636 = size_binop (PLUS_EXPR, *poffset,
637 size_binop (MULT_EXPR, convert (sizetype, extra_aligns),
638 size_int (off_align / BITS_PER_UNIT)));
640 *pbitpos
641 = size_binop (FLOOR_MOD_EXPR, *pbitpos, bitsize_int (off_align));
645 /* Print debugging information about the information in RLI. */
647 void
648 debug_rli (record_layout_info rli)
650 print_node_brief (stderr, "type", rli->t, 0);
651 print_node_brief (stderr, "\noffset", rli->offset, 0);
652 print_node_brief (stderr, " bitpos", rli->bitpos, 0);
654 fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
655 rli->record_align, rli->unpacked_align,
656 rli->offset_align);
657 if (rli->packed_maybe_necessary)
658 fprintf (stderr, "packed may be necessary\n");
660 if (rli->pending_statics)
662 fprintf (stderr, "pending statics:\n");
663 debug_tree (rli->pending_statics);
667 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
668 BITPOS if necessary to keep BITPOS below OFFSET_ALIGN. */
670 void
671 normalize_rli (record_layout_info rli)
673 normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
676 /* Returns the size in bytes allocated so far. */
678 tree
679 rli_size_unit_so_far (record_layout_info rli)
681 return byte_from_pos (rli->offset, rli->bitpos);
684 /* Returns the size in bits allocated so far. */
686 tree
687 rli_size_so_far (record_layout_info rli)
689 return bit_from_pos (rli->offset, rli->bitpos);
692 /* FIELD is about to be added to RLI->T. The alignment (in bits) of
693 the next available location is given by KNOWN_ALIGN. Update the
694 variable alignment fields in RLI, and return the alignment to give
695 the FIELD. */
697 unsigned int
698 update_alignment_for_field (record_layout_info rli, tree field,
699 unsigned int known_align)
701 /* The alignment required for FIELD. */
702 unsigned int desired_align;
703 /* The type of this field. */
704 tree type = TREE_TYPE (field);
705 /* True if the field was explicitly aligned by the user. */
706 bool user_align;
707 bool is_bitfield;
709 /* Lay out the field so we know what alignment it needs. */
710 layout_decl (field, known_align);
711 desired_align = DECL_ALIGN (field);
712 user_align = DECL_USER_ALIGN (field);
714 is_bitfield = (type != error_mark_node
715 && DECL_BIT_FIELD_TYPE (field)
716 && ! integer_zerop (TYPE_SIZE (type)));
718 /* Record must have at least as much alignment as any field.
719 Otherwise, the alignment of the field within the record is
720 meaningless. */
721 if (is_bitfield && targetm.ms_bitfield_layout_p (rli->t))
723 /* Here, the alignment of the underlying type of a bitfield can
724 affect the alignment of a record; even a zero-sized field
725 can do this. The alignment should be to the alignment of
726 the type, except that for zero-size bitfields this only
727 applies if there was an immediately prior, nonzero-size
728 bitfield. (That's the way it is, experimentally.) */
729 if (! integer_zerop (DECL_SIZE (field))
730 ? ! DECL_PACKED (field)
731 : (rli->prev_field
732 && DECL_BIT_FIELD_TYPE (rli->prev_field)
733 && ! integer_zerop (DECL_SIZE (rli->prev_field))))
735 unsigned int type_align = TYPE_ALIGN (type);
736 type_align = MAX (type_align, desired_align);
737 if (maximum_field_alignment != 0)
738 type_align = MIN (type_align, maximum_field_alignment);
739 rli->record_align = MAX (rli->record_align, type_align);
740 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
743 #ifdef PCC_BITFIELD_TYPE_MATTERS
744 else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
746 /* Named bit-fields cause the entire structure to have the
747 alignment implied by their type. Some targets also apply the same
748 rules to unnamed bitfields. */
749 if (DECL_NAME (field) != 0
750 || targetm.align_anon_bitfield ())
752 unsigned int type_align = TYPE_ALIGN (type);
754 #ifdef ADJUST_FIELD_ALIGN
755 if (! TYPE_USER_ALIGN (type))
756 type_align = ADJUST_FIELD_ALIGN (field, type_align);
757 #endif
759 if (maximum_field_alignment != 0)
760 type_align = MIN (type_align, maximum_field_alignment);
761 else if (DECL_PACKED (field))
762 type_align = MIN (type_align, BITS_PER_UNIT);
764 /* The alignment of the record is increased to the maximum
765 of the current alignment, the alignment indicated on the
766 field (i.e., the alignment specified by an __aligned__
767 attribute), and the alignment indicated by the type of
768 the field. */
769 rli->record_align = MAX (rli->record_align, desired_align);
770 rli->record_align = MAX (rli->record_align, type_align);
772 if (warn_packed)
773 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
774 user_align |= TYPE_USER_ALIGN (type);
777 #endif
778 else
780 rli->record_align = MAX (rli->record_align, desired_align);
781 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
784 TYPE_USER_ALIGN (rli->t) |= user_align;
786 return desired_align;
789 /* Called from place_field to handle unions. */
791 static void
792 place_union_field (record_layout_info rli, tree field)
794 update_alignment_for_field (rli, field, /*known_align=*/0);
796 DECL_FIELD_OFFSET (field) = size_zero_node;
797 DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
798 SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
800 /* We assume the union's size will be a multiple of a byte so we don't
801 bother with BITPOS. */
802 if (TREE_CODE (rli->t) == UNION_TYPE)
803 rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
804 else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
805 rli->offset = fold (build3 (COND_EXPR, sizetype,
806 DECL_QUALIFIER (field),
807 DECL_SIZE_UNIT (field), rli->offset));
810 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
811 /* A bitfield of SIZE with a required access alignment of ALIGN is allocated
812 at BYTE_OFFSET / BIT_OFFSET. Return nonzero if the field would span more
813 units of alignment than the underlying TYPE. */
814 static int
815 excess_unit_span (HOST_WIDE_INT byte_offset, HOST_WIDE_INT bit_offset,
816 HOST_WIDE_INT size, HOST_WIDE_INT align, tree type)
818 /* Note that the calculation of OFFSET might overflow; we calculate it so
819 that we still get the right result as long as ALIGN is a power of two. */
820 unsigned HOST_WIDE_INT offset = byte_offset * BITS_PER_UNIT + bit_offset;
822 offset = offset % align;
823 return ((offset + size + align - 1) / align
824 > ((unsigned HOST_WIDE_INT) tree_low_cst (TYPE_SIZE (type), 1)
825 / align));
827 #endif
829 /* RLI contains information about the layout of a RECORD_TYPE. FIELD
830 is a FIELD_DECL to be added after those fields already present in
831 T. (FIELD is not actually added to the TYPE_FIELDS list here;
832 callers that desire that behavior must manually perform that step.) */
834 void
835 place_field (record_layout_info rli, tree field)
837 /* The alignment required for FIELD. */
838 unsigned int desired_align;
839 /* The alignment FIELD would have if we just dropped it into the
840 record as it presently stands. */
841 unsigned int known_align;
842 unsigned int actual_align;
843 /* The type of this field. */
844 tree type = TREE_TYPE (field);
846 if (TREE_CODE (field) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK)
847 return;
849 /* If FIELD is static, then treat it like a separate variable, not
850 really like a structure field. If it is a FUNCTION_DECL, it's a
851 method. In both cases, all we do is lay out the decl, and we do
852 it *after* the record is laid out. */
853 if (TREE_CODE (field) == VAR_DECL)
855 rli->pending_statics = tree_cons (NULL_TREE, field,
856 rli->pending_statics);
857 return;
860 /* Enumerators and enum types which are local to this class need not
861 be laid out. Likewise for initialized constant fields. */
862 else if (TREE_CODE (field) != FIELD_DECL)
863 return;
865 /* Unions are laid out very differently than records, so split
866 that code off to another function. */
867 else if (TREE_CODE (rli->t) != RECORD_TYPE)
869 place_union_field (rli, field);
870 return;
873 /* Work out the known alignment so far. Note that A & (-A) is the
874 value of the least-significant bit in A that is one. */
875 if (! integer_zerop (rli->bitpos))
876 known_align = (tree_low_cst (rli->bitpos, 1)
877 & - tree_low_cst (rli->bitpos, 1));
878 else if (integer_zerop (rli->offset))
879 known_align = BIGGEST_ALIGNMENT;
880 else if (host_integerp (rli->offset, 1))
881 known_align = (BITS_PER_UNIT
882 * (tree_low_cst (rli->offset, 1)
883 & - tree_low_cst (rli->offset, 1)));
884 else
885 known_align = rli->offset_align;
887 desired_align = update_alignment_for_field (rli, field, known_align);
889 if (warn_packed && DECL_PACKED (field))
891 if (known_align >= TYPE_ALIGN (type))
893 if (TYPE_ALIGN (type) > desired_align)
895 if (STRICT_ALIGNMENT)
896 warning ("%Jpacked attribute causes inefficient alignment "
897 "for '%D'", field, field);
898 else
899 warning ("%Jpacked attribute is unnecessary for '%D'",
900 field, field);
903 else
904 rli->packed_maybe_necessary = 1;
907 /* Does this field automatically have alignment it needs by virtue
908 of the fields that precede it and the record's own alignment? */
909 if (known_align < desired_align)
911 /* No, we need to skip space before this field.
912 Bump the cumulative size to multiple of field alignment. */
914 if (warn_padded)
915 warning ("%Jpadding struct to align '%D'", field, field);
917 /* If the alignment is still within offset_align, just align
918 the bit position. */
919 if (desired_align < rli->offset_align)
920 rli->bitpos = round_up (rli->bitpos, desired_align);
921 else
923 /* First adjust OFFSET by the partial bits, then align. */
924 rli->offset
925 = size_binop (PLUS_EXPR, rli->offset,
926 convert (sizetype,
927 size_binop (CEIL_DIV_EXPR, rli->bitpos,
928 bitsize_unit_node)));
929 rli->bitpos = bitsize_zero_node;
931 rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
934 if (! TREE_CONSTANT (rli->offset))
935 rli->offset_align = desired_align;
939 /* Handle compatibility with PCC. Note that if the record has any
940 variable-sized fields, we need not worry about compatibility. */
941 #ifdef PCC_BITFIELD_TYPE_MATTERS
942 if (PCC_BITFIELD_TYPE_MATTERS
943 && ! targetm.ms_bitfield_layout_p (rli->t)
944 && TREE_CODE (field) == FIELD_DECL
945 && type != error_mark_node
946 && DECL_BIT_FIELD (field)
947 && ! DECL_PACKED (field)
948 && maximum_field_alignment == 0
949 && ! integer_zerop (DECL_SIZE (field))
950 && host_integerp (DECL_SIZE (field), 1)
951 && host_integerp (rli->offset, 1)
952 && host_integerp (TYPE_SIZE (type), 1))
954 unsigned int type_align = TYPE_ALIGN (type);
955 tree dsize = DECL_SIZE (field);
956 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
957 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
958 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
960 #ifdef ADJUST_FIELD_ALIGN
961 if (! TYPE_USER_ALIGN (type))
962 type_align = ADJUST_FIELD_ALIGN (field, type_align);
963 #endif
965 /* A bit field may not span more units of alignment of its type
966 than its type itself. Advance to next boundary if necessary. */
967 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
968 rli->bitpos = round_up (rli->bitpos, type_align);
970 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
972 #endif
974 #ifdef BITFIELD_NBYTES_LIMITED
975 if (BITFIELD_NBYTES_LIMITED
976 && ! targetm.ms_bitfield_layout_p (rli->t)
977 && TREE_CODE (field) == FIELD_DECL
978 && type != error_mark_node
979 && DECL_BIT_FIELD_TYPE (field)
980 && ! DECL_PACKED (field)
981 && ! integer_zerop (DECL_SIZE (field))
982 && host_integerp (DECL_SIZE (field), 1)
983 && host_integerp (rli->offset, 1)
984 && host_integerp (TYPE_SIZE (type), 1))
986 unsigned int type_align = TYPE_ALIGN (type);
987 tree dsize = DECL_SIZE (field);
988 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
989 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
990 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
992 #ifdef ADJUST_FIELD_ALIGN
993 if (! TYPE_USER_ALIGN (type))
994 type_align = ADJUST_FIELD_ALIGN (field, type_align);
995 #endif
997 if (maximum_field_alignment != 0)
998 type_align = MIN (type_align, maximum_field_alignment);
999 /* ??? This test is opposite the test in the containing if
1000 statement, so this code is unreachable currently. */
1001 else if (DECL_PACKED (field))
1002 type_align = MIN (type_align, BITS_PER_UNIT);
1004 /* A bit field may not span the unit of alignment of its type.
1005 Advance to next boundary if necessary. */
1006 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
1007 rli->bitpos = round_up (rli->bitpos, type_align);
1009 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
1011 #endif
1013 /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.
1014 A subtlety:
1015 When a bit field is inserted into a packed record, the whole
1016 size of the underlying type is used by one or more same-size
1017 adjacent bitfields. (That is, if its long:3, 32 bits is
1018 used in the record, and any additional adjacent long bitfields are
1019 packed into the same chunk of 32 bits. However, if the size
1020 changes, a new field of that size is allocated.) In an unpacked
1021 record, this is the same as using alignment, but not equivalent
1022 when packing.
1024 Note: for compatibility, we use the type size, not the type alignment
1025 to determine alignment, since that matches the documentation */
1027 if (targetm.ms_bitfield_layout_p (rli->t)
1028 && ((DECL_BIT_FIELD_TYPE (field) && ! DECL_PACKED (field))
1029 || (rli->prev_field && ! DECL_PACKED (rli->prev_field))))
1031 /* At this point, either the prior or current are bitfields,
1032 (possibly both), and we're dealing with MS packing. */
1033 tree prev_saved = rli->prev_field;
1035 /* Is the prior field a bitfield? If so, handle "runs" of same
1036 type size fields. */
1037 if (rli->prev_field /* necessarily a bitfield if it exists. */)
1039 /* If both are bitfields, nonzero, and the same size, this is
1040 the middle of a run. Zero declared size fields are special
1041 and handled as "end of run". (Note: it's nonzero declared
1042 size, but equal type sizes!) (Since we know that both
1043 the current and previous fields are bitfields by the
1044 time we check it, DECL_SIZE must be present for both.) */
1045 if (DECL_BIT_FIELD_TYPE (field)
1046 && !integer_zerop (DECL_SIZE (field))
1047 && !integer_zerop (DECL_SIZE (rli->prev_field))
1048 && host_integerp (DECL_SIZE (rli->prev_field), 0)
1049 && host_integerp (TYPE_SIZE (type), 0)
1050 && simple_cst_equal (TYPE_SIZE (type),
1051 TYPE_SIZE (TREE_TYPE (rli->prev_field))))
1053 /* We're in the middle of a run of equal type size fields; make
1054 sure we realign if we run out of bits. (Not decl size,
1055 type size!) */
1056 HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 0);
1058 if (rli->remaining_in_alignment < bitsize)
1060 /* out of bits; bump up to next 'word'. */
1061 rli->offset = DECL_FIELD_OFFSET (rli->prev_field);
1062 rli->bitpos
1063 = size_binop (PLUS_EXPR, TYPE_SIZE (type),
1064 DECL_FIELD_BIT_OFFSET (rli->prev_field));
1065 rli->prev_field = field;
1066 rli->remaining_in_alignment
1067 = tree_low_cst (TYPE_SIZE (type), 0);
1070 rli->remaining_in_alignment -= bitsize;
1072 else
1074 /* End of a run: if leaving a run of bitfields of the same type
1075 size, we have to "use up" the rest of the bits of the type
1076 size.
1078 Compute the new position as the sum of the size for the prior
1079 type and where we first started working on that type.
1080 Note: since the beginning of the field was aligned then
1081 of course the end will be too. No round needed. */
1083 if (!integer_zerop (DECL_SIZE (rli->prev_field)))
1085 tree type_size = TYPE_SIZE (TREE_TYPE (rli->prev_field));
1087 rli->bitpos
1088 = size_binop (PLUS_EXPR, type_size,
1089 DECL_FIELD_BIT_OFFSET (rli->prev_field));
1091 else
1092 /* We "use up" size zero fields; the code below should behave
1093 as if the prior field was not a bitfield. */
1094 prev_saved = NULL;
1096 /* Cause a new bitfield to be captured, either this time (if
1097 currently a bitfield) or next time we see one. */
1098 if (!DECL_BIT_FIELD_TYPE(field)
1099 || integer_zerop (DECL_SIZE (field)))
1100 rli->prev_field = NULL;
1103 normalize_rli (rli);
1106 /* If we're starting a new run of same size type bitfields
1107 (or a run of non-bitfields), set up the "first of the run"
1108 fields.
1110 That is, if the current field is not a bitfield, or if there
1111 was a prior bitfield the type sizes differ, or if there wasn't
1112 a prior bitfield the size of the current field is nonzero.
1114 Note: we must be sure to test ONLY the type size if there was
1115 a prior bitfield and ONLY for the current field being zero if
1116 there wasn't. */
1118 if (!DECL_BIT_FIELD_TYPE (field)
1119 || ( prev_saved != NULL
1120 ? !simple_cst_equal (TYPE_SIZE (type),
1121 TYPE_SIZE (TREE_TYPE (prev_saved)))
1122 : !integer_zerop (DECL_SIZE (field)) ))
1124 /* Never smaller than a byte for compatibility. */
1125 unsigned int type_align = BITS_PER_UNIT;
1127 /* (When not a bitfield), we could be seeing a flex array (with
1128 no DECL_SIZE). Since we won't be using remaining_in_alignment
1129 until we see a bitfield (and come by here again) we just skip
1130 calculating it. */
1131 if (DECL_SIZE (field) != NULL
1132 && host_integerp (TYPE_SIZE (TREE_TYPE (field)), 0)
1133 && host_integerp (DECL_SIZE (field), 0))
1134 rli->remaining_in_alignment
1135 = tree_low_cst (TYPE_SIZE (TREE_TYPE(field)), 0)
1136 - tree_low_cst (DECL_SIZE (field), 0);
1138 /* Now align (conventionally) for the new type. */
1139 if (!DECL_PACKED(field))
1140 type_align = MAX(TYPE_ALIGN (type), type_align);
1142 if (prev_saved
1143 && DECL_BIT_FIELD_TYPE (prev_saved)
1144 /* If the previous bit-field is zero-sized, we've already
1145 accounted for its alignment needs (or ignored it, if
1146 appropriate) while placing it. */
1147 && ! integer_zerop (DECL_SIZE (prev_saved)))
1148 type_align = MAX (type_align,
1149 TYPE_ALIGN (TREE_TYPE (prev_saved)));
1151 if (maximum_field_alignment != 0)
1152 type_align = MIN (type_align, maximum_field_alignment);
1154 rli->bitpos = round_up (rli->bitpos, type_align);
1156 /* If we really aligned, don't allow subsequent bitfields
1157 to undo that. */
1158 rli->prev_field = NULL;
1162 /* Offset so far becomes the position of this field after normalizing. */
1163 normalize_rli (rli);
1164 DECL_FIELD_OFFSET (field) = rli->offset;
1165 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1166 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1168 /* If this field ended up more aligned than we thought it would be (we
1169 approximate this by seeing if its position changed), lay out the field
1170 again; perhaps we can use an integral mode for it now. */
1171 if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
1172 actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1173 & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
1174 else if (integer_zerop (DECL_FIELD_OFFSET (field)))
1175 actual_align = BIGGEST_ALIGNMENT;
1176 else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
1177 actual_align = (BITS_PER_UNIT
1178 * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1179 & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
1180 else
1181 actual_align = DECL_OFFSET_ALIGN (field);
1183 if (known_align != actual_align)
1184 layout_decl (field, actual_align);
1186 /* Only the MS bitfields use this. */
1187 if (rli->prev_field == NULL && DECL_BIT_FIELD_TYPE(field))
1188 rli->prev_field = field;
1190 /* Now add size of this field to the size of the record. If the size is
1191 not constant, treat the field as being a multiple of bytes and just
1192 adjust the offset, resetting the bit position. Otherwise, apportion the
1193 size amongst the bit position and offset. First handle the case of an
1194 unspecified size, which can happen when we have an invalid nested struct
1195 definition, such as struct j { struct j { int i; } }. The error message
1196 is printed in finish_struct. */
1197 if (DECL_SIZE (field) == 0)
1198 /* Do nothing. */;
1199 else if (TREE_CODE (DECL_SIZE_UNIT (field)) != INTEGER_CST
1200 || TREE_CONSTANT_OVERFLOW (DECL_SIZE_UNIT (field)))
1202 rli->offset
1203 = size_binop (PLUS_EXPR, rli->offset,
1204 convert (sizetype,
1205 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1206 bitsize_unit_node)));
1207 rli->offset
1208 = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1209 rli->bitpos = bitsize_zero_node;
1210 rli->offset_align = MIN (rli->offset_align, desired_align);
1212 else
1214 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1215 normalize_rli (rli);
1219 /* Assuming that all the fields have been laid out, this function uses
1220 RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1221 indicated by RLI. */
1223 static void
1224 finalize_record_size (record_layout_info rli)
1226 tree unpadded_size, unpadded_size_unit;
1228 /* Now we want just byte and bit offsets, so set the offset alignment
1229 to be a byte and then normalize. */
1230 rli->offset_align = BITS_PER_UNIT;
1231 normalize_rli (rli);
1233 /* Determine the desired alignment. */
1234 #ifdef ROUND_TYPE_ALIGN
1235 TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
1236 rli->record_align);
1237 #else
1238 TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
1239 #endif
1241 /* Compute the size so far. Be sure to allow for extra bits in the
1242 size in bytes. We have guaranteed above that it will be no more
1243 than a single byte. */
1244 unpadded_size = rli_size_so_far (rli);
1245 unpadded_size_unit = rli_size_unit_so_far (rli);
1246 if (! integer_zerop (rli->bitpos))
1247 unpadded_size_unit
1248 = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
1250 /* Round the size up to be a multiple of the required alignment. */
1251 TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
1252 TYPE_SIZE_UNIT (rli->t) = round_up (unpadded_size_unit,
1253 TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
1255 if (warn_padded && TREE_CONSTANT (unpadded_size)
1256 && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
1257 warning ("padding struct size to alignment boundary");
1259 if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1260 && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1261 && TREE_CONSTANT (unpadded_size))
1263 tree unpacked_size;
1265 #ifdef ROUND_TYPE_ALIGN
1266 rli->unpacked_align
1267 = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
1268 #else
1269 rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
1270 #endif
1272 unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
1273 if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
1275 TYPE_PACKED (rli->t) = 0;
1277 if (TYPE_NAME (rli->t))
1279 const char *name;
1281 if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1282 name = IDENTIFIER_POINTER (TYPE_NAME (rli->t));
1283 else
1284 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
1286 if (STRICT_ALIGNMENT)
1287 warning ("packed attribute causes inefficient alignment for `%s'", name);
1288 else
1289 warning ("packed attribute is unnecessary for `%s'", name);
1291 else
1293 if (STRICT_ALIGNMENT)
1294 warning ("packed attribute causes inefficient alignment");
1295 else
1296 warning ("packed attribute is unnecessary");
1302 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE). */
1304 void
1305 compute_record_mode (tree type)
1307 tree field;
1308 enum machine_mode mode = VOIDmode;
1310 /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1311 However, if possible, we use a mode that fits in a register
1312 instead, in order to allow for better optimization down the
1313 line. */
1314 TYPE_MODE (type) = BLKmode;
1316 if (! host_integerp (TYPE_SIZE (type), 1))
1317 return;
1319 /* A record which has any BLKmode members must itself be
1320 BLKmode; it can't go in a register. Unless the member is
1321 BLKmode only because it isn't aligned. */
1322 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1324 if (TREE_CODE (field) != FIELD_DECL)
1325 continue;
1327 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1328 || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1329 && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field))
1330 && !(TYPE_SIZE (TREE_TYPE (field)) != 0
1331 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))))
1332 || ! host_integerp (bit_position (field), 1)
1333 || DECL_SIZE (field) == 0
1334 || ! host_integerp (DECL_SIZE (field), 1))
1335 return;
1337 /* If this field is the whole struct, remember its mode so
1338 that, say, we can put a double in a class into a DF
1339 register instead of forcing it to live in the stack. */
1340 if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1341 mode = DECL_MODE (field);
1343 #ifdef MEMBER_TYPE_FORCES_BLK
1344 /* With some targets, eg. c4x, it is sub-optimal
1345 to access an aligned BLKmode structure as a scalar. */
1347 if (MEMBER_TYPE_FORCES_BLK (field, mode))
1348 return;
1349 #endif /* MEMBER_TYPE_FORCES_BLK */
1352 /* If we only have one real field; use its mode. This only applies to
1353 RECORD_TYPE. This does not apply to unions. */
1354 if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode)
1355 TYPE_MODE (type) = mode;
1356 else
1357 TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1359 /* If structure's known alignment is less than what the scalar
1360 mode would need, and it matters, then stick with BLKmode. */
1361 if (TYPE_MODE (type) != BLKmode
1362 && STRICT_ALIGNMENT
1363 && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1364 || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1366 /* If this is the only reason this type is BLKmode, then
1367 don't force containing types to be BLKmode. */
1368 TYPE_NO_FORCE_BLK (type) = 1;
1369 TYPE_MODE (type) = BLKmode;
1373 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1374 out. */
1376 static void
1377 finalize_type_size (tree type)
1379 /* Normally, use the alignment corresponding to the mode chosen.
1380 However, where strict alignment is not required, avoid
1381 over-aligning structures, since most compilers do not do this
1382 alignment. */
1384 if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1385 && (STRICT_ALIGNMENT
1386 || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1387 && TREE_CODE (type) != QUAL_UNION_TYPE
1388 && TREE_CODE (type) != ARRAY_TYPE)))
1390 TYPE_ALIGN (type) = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1391 TYPE_USER_ALIGN (type) = 0;
1394 /* Do machine-dependent extra alignment. */
1395 #ifdef ROUND_TYPE_ALIGN
1396 TYPE_ALIGN (type)
1397 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1398 #endif
1400 /* If we failed to find a simple way to calculate the unit size
1401 of the type, find it by division. */
1402 if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1403 /* TYPE_SIZE (type) is computed in bitsizetype. After the division, the
1404 result will fit in sizetype. We will get more efficient code using
1405 sizetype, so we force a conversion. */
1406 TYPE_SIZE_UNIT (type)
1407 = convert (sizetype,
1408 size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1409 bitsize_unit_node));
1411 if (TYPE_SIZE (type) != 0)
1413 TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1414 TYPE_SIZE_UNIT (type)
1415 = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN (type) / BITS_PER_UNIT);
1418 /* Evaluate nonconstant sizes only once, either now or as soon as safe. */
1419 if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1420 TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1421 if (TYPE_SIZE_UNIT (type) != 0
1422 && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1423 TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1425 /* Also layout any other variants of the type. */
1426 if (TYPE_NEXT_VARIANT (type)
1427 || type != TYPE_MAIN_VARIANT (type))
1429 tree variant;
1430 /* Record layout info of this variant. */
1431 tree size = TYPE_SIZE (type);
1432 tree size_unit = TYPE_SIZE_UNIT (type);
1433 unsigned int align = TYPE_ALIGN (type);
1434 unsigned int user_align = TYPE_USER_ALIGN (type);
1435 enum machine_mode mode = TYPE_MODE (type);
1437 /* Copy it into all variants. */
1438 for (variant = TYPE_MAIN_VARIANT (type);
1439 variant != 0;
1440 variant = TYPE_NEXT_VARIANT (variant))
1442 TYPE_SIZE (variant) = size;
1443 TYPE_SIZE_UNIT (variant) = size_unit;
1444 TYPE_ALIGN (variant) = align;
1445 TYPE_USER_ALIGN (variant) = user_align;
1446 TYPE_MODE (variant) = mode;
1451 /* Do all of the work required to layout the type indicated by RLI,
1452 once the fields have been laid out. This function will call `free'
1453 for RLI, unless FREE_P is false. Passing a value other than false
1454 for FREE_P is bad practice; this option only exists to support the
1455 G++ 3.2 ABI. */
1457 void
1458 finish_record_layout (record_layout_info rli, int free_p)
1460 /* Compute the final size. */
1461 finalize_record_size (rli);
1463 /* Compute the TYPE_MODE for the record. */
1464 compute_record_mode (rli->t);
1466 /* Perform any last tweaks to the TYPE_SIZE, etc. */
1467 finalize_type_size (rli->t);
1469 /* Lay out any static members. This is done now because their type
1470 may use the record's type. */
1471 while (rli->pending_statics)
1473 layout_decl (TREE_VALUE (rli->pending_statics), 0);
1474 rli->pending_statics = TREE_CHAIN (rli->pending_statics);
1477 /* Clean up. */
1478 if (free_p)
1479 free (rli);
1483 /* Finish processing a builtin RECORD_TYPE type TYPE. It's name is
1484 NAME, its fields are chained in reverse on FIELDS.
1486 If ALIGN_TYPE is non-null, it is given the same alignment as
1487 ALIGN_TYPE. */
1489 void
1490 finish_builtin_struct (tree type, const char *name, tree fields,
1491 tree align_type)
1493 tree tail, next;
1495 for (tail = NULL_TREE; fields; tail = fields, fields = next)
1497 DECL_FIELD_CONTEXT (fields) = type;
1498 next = TREE_CHAIN (fields);
1499 TREE_CHAIN (fields) = tail;
1501 TYPE_FIELDS (type) = tail;
1503 if (align_type)
1505 TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
1506 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (align_type);
1509 layout_type (type);
1510 #if 0 /* not yet, should get fixed properly later */
1511 TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
1512 #else
1513 TYPE_NAME (type) = build_decl (TYPE_DECL, get_identifier (name), type);
1514 #endif
1515 TYPE_STUB_DECL (type) = TYPE_NAME (type);
1516 layout_decl (TYPE_NAME (type), 0);
1519 /* Calculate the mode, size, and alignment for TYPE.
1520 For an array type, calculate the element separation as well.
1521 Record TYPE on the chain of permanent or temporary types
1522 so that dbxout will find out about it.
1524 TYPE_SIZE of a type is nonzero if the type has been laid out already.
1525 layout_type does nothing on such a type.
1527 If the type is incomplete, its TYPE_SIZE remains zero. */
1529 void
1530 layout_type (tree type)
1532 if (type == 0)
1533 abort ();
1535 if (type == error_mark_node)
1536 return;
1538 /* Do nothing if type has been laid out before. */
1539 if (TYPE_SIZE (type))
1540 return;
1542 switch (TREE_CODE (type))
1544 case LANG_TYPE:
1545 /* This kind of type is the responsibility
1546 of the language-specific code. */
1547 abort ();
1549 case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */
1550 if (TYPE_PRECISION (type) == 0)
1551 TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */
1553 /* ... fall through ... */
1555 case INTEGER_TYPE:
1556 case ENUMERAL_TYPE:
1557 case CHAR_TYPE:
1558 if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
1559 && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
1560 TYPE_UNSIGNED (type) = 1;
1562 TYPE_MODE (type) = smallest_mode_for_size (TYPE_PRECISION (type),
1563 MODE_INT);
1564 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1565 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1566 break;
1568 case REAL_TYPE:
1569 TYPE_MODE (type) = mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0);
1570 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1571 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1572 break;
1574 case COMPLEX_TYPE:
1575 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
1576 TYPE_MODE (type)
1577 = mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
1578 (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE
1579 ? MODE_COMPLEX_FLOAT : MODE_COMPLEX_INT),
1581 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1582 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1583 break;
1585 case VECTOR_TYPE:
1587 int nunits = TYPE_VECTOR_SUBPARTS (type);
1588 tree nunits_tree = build_int_2 (nunits, 0);
1589 tree innertype = TREE_TYPE (type);
1591 if (nunits & (nunits - 1))
1592 abort ();
1594 /* Find an appropriate mode for the vector type. */
1595 if (TYPE_MODE (type) == VOIDmode)
1597 enum machine_mode innermode = TYPE_MODE (innertype);
1598 enum machine_mode mode;
1600 /* First, look for a supported vector type. */
1601 if (GET_MODE_CLASS (innermode) == MODE_FLOAT)
1602 mode = MIN_MODE_VECTOR_FLOAT;
1603 else
1604 mode = MIN_MODE_VECTOR_INT;
1606 for (; mode != VOIDmode ; mode = GET_MODE_WIDER_MODE (mode))
1607 if (GET_MODE_NUNITS (mode) == nunits
1608 && GET_MODE_INNER (mode) == innermode
1609 && VECTOR_MODE_SUPPORTED_P (mode))
1610 break;
1612 /* For integers, try mapping it to a same-sized scalar mode. */
1613 if (mode == VOIDmode
1614 && GET_MODE_CLASS (innermode) == MODE_INT)
1615 mode = mode_for_size (nunits * GET_MODE_BITSIZE (innermode),
1616 MODE_INT, 0);
1618 if (mode == VOIDmode || !have_regs_of_mode[mode])
1619 TYPE_MODE (type) = BLKmode;
1620 else
1621 TYPE_MODE (type) = mode;
1624 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
1625 TYPE_SIZE_UNIT (type) = int_const_binop (MULT_EXPR,
1626 TYPE_SIZE_UNIT (innertype),
1627 nunits_tree, 0);
1628 TYPE_SIZE (type) = int_const_binop (MULT_EXPR, TYPE_SIZE (innertype),
1629 nunits_tree, 0);
1630 break;
1633 case VOID_TYPE:
1634 /* This is an incomplete type and so doesn't have a size. */
1635 TYPE_ALIGN (type) = 1;
1636 TYPE_USER_ALIGN (type) = 0;
1637 TYPE_MODE (type) = VOIDmode;
1638 break;
1640 case OFFSET_TYPE:
1641 TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1642 TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1643 /* A pointer might be MODE_PARTIAL_INT,
1644 but ptrdiff_t must be integral. */
1645 TYPE_MODE (type) = mode_for_size (POINTER_SIZE, MODE_INT, 0);
1646 break;
1648 case FUNCTION_TYPE:
1649 case METHOD_TYPE:
1650 /* It's hard to see what the mode and size of a function ought to
1651 be, but we do know the alignment is FUNCTION_BOUNDARY, so
1652 make it consistent with that. */
1653 TYPE_MODE (type) = mode_for_size (FUNCTION_BOUNDARY, MODE_INT, 0);
1654 TYPE_SIZE (type) = bitsize_int (FUNCTION_BOUNDARY);
1655 TYPE_SIZE_UNIT (type) = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
1656 break;
1658 case POINTER_TYPE:
1659 case REFERENCE_TYPE:
1662 enum machine_mode mode = ((TREE_CODE (type) == REFERENCE_TYPE
1663 && reference_types_internal)
1664 ? Pmode : TYPE_MODE (type));
1666 int nbits = GET_MODE_BITSIZE (mode);
1668 TYPE_SIZE (type) = bitsize_int (nbits);
1669 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
1670 TYPE_UNSIGNED (type) = 1;
1671 TYPE_PRECISION (type) = nbits;
1673 break;
1675 case ARRAY_TYPE:
1677 tree index = TYPE_DOMAIN (type);
1678 tree element = TREE_TYPE (type);
1680 build_pointer_type (element);
1682 /* We need to know both bounds in order to compute the size. */
1683 if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
1684 && TYPE_SIZE (element))
1686 tree ub = TYPE_MAX_VALUE (index);
1687 tree lb = TYPE_MIN_VALUE (index);
1688 tree length;
1689 tree element_size;
1691 /* The initial subtraction should happen in the original type so
1692 that (possible) negative values are handled appropriately. */
1693 length = size_binop (PLUS_EXPR, size_one_node,
1694 convert (sizetype,
1695 fold (build2 (MINUS_EXPR,
1696 TREE_TYPE (lb),
1697 ub, lb))));
1699 /* Special handling for arrays of bits (for Chill). */
1700 element_size = TYPE_SIZE (element);
1701 if (TYPE_PACKED (type) && INTEGRAL_TYPE_P (element)
1702 && (integer_zerop (TYPE_MAX_VALUE (element))
1703 || integer_onep (TYPE_MAX_VALUE (element)))
1704 && host_integerp (TYPE_MIN_VALUE (element), 1))
1706 HOST_WIDE_INT maxvalue
1707 = tree_low_cst (TYPE_MAX_VALUE (element), 1);
1708 HOST_WIDE_INT minvalue
1709 = tree_low_cst (TYPE_MIN_VALUE (element), 1);
1711 if (maxvalue - minvalue == 1
1712 && (maxvalue == 1 || maxvalue == 0))
1713 element_size = integer_one_node;
1716 /* If neither bound is a constant and sizetype is signed, make
1717 sure the size is never negative. We should really do this
1718 if *either* bound is non-constant, but this is the best
1719 compromise between C and Ada. */
1720 if (!TYPE_UNSIGNED (sizetype)
1721 && TREE_CODE (TYPE_MIN_VALUE (index)) != INTEGER_CST
1722 && TREE_CODE (TYPE_MAX_VALUE (index)) != INTEGER_CST)
1723 length = size_binop (MAX_EXPR, length, size_zero_node);
1725 TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
1726 convert (bitsizetype, length));
1728 /* If we know the size of the element, calculate the total
1729 size directly, rather than do some division thing below.
1730 This optimization helps Fortran assumed-size arrays
1731 (where the size of the array is determined at runtime)
1732 substantially.
1733 Note that we can't do this in the case where the size of
1734 the elements is one bit since TYPE_SIZE_UNIT cannot be
1735 set correctly in that case. */
1736 if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
1737 TYPE_SIZE_UNIT (type)
1738 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
1741 /* Now round the alignment and size,
1742 using machine-dependent criteria if any. */
1744 #ifdef ROUND_TYPE_ALIGN
1745 TYPE_ALIGN (type)
1746 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
1747 #else
1748 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1749 #endif
1750 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
1751 TYPE_MODE (type) = BLKmode;
1752 if (TYPE_SIZE (type) != 0
1753 #ifdef MEMBER_TYPE_FORCES_BLK
1754 && ! MEMBER_TYPE_FORCES_BLK (type, VOIDmode)
1755 #endif
1756 /* BLKmode elements force BLKmode aggregate;
1757 else extract/store fields may lose. */
1758 && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
1759 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
1761 /* One-element arrays get the component type's mode. */
1762 if (simple_cst_equal (TYPE_SIZE (type),
1763 TYPE_SIZE (TREE_TYPE (type))))
1764 TYPE_MODE (type) = TYPE_MODE (TREE_TYPE (type));
1765 else
1766 TYPE_MODE (type)
1767 = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1769 if (TYPE_MODE (type) != BLKmode
1770 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
1771 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type))
1772 && TYPE_MODE (type) != BLKmode)
1774 TYPE_NO_FORCE_BLK (type) = 1;
1775 TYPE_MODE (type) = BLKmode;
1778 break;
1781 case RECORD_TYPE:
1782 case UNION_TYPE:
1783 case QUAL_UNION_TYPE:
1785 tree field;
1786 record_layout_info rli;
1788 /* Initialize the layout information. */
1789 rli = start_record_layout (type);
1791 /* If this is a QUAL_UNION_TYPE, we want to process the fields
1792 in the reverse order in building the COND_EXPR that denotes
1793 its size. We reverse them again later. */
1794 if (TREE_CODE (type) == QUAL_UNION_TYPE)
1795 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1797 /* Place all the fields. */
1798 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1799 place_field (rli, field);
1801 if (TREE_CODE (type) == QUAL_UNION_TYPE)
1802 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1804 if (lang_adjust_rli)
1805 (*lang_adjust_rli) (rli);
1807 /* Finish laying out the record. */
1808 finish_record_layout (rli, /*free_p=*/true);
1810 break;
1812 case SET_TYPE: /* Used by Chill and Pascal. */
1813 if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST
1814 || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST)
1815 abort ();
1816 else
1818 #ifndef SET_WORD_SIZE
1819 #define SET_WORD_SIZE BITS_PER_WORD
1820 #endif
1821 unsigned int alignment
1822 = set_alignment ? set_alignment : SET_WORD_SIZE;
1823 HOST_WIDE_INT size_in_bits
1824 = (tree_low_cst (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), 0)
1825 - tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0) + 1);
1826 HOST_WIDE_INT rounded_size
1827 = ((size_in_bits + alignment - 1) / alignment) * alignment;
1829 if (rounded_size > (int) alignment)
1830 TYPE_MODE (type) = BLKmode;
1831 else
1832 TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1);
1834 TYPE_SIZE (type) = bitsize_int (rounded_size);
1835 TYPE_SIZE_UNIT (type) = size_int (rounded_size / BITS_PER_UNIT);
1836 TYPE_ALIGN (type) = alignment;
1837 TYPE_USER_ALIGN (type) = 0;
1838 TYPE_PRECISION (type) = size_in_bits;
1840 break;
1842 case FILE_TYPE:
1843 /* The size may vary in different languages, so the language front end
1844 should fill in the size. */
1845 TYPE_ALIGN (type) = BIGGEST_ALIGNMENT;
1846 TYPE_USER_ALIGN (type) = 0;
1847 TYPE_MODE (type) = BLKmode;
1848 break;
1850 default:
1851 abort ();
1854 /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE. For
1855 records and unions, finish_record_layout already called this
1856 function. */
1857 if (TREE_CODE (type) != RECORD_TYPE
1858 && TREE_CODE (type) != UNION_TYPE
1859 && TREE_CODE (type) != QUAL_UNION_TYPE)
1860 finalize_type_size (type);
1862 /* If this type is created before sizetype has been permanently set,
1863 record it so set_sizetype can fix it up. */
1864 if (! sizetype_set)
1865 early_type_list = tree_cons (NULL_TREE, type, early_type_list);
1867 /* If an alias set has been set for this aggregate when it was incomplete,
1868 force it into alias set 0.
1869 This is too conservative, but we cannot call record_component_aliases
1870 here because some frontends still change the aggregates after
1871 layout_type. */
1872 if (AGGREGATE_TYPE_P (type) && TYPE_ALIAS_SET_KNOWN_P (type))
1873 TYPE_ALIAS_SET (type) = 0;
1876 /* Create and return a type for signed integers of PRECISION bits. */
1878 tree
1879 make_signed_type (int precision)
1881 tree type = make_node (INTEGER_TYPE);
1883 TYPE_PRECISION (type) = precision;
1885 fixup_signed_type (type);
1886 return type;
1889 /* Create and return a type for unsigned integers of PRECISION bits. */
1891 tree
1892 make_unsigned_type (int precision)
1894 tree type = make_node (INTEGER_TYPE);
1896 TYPE_PRECISION (type) = precision;
1898 fixup_unsigned_type (type);
1899 return type;
1902 /* Initialize sizetype and bitsizetype to a reasonable and temporary
1903 value to enable integer types to be created. */
1905 void
1906 initialize_sizetypes (void)
1908 tree t = make_node (INTEGER_TYPE);
1910 /* Set this so we do something reasonable for the build_int_2 calls
1911 below. */
1912 integer_type_node = t;
1914 TYPE_MODE (t) = SImode;
1915 TYPE_ALIGN (t) = GET_MODE_ALIGNMENT (SImode);
1916 TYPE_USER_ALIGN (t) = 0;
1917 TYPE_SIZE (t) = build_int_2 (GET_MODE_BITSIZE (SImode), 0);
1918 TYPE_SIZE_UNIT (t) = build_int_2 (GET_MODE_SIZE (SImode), 0);
1919 TYPE_UNSIGNED (t) = 1;
1920 TYPE_PRECISION (t) = GET_MODE_BITSIZE (SImode);
1921 TYPE_MIN_VALUE (t) = build_int_2 (0, 0);
1922 TYPE_IS_SIZETYPE (t) = 1;
1924 /* 1000 avoids problems with possible overflow and is certainly
1925 larger than any size value we'd want to be storing. */
1926 TYPE_MAX_VALUE (t) = build_int_2 (1000, 0);
1928 /* These two must be different nodes because of the caching done in
1929 size_int_wide. */
1930 sizetype = t;
1931 bitsizetype = copy_node (t);
1932 integer_type_node = 0;
1935 /* Set sizetype to TYPE, and initialize *sizetype accordingly.
1936 Also update the type of any standard type's sizes made so far. */
1938 void
1939 set_sizetype (tree type)
1941 int oprecision = TYPE_PRECISION (type);
1942 /* The *bitsizetype types use a precision that avoids overflows when
1943 calculating signed sizes / offsets in bits. However, when
1944 cross-compiling from a 32 bit to a 64 bit host, we are limited to 64 bit
1945 precision. */
1946 int precision = MIN (oprecision + BITS_PER_UNIT_LOG + 1,
1947 2 * HOST_BITS_PER_WIDE_INT);
1948 unsigned int i;
1949 tree t;
1951 if (sizetype_set)
1952 abort ();
1954 /* Make copies of nodes since we'll be setting TYPE_IS_SIZETYPE. */
1955 sizetype = copy_node (type);
1956 TYPE_ORIG_SIZE_TYPE (sizetype) = type;
1957 TYPE_IS_SIZETYPE (sizetype) = 1;
1958 bitsizetype = make_node (INTEGER_TYPE);
1959 TYPE_NAME (bitsizetype) = TYPE_NAME (type);
1960 TYPE_PRECISION (bitsizetype) = precision;
1961 TYPE_IS_SIZETYPE (bitsizetype) = 1;
1963 if (TYPE_UNSIGNED (type))
1964 fixup_unsigned_type (bitsizetype);
1965 else
1966 fixup_signed_type (bitsizetype);
1968 layout_type (bitsizetype);
1970 if (TYPE_UNSIGNED (type))
1972 usizetype = sizetype;
1973 ubitsizetype = bitsizetype;
1974 ssizetype = copy_node (make_signed_type (oprecision));
1975 sbitsizetype = copy_node (make_signed_type (precision));
1977 else
1979 ssizetype = sizetype;
1980 sbitsizetype = bitsizetype;
1981 usizetype = copy_node (make_unsigned_type (oprecision));
1982 ubitsizetype = copy_node (make_unsigned_type (precision));
1985 TYPE_NAME (bitsizetype) = get_identifier ("bit_size_type");
1987 /* Show is a sizetype, is a main type, and has no pointers to it. */
1988 for (i = 0; i < ARRAY_SIZE (sizetype_tab); i++)
1990 TYPE_IS_SIZETYPE (sizetype_tab[i]) = 1;
1991 TYPE_MAIN_VARIANT (sizetype_tab[i]) = sizetype_tab[i];
1992 TYPE_NEXT_VARIANT (sizetype_tab[i]) = 0;
1993 TYPE_POINTER_TO (sizetype_tab[i]) = 0;
1994 TYPE_REFERENCE_TO (sizetype_tab[i]) = 0;
1997 /* Go down each of the types we already made and set the proper type
1998 for the sizes in them. */
1999 for (t = early_type_list; t != 0; t = TREE_CHAIN (t))
2001 if (TREE_CODE (TREE_VALUE (t)) != INTEGER_TYPE
2002 && TREE_CODE (TREE_VALUE (t)) != BOOLEAN_TYPE)
2003 abort ();
2005 TREE_TYPE (TYPE_SIZE (TREE_VALUE (t))) = bitsizetype;
2006 TREE_TYPE (TYPE_SIZE_UNIT (TREE_VALUE (t))) = sizetype;
2009 early_type_list = 0;
2010 sizetype_set = 1;
2013 /* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE,
2014 BOOLEAN_TYPE, or CHAR_TYPE. Set TYPE_MIN_VALUE and TYPE_MAX_VALUE
2015 for TYPE, based on the PRECISION and whether or not the TYPE
2016 IS_UNSIGNED. PRECISION need not correspond to a width supported
2017 natively by the hardware; for example, on a machine with 8-bit,
2018 16-bit, and 32-bit register modes, PRECISION might be 7, 23, or
2019 61. */
2021 void
2022 set_min_and_max_values_for_integral_type (tree type,
2023 int precision,
2024 bool is_unsigned)
2026 tree min_value;
2027 tree max_value;
2029 if (is_unsigned)
2031 min_value = build_int_2 (0, 0);
2032 max_value
2033 = build_int_2 (precision - HOST_BITS_PER_WIDE_INT >= 0
2034 ? -1 : ((HOST_WIDE_INT) 1 << precision) - 1,
2035 precision - HOST_BITS_PER_WIDE_INT > 0
2036 ? ((unsigned HOST_WIDE_INT) ~0
2037 >> (HOST_BITS_PER_WIDE_INT
2038 - (precision - HOST_BITS_PER_WIDE_INT)))
2039 : 0);
2041 else
2043 min_value
2044 = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
2045 ? 0 : (HOST_WIDE_INT) (-1) << (precision - 1)),
2046 (((HOST_WIDE_INT) (-1)
2047 << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2048 ? precision - HOST_BITS_PER_WIDE_INT - 1
2049 : 0))));
2050 max_value
2051 = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
2052 ? -1 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
2053 (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2054 ? (((HOST_WIDE_INT) 1
2055 << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
2056 : 0));
2059 TREE_TYPE (min_value) = type;
2060 TREE_TYPE (max_value) = type;
2061 TYPE_MIN_VALUE (type) = min_value;
2062 TYPE_MAX_VALUE (type) = max_value;
2065 /* Set the extreme values of TYPE based on its precision in bits,
2066 then lay it out. Used when make_signed_type won't do
2067 because the tree code is not INTEGER_TYPE.
2068 E.g. for Pascal, when the -fsigned-char option is given. */
2070 void
2071 fixup_signed_type (tree type)
2073 int precision = TYPE_PRECISION (type);
2075 /* We can not represent properly constants greater then
2076 2 * HOST_BITS_PER_WIDE_INT, still we need the types
2077 as they are used by i386 vector extensions and friends. */
2078 if (precision > HOST_BITS_PER_WIDE_INT * 2)
2079 precision = HOST_BITS_PER_WIDE_INT * 2;
2081 set_min_and_max_values_for_integral_type (type, precision,
2082 /*is_unsigned=*/false);
2084 /* Lay out the type: set its alignment, size, etc. */
2085 layout_type (type);
2088 /* Set the extreme values of TYPE based on its precision in bits,
2089 then lay it out. This is used both in `make_unsigned_type'
2090 and for enumeral types. */
2092 void
2093 fixup_unsigned_type (tree type)
2095 int precision = TYPE_PRECISION (type);
2097 /* We can not represent properly constants greater then
2098 2 * HOST_BITS_PER_WIDE_INT, still we need the types
2099 as they are used by i386 vector extensions and friends. */
2100 if (precision > HOST_BITS_PER_WIDE_INT * 2)
2101 precision = HOST_BITS_PER_WIDE_INT * 2;
2103 set_min_and_max_values_for_integral_type (type, precision,
2104 /*is_unsigned=*/true);
2106 /* Lay out the type: set its alignment, size, etc. */
2107 layout_type (type);
2110 /* Find the best machine mode to use when referencing a bit field of length
2111 BITSIZE bits starting at BITPOS.
2113 The underlying object is known to be aligned to a boundary of ALIGN bits.
2114 If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
2115 larger than LARGEST_MODE (usually SImode).
2117 If no mode meets all these conditions, we return VOIDmode. Otherwise, if
2118 VOLATILEP is true or SLOW_BYTE_ACCESS is false, we return the smallest
2119 mode meeting these conditions.
2121 Otherwise (VOLATILEP is false and SLOW_BYTE_ACCESS is true), we return
2122 the largest mode (but a mode no wider than UNITS_PER_WORD) that meets
2123 all the conditions. */
2125 enum machine_mode
2126 get_best_mode (int bitsize, int bitpos, unsigned int align,
2127 enum machine_mode largest_mode, int volatilep)
2129 enum machine_mode mode;
2130 unsigned int unit = 0;
2132 /* Find the narrowest integer mode that contains the bit field. */
2133 for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
2134 mode = GET_MODE_WIDER_MODE (mode))
2136 unit = GET_MODE_BITSIZE (mode);
2137 if ((bitpos % unit) + bitsize <= unit)
2138 break;
2141 if (mode == VOIDmode
2142 /* It is tempting to omit the following line
2143 if STRICT_ALIGNMENT is true.
2144 But that is incorrect, since if the bitfield uses part of 3 bytes
2145 and we use a 4-byte mode, we could get a spurious segv
2146 if the extra 4th byte is past the end of memory.
2147 (Though at least one Unix compiler ignores this problem:
2148 that on the Sequent 386 machine. */
2149 || MIN (unit, BIGGEST_ALIGNMENT) > align
2150 || (largest_mode != VOIDmode && unit > GET_MODE_BITSIZE (largest_mode)))
2151 return VOIDmode;
2153 if (SLOW_BYTE_ACCESS && ! volatilep)
2155 enum machine_mode wide_mode = VOIDmode, tmode;
2157 for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmode != VOIDmode;
2158 tmode = GET_MODE_WIDER_MODE (tmode))
2160 unit = GET_MODE_BITSIZE (tmode);
2161 if (bitpos / unit == (bitpos + bitsize - 1) / unit
2162 && unit <= BITS_PER_WORD
2163 && unit <= MIN (align, BIGGEST_ALIGNMENT)
2164 && (largest_mode == VOIDmode
2165 || unit <= GET_MODE_BITSIZE (largest_mode)))
2166 wide_mode = tmode;
2169 if (wide_mode != VOIDmode)
2170 return wide_mode;
2173 return mode;
2176 /* Gets minimal and maximal values for MODE (signed or unsigned depending on
2177 SIGN). The returned constants are made to be usable in TARGET_MODE. */
2179 void
2180 get_mode_bounds (enum machine_mode mode, int sign,
2181 enum machine_mode target_mode,
2182 rtx *mmin, rtx *mmax)
2184 unsigned size = GET_MODE_BITSIZE (mode);
2185 unsigned HOST_WIDE_INT min_val, max_val;
2187 if (size > HOST_BITS_PER_WIDE_INT)
2188 abort ();
2190 if (sign)
2192 min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1));
2193 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1)) - 1;
2195 else
2197 min_val = 0;
2198 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1) << 1) - 1;
2201 *mmin = GEN_INT (trunc_int_for_mode (min_val, target_mode));
2202 *mmax = GEN_INT (trunc_int_for_mode (max_val, target_mode));
2205 #include "gt-stor-layout.h"