Merge from mainline
[official-gcc.git] / gcc / stor-layout.c
blobbf25e97c629b7a09489712097f5846ecbabe371d
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, 2005, 2006
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA. */
24 #include "config.h"
25 #include "system.h"
26 #include "coretypes.h"
27 #include "tm.h"
28 #include "tree.h"
29 #include "rtl.h"
30 #include "tm_p.h"
31 #include "flags.h"
32 #include "function.h"
33 #include "expr.h"
34 #include "output.h"
35 #include "toplev.h"
36 #include "ggc.h"
37 #include "target.h"
38 #include "langhooks.h"
39 #include "regs.h"
40 #include "params.h"
42 /* Data type for the expressions representing sizes of data types.
43 It is the first integer type laid out. */
44 tree sizetype_tab[(int) TYPE_KIND_LAST];
46 /* If nonzero, this is an upper limit on alignment of structure fields.
47 The value is measured in bits. */
48 unsigned int maximum_field_alignment = TARGET_DEFAULT_PACK_STRUCT * BITS_PER_UNIT;
49 /* ... and its original value in bytes, specified via -fpack-struct=<value>. */
50 unsigned int initial_max_fld_align = TARGET_DEFAULT_PACK_STRUCT;
52 /* Nonzero if all REFERENCE_TYPEs are internal and hence should be
53 allocated in Pmode, not ptr_mode. Set only by internal_reference_types
54 called only by a front end. */
55 static int reference_types_internal = 0;
57 static void finalize_record_size (record_layout_info);
58 static void finalize_type_size (tree);
59 static void place_union_field (record_layout_info, tree);
60 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
61 static int excess_unit_span (HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT,
62 HOST_WIDE_INT, tree);
63 #endif
64 extern void debug_rli (record_layout_info);
66 /* SAVE_EXPRs for sizes of types and decls, waiting to be expanded. */
68 static GTY(()) tree pending_sizes;
70 /* Show that REFERENCE_TYPES are internal and should be Pmode. Called only
71 by front end. */
73 void
74 internal_reference_types (void)
76 reference_types_internal = 1;
79 /* Get a list of all the objects put on the pending sizes list. */
81 tree
82 get_pending_sizes (void)
84 tree chain = pending_sizes;
86 pending_sizes = 0;
87 return chain;
90 /* Add EXPR to the pending sizes list. */
92 void
93 put_pending_size (tree expr)
95 /* Strip any simple arithmetic from EXPR to see if it has an underlying
96 SAVE_EXPR. */
97 expr = skip_simple_arithmetic (expr);
99 if (TREE_CODE (expr) == SAVE_EXPR)
100 pending_sizes = tree_cons (NULL_TREE, expr, pending_sizes);
103 /* Put a chain of objects into the pending sizes list, which must be
104 empty. */
106 void
107 put_pending_sizes (tree chain)
109 gcc_assert (!pending_sizes);
110 pending_sizes = chain;
113 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR
114 to serve as the actual size-expression for a type or decl. */
116 tree
117 variable_size (tree size)
119 tree save;
121 /* If the language-processor is to take responsibility for variable-sized
122 items (e.g., languages which have elaboration procedures like Ada),
123 just return SIZE unchanged. Likewise for self-referential sizes and
124 constant sizes. */
125 if (TREE_CONSTANT (size)
126 || lang_hooks.decls.global_bindings_p () < 0
127 || CONTAINS_PLACEHOLDER_P (size))
128 return size;
130 size = save_expr (size);
132 /* If an array with a variable number of elements is declared, and
133 the elements require destruction, we will emit a cleanup for the
134 array. That cleanup is run both on normal exit from the block
135 and in the exception-handler for the block. Normally, when code
136 is used in both ordinary code and in an exception handler it is
137 `unsaved', i.e., all SAVE_EXPRs are recalculated. However, we do
138 not wish to do that here; the array-size is the same in both
139 places. */
140 save = skip_simple_arithmetic (size);
142 if (cfun && cfun->x_dont_save_pending_sizes_p)
143 /* The front-end doesn't want us to keep a list of the expressions
144 that determine sizes for variable size objects. Trust it. */
145 return size;
147 if (lang_hooks.decls.global_bindings_p ())
149 if (TREE_CONSTANT (size))
150 error ("type size can%'t be explicitly evaluated");
151 else
152 error ("variable-size type declared outside of any function");
154 return size_one_node;
157 put_pending_size (save);
159 return size;
162 #ifndef MAX_FIXED_MODE_SIZE
163 #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
164 #endif
166 /* Return the machine mode to use for a nonscalar of SIZE bits. The
167 mode must be in class CLASS, and have exactly that many value bits;
168 it may have padding as well. If LIMIT is nonzero, modes of wider
169 than MAX_FIXED_MODE_SIZE will not be used. */
171 enum machine_mode
172 mode_for_size (unsigned int size, enum mode_class class, int limit)
174 enum machine_mode mode;
176 if (limit && size > MAX_FIXED_MODE_SIZE)
177 return BLKmode;
179 /* Get the first mode which has this size, in the specified class. */
180 for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
181 mode = GET_MODE_WIDER_MODE (mode))
182 if (GET_MODE_PRECISION (mode) == size)
183 return mode;
185 return BLKmode;
188 /* Similar, except passed a tree node. */
190 enum machine_mode
191 mode_for_size_tree (tree size, enum mode_class class, int limit)
193 if (TREE_CODE (size) != INTEGER_CST
194 || TREE_OVERFLOW (size)
195 /* What we really want to say here is that the size can fit in a
196 host integer, but we know there's no way we'd find a mode for
197 this many bits, so there's no point in doing the precise test. */
198 || compare_tree_int (size, 1000) > 0)
199 return BLKmode;
200 else
201 return mode_for_size (tree_low_cst (size, 1), class, limit);
204 /* Similar, but never return BLKmode; return the narrowest mode that
205 contains at least the requested number of value bits. */
207 enum machine_mode
208 smallest_mode_for_size (unsigned int size, enum mode_class class)
210 enum machine_mode mode;
212 /* Get the first mode which has at least this size, in the
213 specified class. */
214 for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
215 mode = GET_MODE_WIDER_MODE (mode))
216 if (GET_MODE_PRECISION (mode) >= size)
217 return mode;
219 gcc_unreachable ();
222 /* Find an integer mode of the exact same size, or BLKmode on failure. */
224 enum machine_mode
225 int_mode_for_mode (enum machine_mode mode)
227 switch (GET_MODE_CLASS (mode))
229 case MODE_INT:
230 case MODE_PARTIAL_INT:
231 break;
233 case MODE_COMPLEX_INT:
234 case MODE_COMPLEX_FLOAT:
235 case MODE_FLOAT:
236 case MODE_DECIMAL_FLOAT:
237 case MODE_VECTOR_INT:
238 case MODE_VECTOR_FLOAT:
239 mode = mode_for_size (GET_MODE_BITSIZE (mode), MODE_INT, 0);
240 break;
242 case MODE_RANDOM:
243 if (mode == BLKmode)
244 break;
246 /* ... fall through ... */
248 case MODE_CC:
249 default:
250 gcc_unreachable ();
253 return mode;
256 /* Return the alignment of MODE. This will be bounded by 1 and
257 BIGGEST_ALIGNMENT. */
259 unsigned int
260 get_mode_alignment (enum machine_mode mode)
262 return MIN (BIGGEST_ALIGNMENT, MAX (1, mode_base_align[mode]*BITS_PER_UNIT));
266 /* Subroutine of layout_decl: Force alignment required for the data type.
267 But if the decl itself wants greater alignment, don't override that. */
269 static inline void
270 do_type_align (tree type, tree decl)
272 if (TYPE_ALIGN (type) > DECL_ALIGN (decl))
274 DECL_ALIGN (decl) = TYPE_ALIGN (type);
275 if (TREE_CODE (decl) == FIELD_DECL)
276 DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type);
280 /* Set the size, mode and alignment of a ..._DECL node.
281 TYPE_DECL does need this for C++.
282 Note that LABEL_DECL and CONST_DECL nodes do not need this,
283 and FUNCTION_DECL nodes have them set up in a special (and simple) way.
284 Don't call layout_decl for them.
286 KNOWN_ALIGN is the amount of alignment we can assume this
287 decl has with no special effort. It is relevant only for FIELD_DECLs
288 and depends on the previous fields.
289 All that matters about KNOWN_ALIGN is which powers of 2 divide it.
290 If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
291 the record will be aligned to suit. */
293 void
294 layout_decl (tree decl, unsigned int known_align)
296 tree type = TREE_TYPE (decl);
297 enum tree_code code = TREE_CODE (decl);
298 rtx rtl = NULL_RTX;
300 if (code == CONST_DECL)
301 return;
303 gcc_assert (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL
304 || code == TYPE_DECL ||code == FIELD_DECL);
306 rtl = DECL_RTL_IF_SET (decl);
308 if (type == error_mark_node)
309 type = void_type_node;
311 /* Usually the size and mode come from the data type without change,
312 however, the front-end may set the explicit width of the field, so its
313 size may not be the same as the size of its type. This happens with
314 bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
315 also happens with other fields. For example, the C++ front-end creates
316 zero-sized fields corresponding to empty base classes, and depends on
317 layout_type setting DECL_FIELD_BITPOS correctly for the field. Set the
318 size in bytes from the size in bits. If we have already set the mode,
319 don't set it again since we can be called twice for FIELD_DECLs. */
321 DECL_UNSIGNED (decl) = TYPE_UNSIGNED (type);
322 if (DECL_MODE (decl) == VOIDmode)
323 DECL_MODE (decl) = TYPE_MODE (type);
325 if (DECL_SIZE (decl) == 0)
327 DECL_SIZE (decl) = TYPE_SIZE (type);
328 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type);
330 else if (DECL_SIZE_UNIT (decl) == 0)
331 DECL_SIZE_UNIT (decl)
332 = fold_convert (sizetype, size_binop (CEIL_DIV_EXPR, DECL_SIZE (decl),
333 bitsize_unit_node));
335 if (code != FIELD_DECL)
336 /* For non-fields, update the alignment from the type. */
337 do_type_align (type, decl);
338 else
339 /* For fields, it's a bit more complicated... */
341 bool old_user_align = DECL_USER_ALIGN (decl);
342 bool zero_bitfield = false;
343 bool packed_p = DECL_PACKED (decl);
344 unsigned int mfa;
346 if (DECL_BIT_FIELD (decl))
348 DECL_BIT_FIELD_TYPE (decl) = type;
350 /* A zero-length bit-field affects the alignment of the next
351 field. In essence such bit-fields are not influenced by
352 any packing due to #pragma pack or attribute packed. */
353 if (integer_zerop (DECL_SIZE (decl))
354 && ! targetm.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl)))
356 zero_bitfield = true;
357 packed_p = false;
358 #ifdef PCC_BITFIELD_TYPE_MATTERS
359 if (PCC_BITFIELD_TYPE_MATTERS)
360 do_type_align (type, decl);
361 else
362 #endif
364 #ifdef EMPTY_FIELD_BOUNDARY
365 if (EMPTY_FIELD_BOUNDARY > DECL_ALIGN (decl))
367 DECL_ALIGN (decl) = EMPTY_FIELD_BOUNDARY;
368 DECL_USER_ALIGN (decl) = 0;
370 #endif
374 /* See if we can use an ordinary integer mode for a bit-field.
375 Conditions are: a fixed size that is correct for another mode
376 and occupying a complete byte or bytes on proper boundary. */
377 if (TYPE_SIZE (type) != 0
378 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
379 && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
381 enum machine_mode xmode
382 = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
384 if (xmode != BLKmode
385 && (known_align == 0
386 || known_align >= GET_MODE_ALIGNMENT (xmode)))
388 DECL_ALIGN (decl) = MAX (GET_MODE_ALIGNMENT (xmode),
389 DECL_ALIGN (decl));
390 DECL_MODE (decl) = xmode;
391 DECL_BIT_FIELD (decl) = 0;
395 /* Turn off DECL_BIT_FIELD if we won't need it set. */
396 if (TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
397 && known_align >= TYPE_ALIGN (type)
398 && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
399 DECL_BIT_FIELD (decl) = 0;
401 else if (packed_p && DECL_USER_ALIGN (decl))
402 /* Don't touch DECL_ALIGN. For other packed fields, go ahead and
403 round up; we'll reduce it again below. We want packing to
404 supersede USER_ALIGN inherited from the type, but defer to
405 alignment explicitly specified on the field decl. */;
406 else
407 do_type_align (type, decl);
409 /* If the field is of variable size, we can't misalign it since we
410 have no way to make a temporary to align the result. But this
411 isn't an issue if the decl is not addressable. Likewise if it
412 is of unknown size.
414 Note that do_type_align may set DECL_USER_ALIGN, so we need to
415 check old_user_align instead. */
416 if (packed_p
417 && !old_user_align
418 && (DECL_NONADDRESSABLE_P (decl)
419 || DECL_SIZE_UNIT (decl) == 0
420 || TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST))
421 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
423 if (! packed_p && ! DECL_USER_ALIGN (decl))
425 /* Some targets (i.e. i386, VMS) limit struct field alignment
426 to a lower boundary than alignment of variables unless
427 it was overridden by attribute aligned. */
428 #ifdef BIGGEST_FIELD_ALIGNMENT
429 DECL_ALIGN (decl)
430 = MIN (DECL_ALIGN (decl), (unsigned) BIGGEST_FIELD_ALIGNMENT);
431 #endif
432 #ifdef ADJUST_FIELD_ALIGN
433 DECL_ALIGN (decl) = ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl));
434 #endif
437 if (zero_bitfield)
438 mfa = initial_max_fld_align * BITS_PER_UNIT;
439 else
440 mfa = maximum_field_alignment;
441 /* Should this be controlled by DECL_USER_ALIGN, too? */
442 if (mfa != 0)
443 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), mfa);
446 /* Evaluate nonconstant size only once, either now or as soon as safe. */
447 if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
448 DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
449 if (DECL_SIZE_UNIT (decl) != 0
450 && TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST)
451 DECL_SIZE_UNIT (decl) = variable_size (DECL_SIZE_UNIT (decl));
453 /* If requested, warn about definitions of large data objects. */
454 if (warn_larger_than
455 && (code == VAR_DECL || code == PARM_DECL)
456 && ! DECL_EXTERNAL (decl))
458 tree size = DECL_SIZE_UNIT (decl);
460 if (size != 0 && TREE_CODE (size) == INTEGER_CST
461 && compare_tree_int (size, larger_than_size) > 0)
463 int size_as_int = TREE_INT_CST_LOW (size);
465 if (compare_tree_int (size, size_as_int) == 0)
466 warning (0, "size of %q+D is %d bytes", decl, size_as_int);
467 else
468 warning (0, "size of %q+D is larger than %wd bytes",
469 decl, larger_than_size);
473 /* If the RTL was already set, update its mode and mem attributes. */
474 if (rtl)
476 PUT_MODE (rtl, DECL_MODE (decl));
477 SET_DECL_RTL (decl, 0);
478 set_mem_attributes (rtl, decl, 1);
479 SET_DECL_RTL (decl, rtl);
483 /* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
484 a previous call to layout_decl and calls it again. */
486 void
487 relayout_decl (tree decl)
489 DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
490 DECL_MODE (decl) = VOIDmode;
491 DECL_ALIGN (decl) = 0;
492 SET_DECL_RTL (decl, 0);
494 layout_decl (decl, 0);
497 /* Hook for a front-end function that can modify the record layout as needed
498 immediately before it is finalized. */
500 static void (*lang_adjust_rli) (record_layout_info) = 0;
502 void
503 set_lang_adjust_rli (void (*f) (record_layout_info))
505 lang_adjust_rli = f;
508 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
509 QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which
510 is to be passed to all other layout functions for this record. It is the
511 responsibility of the caller to call `free' for the storage returned.
512 Note that garbage collection is not permitted until we finish laying
513 out the record. */
515 record_layout_info
516 start_record_layout (tree t)
518 record_layout_info rli = xmalloc (sizeof (struct record_layout_info_s));
520 rli->t = t;
522 /* If the type has a minimum specified alignment (via an attribute
523 declaration, for example) use it -- otherwise, start with a
524 one-byte alignment. */
525 rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
526 rli->unpacked_align = rli->record_align;
527 rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
529 #ifdef STRUCTURE_SIZE_BOUNDARY
530 /* Packed structures don't need to have minimum size. */
531 if (! TYPE_PACKED (t))
532 rli->record_align = MAX (rli->record_align, (unsigned) STRUCTURE_SIZE_BOUNDARY);
533 #endif
535 rli->offset = size_zero_node;
536 rli->bitpos = bitsize_zero_node;
537 rli->prev_field = 0;
538 rli->pending_statics = 0;
539 rli->packed_maybe_necessary = 0;
541 return rli;
544 /* These four routines perform computations that convert between
545 the offset/bitpos forms and byte and bit offsets. */
547 tree
548 bit_from_pos (tree offset, tree bitpos)
550 return size_binop (PLUS_EXPR, bitpos,
551 size_binop (MULT_EXPR,
552 fold_convert (bitsizetype, offset),
553 bitsize_unit_node));
556 tree
557 byte_from_pos (tree offset, tree bitpos)
559 return size_binop (PLUS_EXPR, offset,
560 fold_convert (sizetype,
561 size_binop (TRUNC_DIV_EXPR, bitpos,
562 bitsize_unit_node)));
565 void
566 pos_from_bit (tree *poffset, tree *pbitpos, unsigned int off_align,
567 tree pos)
569 *poffset = size_binop (MULT_EXPR,
570 fold_convert (sizetype,
571 size_binop (FLOOR_DIV_EXPR, pos,
572 bitsize_int (off_align))),
573 size_int (off_align / BITS_PER_UNIT));
574 *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, bitsize_int (off_align));
577 /* Given a pointer to bit and byte offsets and an offset alignment,
578 normalize the offsets so they are within the alignment. */
580 void
581 normalize_offset (tree *poffset, tree *pbitpos, unsigned int off_align)
583 /* If the bit position is now larger than it should be, adjust it
584 downwards. */
585 if (compare_tree_int (*pbitpos, off_align) >= 0)
587 tree extra_aligns = size_binop (FLOOR_DIV_EXPR, *pbitpos,
588 bitsize_int (off_align));
590 *poffset
591 = size_binop (PLUS_EXPR, *poffset,
592 size_binop (MULT_EXPR,
593 fold_convert (sizetype, extra_aligns),
594 size_int (off_align / BITS_PER_UNIT)));
596 *pbitpos
597 = size_binop (FLOOR_MOD_EXPR, *pbitpos, bitsize_int (off_align));
601 /* Print debugging information about the information in RLI. */
603 void
604 debug_rli (record_layout_info rli)
606 print_node_brief (stderr, "type", rli->t, 0);
607 print_node_brief (stderr, "\noffset", rli->offset, 0);
608 print_node_brief (stderr, " bitpos", rli->bitpos, 0);
610 fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
611 rli->record_align, rli->unpacked_align,
612 rli->offset_align);
613 if (rli->packed_maybe_necessary)
614 fprintf (stderr, "packed may be necessary\n");
616 if (rli->pending_statics)
618 fprintf (stderr, "pending statics:\n");
619 debug_tree (rli->pending_statics);
623 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
624 BITPOS if necessary to keep BITPOS below OFFSET_ALIGN. */
626 void
627 normalize_rli (record_layout_info rli)
629 normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
632 /* Returns the size in bytes allocated so far. */
634 tree
635 rli_size_unit_so_far (record_layout_info rli)
637 return byte_from_pos (rli->offset, rli->bitpos);
640 /* Returns the size in bits allocated so far. */
642 tree
643 rli_size_so_far (record_layout_info rli)
645 return bit_from_pos (rli->offset, rli->bitpos);
648 /* FIELD is about to be added to RLI->T. The alignment (in bits) of
649 the next available location within the record is given by KNOWN_ALIGN.
650 Update the variable alignment fields in RLI, and return the alignment
651 to give the FIELD. */
653 unsigned int
654 update_alignment_for_field (record_layout_info rli, tree field,
655 unsigned int known_align)
657 /* The alignment required for FIELD. */
658 unsigned int desired_align;
659 /* The type of this field. */
660 tree type = TREE_TYPE (field);
661 /* True if the field was explicitly aligned by the user. */
662 bool user_align;
663 bool is_bitfield;
665 /* Lay out the field so we know what alignment it needs. */
666 layout_decl (field, known_align);
667 desired_align = DECL_ALIGN (field);
668 user_align = DECL_USER_ALIGN (field);
670 is_bitfield = (type != error_mark_node
671 && DECL_BIT_FIELD_TYPE (field)
672 && ! integer_zerop (TYPE_SIZE (type)));
674 /* Record must have at least as much alignment as any field.
675 Otherwise, the alignment of the field within the record is
676 meaningless. */
677 if (is_bitfield && targetm.ms_bitfield_layout_p (rli->t))
679 /* Here, the alignment of the underlying type of a bitfield can
680 affect the alignment of a record; even a zero-sized field
681 can do this. The alignment should be to the alignment of
682 the type, except that for zero-size bitfields this only
683 applies if there was an immediately prior, nonzero-size
684 bitfield. (That's the way it is, experimentally.) */
685 if (! integer_zerop (DECL_SIZE (field))
686 ? ! DECL_PACKED (field)
687 : (rli->prev_field
688 && DECL_BIT_FIELD_TYPE (rli->prev_field)
689 && ! integer_zerop (DECL_SIZE (rli->prev_field))))
691 unsigned int type_align = TYPE_ALIGN (type);
692 type_align = MAX (type_align, desired_align);
693 if (maximum_field_alignment != 0)
694 type_align = MIN (type_align, maximum_field_alignment);
695 rli->record_align = MAX (rli->record_align, type_align);
696 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
697 /* If we start a new run, make sure we start it properly aligned. */
698 if ((!rli->prev_field
699 || integer_zerop (DECL_SIZE (field))
700 || integer_zerop (DECL_SIZE (rli->prev_field))
701 || !host_integerp (DECL_SIZE (rli->prev_field), 0)
702 || !host_integerp (TYPE_SIZE (type), 0)
703 || !simple_cst_equal (TYPE_SIZE (type),
704 TYPE_SIZE (TREE_TYPE (rli->prev_field)))
705 || (rli->remaining_in_alignment
706 < tree_low_cst (DECL_SIZE (field), 0)))
707 && desired_align < type_align)
708 desired_align = type_align;
711 #ifdef PCC_BITFIELD_TYPE_MATTERS
712 else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
714 /* Named bit-fields cause the entire structure to have the
715 alignment implied by their type. Some targets also apply the same
716 rules to unnamed bitfields. */
717 if (DECL_NAME (field) != 0
718 || targetm.align_anon_bitfield ())
720 unsigned int type_align = TYPE_ALIGN (type);
722 #ifdef ADJUST_FIELD_ALIGN
723 if (! TYPE_USER_ALIGN (type))
724 type_align = ADJUST_FIELD_ALIGN (field, type_align);
725 #endif
727 /* Targets might chose to handle unnamed and hence possibly
728 zero-width bitfield. Those are not influenced by #pragmas
729 or packed attributes. */
730 if (integer_zerop (DECL_SIZE (field)))
732 if (initial_max_fld_align)
733 type_align = MIN (type_align,
734 initial_max_fld_align * BITS_PER_UNIT);
736 else if (maximum_field_alignment != 0)
737 type_align = MIN (type_align, maximum_field_alignment);
738 else if (DECL_PACKED (field))
739 type_align = MIN (type_align, BITS_PER_UNIT);
741 /* The alignment of the record is increased to the maximum
742 of the current alignment, the alignment indicated on the
743 field (i.e., the alignment specified by an __aligned__
744 attribute), and the alignment indicated by the type of
745 the field. */
746 rli->record_align = MAX (rli->record_align, desired_align);
747 rli->record_align = MAX (rli->record_align, type_align);
749 if (warn_packed)
750 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
751 user_align |= TYPE_USER_ALIGN (type);
754 #endif
755 else
757 rli->record_align = MAX (rli->record_align, desired_align);
758 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
761 TYPE_USER_ALIGN (rli->t) |= user_align;
763 return desired_align;
766 /* Called from place_field to handle unions. */
768 static void
769 place_union_field (record_layout_info rli, tree field)
771 update_alignment_for_field (rli, field, /*known_align=*/0);
773 DECL_FIELD_OFFSET (field) = size_zero_node;
774 DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
775 SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
777 /* We assume the union's size will be a multiple of a byte so we don't
778 bother with BITPOS. */
779 if (TREE_CODE (rli->t) == UNION_TYPE)
780 rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
781 else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
782 rli->offset = fold_build3 (COND_EXPR, sizetype,
783 DECL_QUALIFIER (field),
784 DECL_SIZE_UNIT (field), rli->offset);
787 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
788 /* A bitfield of SIZE with a required access alignment of ALIGN is allocated
789 at BYTE_OFFSET / BIT_OFFSET. Return nonzero if the field would span more
790 units of alignment than the underlying TYPE. */
791 static int
792 excess_unit_span (HOST_WIDE_INT byte_offset, HOST_WIDE_INT bit_offset,
793 HOST_WIDE_INT size, HOST_WIDE_INT align, tree type)
795 /* Note that the calculation of OFFSET might overflow; we calculate it so
796 that we still get the right result as long as ALIGN is a power of two. */
797 unsigned HOST_WIDE_INT offset = byte_offset * BITS_PER_UNIT + bit_offset;
799 offset = offset % align;
800 return ((offset + size + align - 1) / align
801 > ((unsigned HOST_WIDE_INT) tree_low_cst (TYPE_SIZE (type), 1)
802 / align));
804 #endif
806 /* RLI contains information about the layout of a RECORD_TYPE. FIELD
807 is a FIELD_DECL to be added after those fields already present in
808 T. (FIELD is not actually added to the TYPE_FIELDS list here;
809 callers that desire that behavior must manually perform that step.) */
811 void
812 place_field (record_layout_info rli, tree field)
814 /* The alignment required for FIELD. */
815 unsigned int desired_align;
816 /* The alignment FIELD would have if we just dropped it into the
817 record as it presently stands. */
818 unsigned int known_align;
819 unsigned int actual_align;
820 /* The type of this field. */
821 tree type = TREE_TYPE (field);
823 gcc_assert (TREE_CODE (field) != ERROR_MARK);
825 if (TREE_CODE (type) == ERROR_MARK)
827 if (TREE_CODE (field) == FIELD_DECL)
829 DECL_FIELD_OFFSET (field) = size_int (0);
830 DECL_FIELD_BIT_OFFSET (field) = bitsize_int (0);
833 return;
836 /* If FIELD is static, then treat it like a separate variable, not
837 really like a structure field. If it is a FUNCTION_DECL, it's a
838 method. In both cases, all we do is lay out the decl, and we do
839 it *after* the record is laid out. */
840 if (TREE_CODE (field) == VAR_DECL)
842 rli->pending_statics = tree_cons (NULL_TREE, field,
843 rli->pending_statics);
844 return;
847 /* Enumerators and enum types which are local to this class need not
848 be laid out. Likewise for initialized constant fields. */
849 else if (TREE_CODE (field) != FIELD_DECL)
850 return;
852 /* Unions are laid out very differently than records, so split
853 that code off to another function. */
854 else if (TREE_CODE (rli->t) != RECORD_TYPE)
856 place_union_field (rli, field);
857 return;
860 /* Work out the known alignment so far. Note that A & (-A) is the
861 value of the least-significant bit in A that is one. */
862 if (! integer_zerop (rli->bitpos))
863 known_align = (tree_low_cst (rli->bitpos, 1)
864 & - tree_low_cst (rli->bitpos, 1));
865 else if (integer_zerop (rli->offset))
866 known_align = 0;
867 else if (host_integerp (rli->offset, 1))
868 known_align = (BITS_PER_UNIT
869 * (tree_low_cst (rli->offset, 1)
870 & - tree_low_cst (rli->offset, 1)));
871 else
872 known_align = rli->offset_align;
874 desired_align = update_alignment_for_field (rli, field, known_align);
875 if (known_align == 0)
876 known_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
878 if (warn_packed && DECL_PACKED (field))
880 if (known_align >= TYPE_ALIGN (type))
882 if (TYPE_ALIGN (type) > desired_align)
884 if (STRICT_ALIGNMENT)
885 warning (OPT_Wattributes, "packed attribute causes "
886 "inefficient alignment for %q+D", field);
887 else
888 warning (OPT_Wattributes, "packed attribute is "
889 "unnecessary for %q+D", field);
892 else
893 rli->packed_maybe_necessary = 1;
896 /* Does this field automatically have alignment it needs by virtue
897 of the fields that precede it and the record's own alignment? */
898 if (known_align < desired_align)
900 /* No, we need to skip space before this field.
901 Bump the cumulative size to multiple of field alignment. */
903 warning (OPT_Wpadded, "padding struct to align %q+D", field);
905 /* If the alignment is still within offset_align, just align
906 the bit position. */
907 if (desired_align < rli->offset_align)
908 rli->bitpos = round_up (rli->bitpos, desired_align);
909 else
911 /* First adjust OFFSET by the partial bits, then align. */
912 rli->offset
913 = size_binop (PLUS_EXPR, rli->offset,
914 fold_convert (sizetype,
915 size_binop (CEIL_DIV_EXPR, rli->bitpos,
916 bitsize_unit_node)));
917 rli->bitpos = bitsize_zero_node;
919 rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
922 if (! TREE_CONSTANT (rli->offset))
923 rli->offset_align = desired_align;
927 /* Handle compatibility with PCC. Note that if the record has any
928 variable-sized fields, we need not worry about compatibility. */
929 #ifdef PCC_BITFIELD_TYPE_MATTERS
930 if (PCC_BITFIELD_TYPE_MATTERS
931 && ! targetm.ms_bitfield_layout_p (rli->t)
932 && TREE_CODE (field) == FIELD_DECL
933 && type != error_mark_node
934 && DECL_BIT_FIELD (field)
935 && ! DECL_PACKED (field)
936 && maximum_field_alignment == 0
937 && ! integer_zerop (DECL_SIZE (field))
938 && host_integerp (DECL_SIZE (field), 1)
939 && host_integerp (rli->offset, 1)
940 && host_integerp (TYPE_SIZE (type), 1))
942 unsigned int type_align = TYPE_ALIGN (type);
943 tree dsize = DECL_SIZE (field);
944 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
945 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
946 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
948 #ifdef ADJUST_FIELD_ALIGN
949 if (! TYPE_USER_ALIGN (type))
950 type_align = ADJUST_FIELD_ALIGN (field, type_align);
951 #endif
953 /* A bit field may not span more units of alignment of its type
954 than its type itself. Advance to next boundary if necessary. */
955 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
956 rli->bitpos = round_up (rli->bitpos, type_align);
958 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
960 #endif
962 #ifdef BITFIELD_NBYTES_LIMITED
963 if (BITFIELD_NBYTES_LIMITED
964 && ! targetm.ms_bitfield_layout_p (rli->t)
965 && TREE_CODE (field) == FIELD_DECL
966 && type != error_mark_node
967 && DECL_BIT_FIELD_TYPE (field)
968 && ! DECL_PACKED (field)
969 && ! integer_zerop (DECL_SIZE (field))
970 && host_integerp (DECL_SIZE (field), 1)
971 && host_integerp (rli->offset, 1)
972 && host_integerp (TYPE_SIZE (type), 1))
974 unsigned int type_align = TYPE_ALIGN (type);
975 tree dsize = DECL_SIZE (field);
976 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
977 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
978 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
980 #ifdef ADJUST_FIELD_ALIGN
981 if (! TYPE_USER_ALIGN (type))
982 type_align = ADJUST_FIELD_ALIGN (field, type_align);
983 #endif
985 if (maximum_field_alignment != 0)
986 type_align = MIN (type_align, maximum_field_alignment);
987 /* ??? This test is opposite the test in the containing if
988 statement, so this code is unreachable currently. */
989 else if (DECL_PACKED (field))
990 type_align = MIN (type_align, BITS_PER_UNIT);
992 /* A bit field may not span the unit of alignment of its type.
993 Advance to next boundary if necessary. */
994 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
995 rli->bitpos = round_up (rli->bitpos, type_align);
997 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
999 #endif
1001 /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.
1002 A subtlety:
1003 When a bit field is inserted into a packed record, the whole
1004 size of the underlying type is used by one or more same-size
1005 adjacent bitfields. (That is, if its long:3, 32 bits is
1006 used in the record, and any additional adjacent long bitfields are
1007 packed into the same chunk of 32 bits. However, if the size
1008 changes, a new field of that size is allocated.) In an unpacked
1009 record, this is the same as using alignment, but not equivalent
1010 when packing.
1012 Note: for compatibility, we use the type size, not the type alignment
1013 to determine alignment, since that matches the documentation */
1015 if (targetm.ms_bitfield_layout_p (rli->t)
1016 && ((DECL_BIT_FIELD_TYPE (field) && ! DECL_PACKED (field))
1017 || (rli->prev_field && ! DECL_PACKED (rli->prev_field))))
1019 /* At this point, either the prior or current are bitfields,
1020 (possibly both), and we're dealing with MS packing. */
1021 tree prev_saved = rli->prev_field;
1023 /* Is the prior field a bitfield? If so, handle "runs" of same
1024 type size fields. */
1025 if (rli->prev_field /* necessarily a bitfield if it exists. */)
1027 /* If both are bitfields, nonzero, and the same size, this is
1028 the middle of a run. Zero declared size fields are special
1029 and handled as "end of run". (Note: it's nonzero declared
1030 size, but equal type sizes!) (Since we know that both
1031 the current and previous fields are bitfields by the
1032 time we check it, DECL_SIZE must be present for both.) */
1033 if (DECL_BIT_FIELD_TYPE (field)
1034 && !integer_zerop (DECL_SIZE (field))
1035 && !integer_zerop (DECL_SIZE (rli->prev_field))
1036 && host_integerp (DECL_SIZE (rli->prev_field), 0)
1037 && host_integerp (TYPE_SIZE (type), 0)
1038 && simple_cst_equal (TYPE_SIZE (type),
1039 TYPE_SIZE (TREE_TYPE (rli->prev_field))))
1041 /* We're in the middle of a run of equal type size fields; make
1042 sure we realign if we run out of bits. (Not decl size,
1043 type size!) */
1044 HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 0);
1046 if (rli->remaining_in_alignment < bitsize)
1048 /* If PREV_FIELD is packed, and we haven't lumped
1049 non-packed bitfields with it, treat this as if PREV_FIELD
1050 was not a bitfield. This avoids anomalies where a packed
1051 bitfield with long long base type can take up more
1052 space than a same-size bitfield with base type short. */
1053 if (rli->prev_packed)
1054 rli->prev_field = prev_saved = NULL;
1055 else
1057 /* out of bits; bump up to next 'word'. */
1058 rli->offset = DECL_FIELD_OFFSET (rli->prev_field);
1059 rli->bitpos
1060 = size_binop (PLUS_EXPR, TYPE_SIZE (type),
1061 DECL_FIELD_BIT_OFFSET (rli->prev_field));
1062 rli->prev_field = field;
1063 rli->remaining_in_alignment
1064 = tree_low_cst (TYPE_SIZE (type), 0) - bitsize;
1067 else
1068 rli->remaining_in_alignment -= bitsize;
1070 else if (rli->prev_packed)
1071 rli->prev_field = prev_saved = NULL;
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 /* If the desired alignment is greater or equal to TYPE_SIZE,
1088 we have already adjusted rli->bitpos / rli->offset above.
1090 if ((unsigned HOST_WIDE_INT) tree_low_cst (type_size, 0)
1091 > desired_align)
1092 rli->bitpos
1093 = size_binop (PLUS_EXPR, type_size,
1094 DECL_FIELD_BIT_OFFSET (rli->prev_field));
1096 else
1097 /* We "use up" size zero fields; the code below should behave
1098 as if the prior field was not a bitfield. */
1099 prev_saved = NULL;
1101 /* Cause a new bitfield to be captured, either this time (if
1102 currently a bitfield) or next time we see one. */
1103 if (!DECL_BIT_FIELD_TYPE(field)
1104 || integer_zerop (DECL_SIZE (field)))
1105 rli->prev_field = NULL;
1108 rli->prev_packed = 0;
1109 normalize_rli (rli);
1112 /* If we're starting a new run of same size type bitfields
1113 (or a run of non-bitfields), set up the "first of the run"
1114 fields.
1116 That is, if the current field is not a bitfield, or if there
1117 was a prior bitfield the type sizes differ, or if there wasn't
1118 a prior bitfield the size of the current field is nonzero.
1120 Note: we must be sure to test ONLY the type size if there was
1121 a prior bitfield and ONLY for the current field being zero if
1122 there wasn't. */
1124 if (!DECL_BIT_FIELD_TYPE (field)
1125 || ( prev_saved != NULL
1126 ? !simple_cst_equal (TYPE_SIZE (type),
1127 TYPE_SIZE (TREE_TYPE (prev_saved)))
1128 : !integer_zerop (DECL_SIZE (field)) ))
1130 /* Never smaller than a byte for compatibility. */
1131 unsigned int type_align = BITS_PER_UNIT;
1133 /* (When not a bitfield), we could be seeing a flex array (with
1134 no DECL_SIZE). Since we won't be using remaining_in_alignment
1135 until we see a bitfield (and come by here again) we just skip
1136 calculating it. */
1137 if (DECL_SIZE (field) != NULL
1138 && host_integerp (TYPE_SIZE (TREE_TYPE (field)), 0)
1139 && host_integerp (DECL_SIZE (field), 0))
1140 rli->remaining_in_alignment
1141 = tree_low_cst (TYPE_SIZE (TREE_TYPE(field)), 0)
1142 - tree_low_cst (DECL_SIZE (field), 0);
1144 /* Now align (conventionally) for the new type. */
1145 if (!DECL_PACKED(field))
1146 type_align = MAX(TYPE_ALIGN (type), type_align);
1148 if (prev_saved
1149 && DECL_BIT_FIELD_TYPE (prev_saved)
1150 /* If the previous bit-field is zero-sized, we've already
1151 accounted for its alignment needs (or ignored it, if
1152 appropriate) while placing it. */
1153 && ! integer_zerop (DECL_SIZE (prev_saved)))
1154 type_align = MAX (type_align,
1155 TYPE_ALIGN (TREE_TYPE (prev_saved)));
1157 if (maximum_field_alignment != 0)
1158 type_align = MIN (type_align, maximum_field_alignment);
1160 rli->bitpos = round_up (rli->bitpos, type_align);
1162 /* If we really aligned, don't allow subsequent bitfields
1163 to undo that. */
1164 rli->prev_field = NULL;
1168 /* Offset so far becomes the position of this field after normalizing. */
1169 normalize_rli (rli);
1170 DECL_FIELD_OFFSET (field) = rli->offset;
1171 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1172 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1174 /* If this field ended up more aligned than we thought it would be (we
1175 approximate this by seeing if its position changed), lay out the field
1176 again; perhaps we can use an integral mode for it now. */
1177 if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
1178 actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1179 & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
1180 else if (integer_zerop (DECL_FIELD_OFFSET (field)))
1181 actual_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
1182 else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
1183 actual_align = (BITS_PER_UNIT
1184 * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1185 & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
1186 else
1187 actual_align = DECL_OFFSET_ALIGN (field);
1188 /* ACTUAL_ALIGN is still the actual alignment *within the record* .
1189 store / extract bit field operations will check the alignment of the
1190 record against the mode of bit fields. */
1192 if (known_align != actual_align)
1193 layout_decl (field, actual_align);
1195 if (DECL_BIT_FIELD_TYPE (field))
1197 unsigned int type_align = TYPE_ALIGN (type);
1198 unsigned int mfa = maximum_field_alignment;
1200 if (integer_zerop (DECL_SIZE (field)))
1201 mfa = initial_max_fld_align * BITS_PER_UNIT;
1203 /* Only the MS bitfields use this. We used to also put any kind of
1204 packed bit fields into prev_field, but that makes no sense, because
1205 an 8 bit packed bit field shouldn't impose more restriction on
1206 following fields than a char field, and the alignment requirements
1207 are also not fulfilled.
1208 There is no sane value to set rli->remaining_in_alignment to when
1209 a packed bitfield in prev_field is unaligned. */
1210 if (mfa != 0)
1211 type_align = MIN (type_align, mfa);
1212 gcc_assert (rli->prev_field
1213 || actual_align >= type_align || DECL_PACKED (field)
1214 || integer_zerop (DECL_SIZE (field))
1215 || !targetm.ms_bitfield_layout_p (rli->t));
1216 if (rli->prev_field == NULL && actual_align >= type_align
1217 && !integer_zerop (DECL_SIZE (field)))
1219 rli->prev_field = field;
1220 /* rli->remaining_in_alignment has not been set if the bitfield
1221 has size zero, or if it is a packed bitfield. */
1222 rli->remaining_in_alignment
1223 = (tree_low_cst (TYPE_SIZE (TREE_TYPE (field)), 0)
1224 - tree_low_cst (DECL_SIZE (field), 0));
1225 rli->prev_packed = DECL_PACKED (field);
1228 else if (rli->prev_field && DECL_PACKED (field))
1230 HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 0);
1232 if (rli->remaining_in_alignment < bitsize)
1233 rli->prev_field = NULL;
1234 else
1235 rli->remaining_in_alignment -= bitsize;
1239 /* Now add size of this field to the size of the record. If the size is
1240 not constant, treat the field as being a multiple of bytes and just
1241 adjust the offset, resetting the bit position. Otherwise, apportion the
1242 size amongst the bit position and offset. First handle the case of an
1243 unspecified size, which can happen when we have an invalid nested struct
1244 definition, such as struct j { struct j { int i; } }. The error message
1245 is printed in finish_struct. */
1246 if (DECL_SIZE (field) == 0)
1247 /* Do nothing. */;
1248 else if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST
1249 || TREE_CONSTANT_OVERFLOW (DECL_SIZE (field)))
1251 rli->offset
1252 = size_binop (PLUS_EXPR, rli->offset,
1253 fold_convert (sizetype,
1254 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1255 bitsize_unit_node)));
1256 rli->offset
1257 = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1258 rli->bitpos = bitsize_zero_node;
1259 rli->offset_align = MIN (rli->offset_align, desired_align);
1261 else
1263 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1264 normalize_rli (rli);
1268 /* Assuming that all the fields have been laid out, this function uses
1269 RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1270 indicated by RLI. */
1272 static void
1273 finalize_record_size (record_layout_info rli)
1275 tree unpadded_size, unpadded_size_unit;
1277 /* Now we want just byte and bit offsets, so set the offset alignment
1278 to be a byte and then normalize. */
1279 rli->offset_align = BITS_PER_UNIT;
1280 normalize_rli (rli);
1282 /* Determine the desired alignment. */
1283 #ifdef ROUND_TYPE_ALIGN
1284 TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
1285 rli->record_align);
1286 #else
1287 TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
1288 #endif
1290 /* Compute the size so far. Be sure to allow for extra bits in the
1291 size in bytes. We have guaranteed above that it will be no more
1292 than a single byte. */
1293 unpadded_size = rli_size_so_far (rli);
1294 unpadded_size_unit = rli_size_unit_so_far (rli);
1295 if (! integer_zerop (rli->bitpos))
1296 unpadded_size_unit
1297 = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
1299 /* Round the size up to be a multiple of the required alignment. */
1300 TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
1301 TYPE_SIZE_UNIT (rli->t)
1302 = round_up (unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
1304 if (TREE_CONSTANT (unpadded_size)
1305 && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
1306 warning (OPT_Wpadded, "padding struct size to alignment boundary");
1308 if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1309 && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1310 && TREE_CONSTANT (unpadded_size))
1312 tree unpacked_size;
1314 #ifdef ROUND_TYPE_ALIGN
1315 rli->unpacked_align
1316 = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
1317 #else
1318 rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
1319 #endif
1321 unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
1322 if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
1324 TYPE_PACKED (rli->t) = 0;
1326 if (TYPE_NAME (rli->t))
1328 const char *name;
1330 if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1331 name = IDENTIFIER_POINTER (TYPE_NAME (rli->t));
1332 else
1333 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
1335 if (STRICT_ALIGNMENT)
1336 warning (OPT_Wpacked, "packed attribute causes inefficient "
1337 "alignment for %qs", name);
1338 else
1339 warning (OPT_Wpacked,
1340 "packed attribute is unnecessary for %qs", name);
1342 else
1344 if (STRICT_ALIGNMENT)
1345 warning (OPT_Wpacked,
1346 "packed attribute causes inefficient alignment");
1347 else
1348 warning (OPT_Wpacked, "packed attribute is unnecessary");
1354 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE). */
1356 void
1357 compute_record_mode (tree type)
1359 tree field;
1360 enum machine_mode mode = VOIDmode;
1362 /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1363 However, if possible, we use a mode that fits in a register
1364 instead, in order to allow for better optimization down the
1365 line. */
1366 TYPE_MODE (type) = BLKmode;
1368 if (! host_integerp (TYPE_SIZE (type), 1))
1369 return;
1371 /* A record which has any BLKmode members must itself be
1372 BLKmode; it can't go in a register. Unless the member is
1373 BLKmode only because it isn't aligned. */
1374 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1376 if (TREE_CODE (field) != FIELD_DECL)
1377 continue;
1379 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1380 || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1381 && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field))
1382 && !(TYPE_SIZE (TREE_TYPE (field)) != 0
1383 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))))
1384 || ! host_integerp (bit_position (field), 1)
1385 || DECL_SIZE (field) == 0
1386 || ! host_integerp (DECL_SIZE (field), 1))
1387 return;
1389 /* If this field is the whole struct, remember its mode so
1390 that, say, we can put a double in a class into a DF
1391 register instead of forcing it to live in the stack. */
1392 if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1393 mode = DECL_MODE (field);
1395 #ifdef MEMBER_TYPE_FORCES_BLK
1396 /* With some targets, eg. c4x, it is sub-optimal
1397 to access an aligned BLKmode structure as a scalar. */
1399 if (MEMBER_TYPE_FORCES_BLK (field, mode))
1400 return;
1401 #endif /* MEMBER_TYPE_FORCES_BLK */
1404 /* If we only have one real field; use its mode if that mode's size
1405 matches the type's size. This only applies to RECORD_TYPE. This
1406 does not apply to unions. */
1407 if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode
1408 && host_integerp (TYPE_SIZE (type), 1)
1409 && GET_MODE_BITSIZE (mode) == TREE_INT_CST_LOW (TYPE_SIZE (type)))
1410 TYPE_MODE (type) = mode;
1411 else
1412 TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1414 /* If structure's known alignment is less than what the scalar
1415 mode would need, and it matters, then stick with BLKmode. */
1416 if (TYPE_MODE (type) != BLKmode
1417 && STRICT_ALIGNMENT
1418 && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1419 || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1421 /* If this is the only reason this type is BLKmode, then
1422 don't force containing types to be BLKmode. */
1423 TYPE_NO_FORCE_BLK (type) = 1;
1424 TYPE_MODE (type) = BLKmode;
1428 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1429 out. */
1431 static void
1432 finalize_type_size (tree type)
1434 /* Normally, use the alignment corresponding to the mode chosen.
1435 However, where strict alignment is not required, avoid
1436 over-aligning structures, since most compilers do not do this
1437 alignment. */
1439 if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1440 && (STRICT_ALIGNMENT
1441 || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1442 && TREE_CODE (type) != QUAL_UNION_TYPE
1443 && TREE_CODE (type) != ARRAY_TYPE)))
1445 unsigned mode_align = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1447 /* Don't override a larger alignment requirement coming from a user
1448 alignment of one of the fields. */
1449 if (mode_align >= TYPE_ALIGN (type))
1451 TYPE_ALIGN (type) = mode_align;
1452 TYPE_USER_ALIGN (type) = 0;
1456 /* Do machine-dependent extra alignment. */
1457 #ifdef ROUND_TYPE_ALIGN
1458 TYPE_ALIGN (type)
1459 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1460 #endif
1462 /* If we failed to find a simple way to calculate the unit size
1463 of the type, find it by division. */
1464 if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1465 /* TYPE_SIZE (type) is computed in bitsizetype. After the division, the
1466 result will fit in sizetype. We will get more efficient code using
1467 sizetype, so we force a conversion. */
1468 TYPE_SIZE_UNIT (type)
1469 = fold_convert (sizetype,
1470 size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1471 bitsize_unit_node));
1473 if (TYPE_SIZE (type) != 0)
1475 TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1476 TYPE_SIZE_UNIT (type) = round_up (TYPE_SIZE_UNIT (type),
1477 TYPE_ALIGN_UNIT (type));
1480 /* Evaluate nonconstant sizes only once, either now or as soon as safe. */
1481 if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1482 TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1483 if (TYPE_SIZE_UNIT (type) != 0
1484 && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1485 TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1487 /* Also layout any other variants of the type. */
1488 if (TYPE_NEXT_VARIANT (type)
1489 || type != TYPE_MAIN_VARIANT (type))
1491 tree variant;
1492 /* Record layout info of this variant. */
1493 tree size = TYPE_SIZE (type);
1494 tree size_unit = TYPE_SIZE_UNIT (type);
1495 unsigned int align = TYPE_ALIGN (type);
1496 unsigned int user_align = TYPE_USER_ALIGN (type);
1497 enum machine_mode mode = TYPE_MODE (type);
1499 /* Copy it into all variants. */
1500 for (variant = TYPE_MAIN_VARIANT (type);
1501 variant != 0;
1502 variant = TYPE_NEXT_VARIANT (variant))
1504 TYPE_SIZE (variant) = size;
1505 TYPE_SIZE_UNIT (variant) = size_unit;
1506 TYPE_ALIGN (variant) = align;
1507 TYPE_USER_ALIGN (variant) = user_align;
1508 TYPE_MODE (variant) = mode;
1513 /* Do all of the work required to layout the type indicated by RLI,
1514 once the fields have been laid out. This function will call `free'
1515 for RLI, unless FREE_P is false. Passing a value other than false
1516 for FREE_P is bad practice; this option only exists to support the
1517 G++ 3.2 ABI. */
1519 void
1520 finish_record_layout (record_layout_info rli, int free_p)
1522 /* Compute the final size. */
1523 finalize_record_size (rli);
1525 /* Compute the TYPE_MODE for the record. */
1526 compute_record_mode (rli->t);
1528 /* Perform any last tweaks to the TYPE_SIZE, etc. */
1529 finalize_type_size (rli->t);
1531 /* Lay out any static members. This is done now because their type
1532 may use the record's type. */
1533 while (rli->pending_statics)
1535 layout_decl (TREE_VALUE (rli->pending_statics), 0);
1536 rli->pending_statics = TREE_CHAIN (rli->pending_statics);
1539 /* Clean up. */
1540 if (free_p)
1541 free (rli);
1545 /* Finish processing a builtin RECORD_TYPE type TYPE. It's name is
1546 NAME, its fields are chained in reverse on FIELDS.
1548 If ALIGN_TYPE is non-null, it is given the same alignment as
1549 ALIGN_TYPE. */
1551 void
1552 finish_builtin_struct (tree type, const char *name, tree fields,
1553 tree align_type)
1555 tree tail, next;
1557 for (tail = NULL_TREE; fields; tail = fields, fields = next)
1559 DECL_FIELD_CONTEXT (fields) = type;
1560 next = TREE_CHAIN (fields);
1561 TREE_CHAIN (fields) = tail;
1563 TYPE_FIELDS (type) = tail;
1565 if (align_type)
1567 TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
1568 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (align_type);
1571 layout_type (type);
1572 #if 0 /* not yet, should get fixed properly later */
1573 TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
1574 #else
1575 TYPE_NAME (type) = build_decl (TYPE_DECL, get_identifier (name), type);
1576 #endif
1577 TYPE_STUB_DECL (type) = TYPE_NAME (type);
1578 layout_decl (TYPE_NAME (type), 0);
1581 /* Calculate the mode, size, and alignment for TYPE.
1582 For an array type, calculate the element separation as well.
1583 Record TYPE on the chain of permanent or temporary types
1584 so that dbxout will find out about it.
1586 TYPE_SIZE of a type is nonzero if the type has been laid out already.
1587 layout_type does nothing on such a type.
1589 If the type is incomplete, its TYPE_SIZE remains zero. */
1591 void
1592 layout_type (tree type)
1594 gcc_assert (type);
1596 if (type == error_mark_node)
1597 return;
1599 /* Do nothing if type has been laid out before. */
1600 if (TYPE_SIZE (type))
1601 return;
1603 switch (TREE_CODE (type))
1605 case LANG_TYPE:
1606 /* This kind of type is the responsibility
1607 of the language-specific code. */
1608 gcc_unreachable ();
1610 case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */
1611 if (TYPE_PRECISION (type) == 0)
1612 TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */
1614 /* ... fall through ... */
1616 case INTEGER_TYPE:
1617 case ENUMERAL_TYPE:
1618 if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
1619 && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
1620 TYPE_UNSIGNED (type) = 1;
1622 TYPE_MODE (type) = smallest_mode_for_size (TYPE_PRECISION (type),
1623 MODE_INT);
1624 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1625 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1626 break;
1628 case REAL_TYPE:
1629 TYPE_MODE (type) = mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0);
1630 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1631 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1632 break;
1634 case COMPLEX_TYPE:
1635 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
1636 TYPE_MODE (type)
1637 = mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
1638 (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE
1639 ? MODE_COMPLEX_FLOAT : MODE_COMPLEX_INT),
1641 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1642 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1643 break;
1645 case VECTOR_TYPE:
1647 int nunits = TYPE_VECTOR_SUBPARTS (type);
1648 tree nunits_tree = build_int_cst (NULL_TREE, nunits);
1649 tree innertype = TREE_TYPE (type);
1651 gcc_assert (!(nunits & (nunits - 1)));
1653 /* Find an appropriate mode for the vector type. */
1654 if (TYPE_MODE (type) == VOIDmode)
1656 enum machine_mode innermode = TYPE_MODE (innertype);
1657 enum machine_mode mode;
1659 /* First, look for a supported vector type. */
1660 if (SCALAR_FLOAT_MODE_P (innermode))
1661 mode = MIN_MODE_VECTOR_FLOAT;
1662 else
1663 mode = MIN_MODE_VECTOR_INT;
1665 for (; mode != VOIDmode ; mode = GET_MODE_WIDER_MODE (mode))
1666 if (GET_MODE_NUNITS (mode) == nunits
1667 && GET_MODE_INNER (mode) == innermode
1668 && targetm.vector_mode_supported_p (mode))
1669 break;
1671 /* For integers, try mapping it to a same-sized scalar mode. */
1672 if (mode == VOIDmode
1673 && GET_MODE_CLASS (innermode) == MODE_INT)
1674 mode = mode_for_size (nunits * GET_MODE_BITSIZE (innermode),
1675 MODE_INT, 0);
1677 if (mode == VOIDmode || !have_regs_of_mode[mode])
1678 TYPE_MODE (type) = BLKmode;
1679 else
1680 TYPE_MODE (type) = mode;
1683 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
1684 TYPE_SIZE_UNIT (type) = int_const_binop (MULT_EXPR,
1685 TYPE_SIZE_UNIT (innertype),
1686 nunits_tree, 0);
1687 TYPE_SIZE (type) = int_const_binop (MULT_EXPR, TYPE_SIZE (innertype),
1688 nunits_tree, 0);
1690 /* Always naturally align vectors. This prevents ABI changes
1691 depending on whether or not native vector modes are supported. */
1692 TYPE_ALIGN (type) = tree_low_cst (TYPE_SIZE (type), 0);
1693 break;
1696 case VOID_TYPE:
1697 /* This is an incomplete type and so doesn't have a size. */
1698 TYPE_ALIGN (type) = 1;
1699 TYPE_USER_ALIGN (type) = 0;
1700 TYPE_MODE (type) = VOIDmode;
1701 break;
1703 case OFFSET_TYPE:
1704 TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1705 TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1706 /* A pointer might be MODE_PARTIAL_INT,
1707 but ptrdiff_t must be integral. */
1708 TYPE_MODE (type) = mode_for_size (POINTER_SIZE, MODE_INT, 0);
1709 break;
1711 case FUNCTION_TYPE:
1712 case METHOD_TYPE:
1713 /* It's hard to see what the mode and size of a function ought to
1714 be, but we do know the alignment is FUNCTION_BOUNDARY, so
1715 make it consistent with that. */
1716 TYPE_MODE (type) = mode_for_size (FUNCTION_BOUNDARY, MODE_INT, 0);
1717 TYPE_SIZE (type) = bitsize_int (FUNCTION_BOUNDARY);
1718 TYPE_SIZE_UNIT (type) = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
1719 break;
1721 case POINTER_TYPE:
1722 case REFERENCE_TYPE:
1725 enum machine_mode mode = ((TREE_CODE (type) == REFERENCE_TYPE
1726 && reference_types_internal)
1727 ? Pmode : TYPE_MODE (type));
1729 int nbits = GET_MODE_BITSIZE (mode);
1731 TYPE_SIZE (type) = bitsize_int (nbits);
1732 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
1733 TYPE_UNSIGNED (type) = 1;
1734 TYPE_PRECISION (type) = nbits;
1736 break;
1738 case ARRAY_TYPE:
1740 tree index = TYPE_DOMAIN (type);
1741 tree element = TREE_TYPE (type);
1743 build_pointer_type (element);
1745 /* We need to know both bounds in order to compute the size. */
1746 if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
1747 && TYPE_SIZE (element))
1749 tree ub = TYPE_MAX_VALUE (index);
1750 tree lb = TYPE_MIN_VALUE (index);
1751 tree length;
1752 tree element_size;
1754 /* The initial subtraction should happen in the original type so
1755 that (possible) negative values are handled appropriately. */
1756 length = size_binop (PLUS_EXPR, size_one_node,
1757 fold_convert (sizetype,
1758 fold_build2 (MINUS_EXPR,
1759 TREE_TYPE (lb),
1760 ub, lb)));
1762 /* Special handling for arrays of bits (for Chill). */
1763 element_size = TYPE_SIZE (element);
1764 if (TYPE_PACKED (type) && INTEGRAL_TYPE_P (element)
1765 && (integer_zerop (TYPE_MAX_VALUE (element))
1766 || integer_onep (TYPE_MAX_VALUE (element)))
1767 && host_integerp (TYPE_MIN_VALUE (element), 1))
1769 HOST_WIDE_INT maxvalue
1770 = tree_low_cst (TYPE_MAX_VALUE (element), 1);
1771 HOST_WIDE_INT minvalue
1772 = tree_low_cst (TYPE_MIN_VALUE (element), 1);
1774 if (maxvalue - minvalue == 1
1775 && (maxvalue == 1 || maxvalue == 0))
1776 element_size = integer_one_node;
1779 /* If neither bound is a constant and sizetype is signed, make
1780 sure the size is never negative. We should really do this
1781 if *either* bound is non-constant, but this is the best
1782 compromise between C and Ada. */
1783 if (!TYPE_UNSIGNED (sizetype)
1784 && TREE_CODE (TYPE_MIN_VALUE (index)) != INTEGER_CST
1785 && TREE_CODE (TYPE_MAX_VALUE (index)) != INTEGER_CST)
1786 length = size_binop (MAX_EXPR, length, size_zero_node);
1788 TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
1789 fold_convert (bitsizetype,
1790 length));
1792 /* If we know the size of the element, calculate the total
1793 size directly, rather than do some division thing below.
1794 This optimization helps Fortran assumed-size arrays
1795 (where the size of the array is determined at runtime)
1796 substantially.
1797 Note that we can't do this in the case where the size of
1798 the elements is one bit since TYPE_SIZE_UNIT cannot be
1799 set correctly in that case. */
1800 if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
1801 TYPE_SIZE_UNIT (type)
1802 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
1805 /* Now round the alignment and size,
1806 using machine-dependent criteria if any. */
1808 #ifdef ROUND_TYPE_ALIGN
1809 TYPE_ALIGN (type)
1810 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
1811 #else
1812 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1813 #endif
1814 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
1815 TYPE_MODE (type) = BLKmode;
1816 if (TYPE_SIZE (type) != 0
1817 #ifdef MEMBER_TYPE_FORCES_BLK
1818 && ! MEMBER_TYPE_FORCES_BLK (type, VOIDmode)
1819 #endif
1820 /* BLKmode elements force BLKmode aggregate;
1821 else extract/store fields may lose. */
1822 && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
1823 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
1825 /* One-element arrays get the component type's mode. */
1826 if (simple_cst_equal (TYPE_SIZE (type),
1827 TYPE_SIZE (TREE_TYPE (type))))
1828 TYPE_MODE (type) = TYPE_MODE (TREE_TYPE (type));
1829 else
1830 TYPE_MODE (type)
1831 = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1833 if (TYPE_MODE (type) != BLKmode
1834 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
1835 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type))
1836 && TYPE_MODE (type) != BLKmode)
1838 TYPE_NO_FORCE_BLK (type) = 1;
1839 TYPE_MODE (type) = BLKmode;
1842 /* When the element size is constant, check that it is at least as
1843 large as the element alignment. */
1844 if (TYPE_SIZE_UNIT (element)
1845 && TREE_CODE (TYPE_SIZE_UNIT (element)) == INTEGER_CST
1846 /* If TYPE_SIZE_UNIT overflowed, then it is certainly larger than
1847 TYPE_ALIGN_UNIT. */
1848 && !TREE_CONSTANT_OVERFLOW (TYPE_SIZE_UNIT (element))
1849 && !integer_zerop (TYPE_SIZE_UNIT (element))
1850 && compare_tree_int (TYPE_SIZE_UNIT (element),
1851 TYPE_ALIGN_UNIT (element)) < 0)
1852 error ("alignment of array elements is greater than element size");
1853 break;
1856 case RECORD_TYPE:
1857 case UNION_TYPE:
1858 case QUAL_UNION_TYPE:
1860 tree field;
1861 record_layout_info rli;
1863 /* Initialize the layout information. */
1864 rli = start_record_layout (type);
1866 /* If this is a QUAL_UNION_TYPE, we want to process the fields
1867 in the reverse order in building the COND_EXPR that denotes
1868 its size. We reverse them again later. */
1869 if (TREE_CODE (type) == QUAL_UNION_TYPE)
1870 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1872 /* Place all the fields. */
1873 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1874 place_field (rli, field);
1876 if (TREE_CODE (type) == QUAL_UNION_TYPE)
1877 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1879 if (lang_adjust_rli)
1880 (*lang_adjust_rli) (rli);
1882 /* Finish laying out the record. */
1883 finish_record_layout (rli, /*free_p=*/true);
1885 break;
1887 default:
1888 gcc_unreachable ();
1891 /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE. For
1892 records and unions, finish_record_layout already called this
1893 function. */
1894 if (TREE_CODE (type) != RECORD_TYPE
1895 && TREE_CODE (type) != UNION_TYPE
1896 && TREE_CODE (type) != QUAL_UNION_TYPE)
1897 finalize_type_size (type);
1899 /* If an alias set has been set for this aggregate when it was incomplete,
1900 force it into alias set 0.
1901 This is too conservative, but we cannot call record_component_aliases
1902 here because some frontends still change the aggregates after
1903 layout_type. */
1904 if (AGGREGATE_TYPE_P (type) && TYPE_ALIAS_SET_KNOWN_P (type))
1905 TYPE_ALIAS_SET (type) = 0;
1908 /* Create and return a type for signed integers of PRECISION bits. */
1910 tree
1911 make_signed_type (int precision)
1913 tree type = make_node (INTEGER_TYPE);
1915 TYPE_PRECISION (type) = precision;
1917 fixup_signed_type (type);
1918 return type;
1921 /* Create and return a type for unsigned integers of PRECISION bits. */
1923 tree
1924 make_unsigned_type (int precision)
1926 tree type = make_node (INTEGER_TYPE);
1928 TYPE_PRECISION (type) = precision;
1930 fixup_unsigned_type (type);
1931 return type;
1934 /* Initialize sizetype and bitsizetype to a reasonable and temporary
1935 value to enable integer types to be created. */
1937 void
1938 initialize_sizetypes (bool signed_p)
1940 tree t = make_node (INTEGER_TYPE);
1942 TYPE_MODE (t) = SImode;
1943 TYPE_ALIGN (t) = GET_MODE_ALIGNMENT (SImode);
1944 TYPE_USER_ALIGN (t) = 0;
1945 TYPE_IS_SIZETYPE (t) = 1;
1946 TYPE_UNSIGNED (t) = !signed_p;
1947 TYPE_SIZE (t) = build_int_cst (t, GET_MODE_BITSIZE (SImode));
1948 TYPE_SIZE_UNIT (t) = build_int_cst (t, GET_MODE_SIZE (SImode));
1949 TYPE_PRECISION (t) = GET_MODE_BITSIZE (SImode);
1950 TYPE_MIN_VALUE (t) = build_int_cst (t, 0);
1952 /* 1000 avoids problems with possible overflow and is certainly
1953 larger than any size value we'd want to be storing. */
1954 TYPE_MAX_VALUE (t) = build_int_cst (t, 1000);
1956 sizetype = t;
1957 bitsizetype = build_distinct_type_copy (t);
1960 /* Make sizetype a version of TYPE, and initialize *sizetype
1961 accordingly. We do this by overwriting the stub sizetype and
1962 bitsizetype nodes created by initialize_sizetypes. This makes sure
1963 that (a) anything stubby about them no longer exists, (b) any
1964 INTEGER_CSTs created with such a type, remain valid. */
1966 void
1967 set_sizetype (tree type)
1969 int oprecision = TYPE_PRECISION (type);
1970 /* The *bitsizetype types use a precision that avoids overflows when
1971 calculating signed sizes / offsets in bits. However, when
1972 cross-compiling from a 32 bit to a 64 bit host, we are limited to 64 bit
1973 precision. */
1974 int precision = MIN (oprecision + BITS_PER_UNIT_LOG + 1,
1975 2 * HOST_BITS_PER_WIDE_INT);
1976 tree t;
1978 gcc_assert (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (sizetype));
1980 t = build_distinct_type_copy (type);
1981 /* We do want to use sizetype's cache, as we will be replacing that
1982 type. */
1983 TYPE_CACHED_VALUES (t) = TYPE_CACHED_VALUES (sizetype);
1984 TYPE_CACHED_VALUES_P (t) = TYPE_CACHED_VALUES_P (sizetype);
1985 TREE_TYPE (TYPE_CACHED_VALUES (t)) = type;
1986 TYPE_UID (t) = TYPE_UID (sizetype);
1987 TYPE_IS_SIZETYPE (t) = 1;
1989 /* Replace our original stub sizetype. */
1990 memcpy (sizetype, t, tree_size (sizetype));
1991 TYPE_MAIN_VARIANT (sizetype) = sizetype;
1993 t = make_node (INTEGER_TYPE);
1994 TYPE_NAME (t) = get_identifier ("bit_size_type");
1995 /* We do want to use bitsizetype's cache, as we will be replacing that
1996 type. */
1997 TYPE_CACHED_VALUES (t) = TYPE_CACHED_VALUES (bitsizetype);
1998 TYPE_CACHED_VALUES_P (t) = TYPE_CACHED_VALUES_P (bitsizetype);
1999 TYPE_PRECISION (t) = precision;
2000 TYPE_UID (t) = TYPE_UID (bitsizetype);
2001 TYPE_IS_SIZETYPE (t) = 1;
2003 /* Replace our original stub bitsizetype. */
2004 memcpy (bitsizetype, t, tree_size (bitsizetype));
2005 TYPE_MAIN_VARIANT (bitsizetype) = bitsizetype;
2007 if (TYPE_UNSIGNED (type))
2009 fixup_unsigned_type (bitsizetype);
2010 ssizetype = build_distinct_type_copy (make_signed_type (oprecision));
2011 TYPE_IS_SIZETYPE (ssizetype) = 1;
2012 sbitsizetype = build_distinct_type_copy (make_signed_type (precision));
2013 TYPE_IS_SIZETYPE (sbitsizetype) = 1;
2015 else
2017 fixup_signed_type (bitsizetype);
2018 ssizetype = sizetype;
2019 sbitsizetype = bitsizetype;
2023 /* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE
2024 or BOOLEAN_TYPE. Set TYPE_MIN_VALUE and TYPE_MAX_VALUE
2025 for TYPE, based on the PRECISION and whether or not the TYPE
2026 IS_UNSIGNED. PRECISION need not correspond to a width supported
2027 natively by the hardware; for example, on a machine with 8-bit,
2028 16-bit, and 32-bit register modes, PRECISION might be 7, 23, or
2029 61. */
2031 void
2032 set_min_and_max_values_for_integral_type (tree type,
2033 int precision,
2034 bool is_unsigned)
2036 tree min_value;
2037 tree max_value;
2039 if (is_unsigned)
2041 min_value = build_int_cst (type, 0);
2042 max_value
2043 = build_int_cst_wide (type, precision - HOST_BITS_PER_WIDE_INT >= 0
2044 ? -1
2045 : ((HOST_WIDE_INT) 1 << precision) - 1,
2046 precision - HOST_BITS_PER_WIDE_INT > 0
2047 ? ((unsigned HOST_WIDE_INT) ~0
2048 >> (HOST_BITS_PER_WIDE_INT
2049 - (precision - HOST_BITS_PER_WIDE_INT)))
2050 : 0);
2052 else
2054 min_value
2055 = build_int_cst_wide (type,
2056 (precision - HOST_BITS_PER_WIDE_INT > 0
2058 : (HOST_WIDE_INT) (-1) << (precision - 1)),
2059 (((HOST_WIDE_INT) (-1)
2060 << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2061 ? precision - HOST_BITS_PER_WIDE_INT - 1
2062 : 0))));
2063 max_value
2064 = build_int_cst_wide (type,
2065 (precision - HOST_BITS_PER_WIDE_INT > 0
2066 ? -1
2067 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
2068 (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2069 ? (((HOST_WIDE_INT) 1
2070 << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
2071 : 0));
2074 TYPE_MIN_VALUE (type) = min_value;
2075 TYPE_MAX_VALUE (type) = max_value;
2078 /* Set the extreme values of TYPE based on its precision in bits,
2079 then lay it out. Used when make_signed_type won't do
2080 because the tree code is not INTEGER_TYPE.
2081 E.g. for Pascal, when the -fsigned-char option is given. */
2083 void
2084 fixup_signed_type (tree type)
2086 int precision = TYPE_PRECISION (type);
2088 /* We can not represent properly constants greater then
2089 2 * HOST_BITS_PER_WIDE_INT, still we need the types
2090 as they are used by i386 vector extensions and friends. */
2091 if (precision > HOST_BITS_PER_WIDE_INT * 2)
2092 precision = HOST_BITS_PER_WIDE_INT * 2;
2094 set_min_and_max_values_for_integral_type (type, precision,
2095 /*is_unsigned=*/false);
2097 /* Lay out the type: set its alignment, size, etc. */
2098 layout_type (type);
2101 /* Set the extreme values of TYPE based on its precision in bits,
2102 then lay it out. This is used both in `make_unsigned_type'
2103 and for enumeral types. */
2105 void
2106 fixup_unsigned_type (tree type)
2108 int precision = TYPE_PRECISION (type);
2110 /* We can not represent properly constants greater then
2111 2 * HOST_BITS_PER_WIDE_INT, still we need the types
2112 as they are used by i386 vector extensions and friends. */
2113 if (precision > HOST_BITS_PER_WIDE_INT * 2)
2114 precision = HOST_BITS_PER_WIDE_INT * 2;
2116 TYPE_UNSIGNED (type) = 1;
2118 set_min_and_max_values_for_integral_type (type, precision,
2119 /*is_unsigned=*/true);
2121 /* Lay out the type: set its alignment, size, etc. */
2122 layout_type (type);
2125 /* Find the best machine mode to use when referencing a bit field of length
2126 BITSIZE bits starting at BITPOS.
2128 The underlying object is known to be aligned to a boundary of ALIGN bits.
2129 If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
2130 larger than LARGEST_MODE (usually SImode).
2132 If no mode meets all these conditions, we return VOIDmode. Otherwise, if
2133 VOLATILEP is true or SLOW_BYTE_ACCESS is false, we return the smallest
2134 mode meeting these conditions.
2136 Otherwise (VOLATILEP is false and SLOW_BYTE_ACCESS is true), we return
2137 the largest mode (but a mode no wider than UNITS_PER_WORD) that meets
2138 all the conditions. */
2140 enum machine_mode
2141 get_best_mode (int bitsize, int bitpos, unsigned int align,
2142 enum machine_mode largest_mode, int volatilep)
2144 enum machine_mode mode;
2145 unsigned int unit = 0;
2147 /* Find the narrowest integer mode that contains the bit field. */
2148 for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
2149 mode = GET_MODE_WIDER_MODE (mode))
2151 unit = GET_MODE_BITSIZE (mode);
2152 if ((bitpos % unit) + bitsize <= unit)
2153 break;
2156 if (mode == VOIDmode
2157 /* It is tempting to omit the following line
2158 if STRICT_ALIGNMENT is true.
2159 But that is incorrect, since if the bitfield uses part of 3 bytes
2160 and we use a 4-byte mode, we could get a spurious segv
2161 if the extra 4th byte is past the end of memory.
2162 (Though at least one Unix compiler ignores this problem:
2163 that on the Sequent 386 machine. */
2164 || MIN (unit, BIGGEST_ALIGNMENT) > align
2165 || (largest_mode != VOIDmode && unit > GET_MODE_BITSIZE (largest_mode)))
2166 return VOIDmode;
2168 if (SLOW_BYTE_ACCESS && ! volatilep)
2170 enum machine_mode wide_mode = VOIDmode, tmode;
2172 for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmode != VOIDmode;
2173 tmode = GET_MODE_WIDER_MODE (tmode))
2175 unit = GET_MODE_BITSIZE (tmode);
2176 if (bitpos / unit == (bitpos + bitsize - 1) / unit
2177 && unit <= BITS_PER_WORD
2178 && unit <= MIN (align, BIGGEST_ALIGNMENT)
2179 && (largest_mode == VOIDmode
2180 || unit <= GET_MODE_BITSIZE (largest_mode)))
2181 wide_mode = tmode;
2184 if (wide_mode != VOIDmode)
2185 return wide_mode;
2188 return mode;
2191 /* Gets minimal and maximal values for MODE (signed or unsigned depending on
2192 SIGN). The returned constants are made to be usable in TARGET_MODE. */
2194 void
2195 get_mode_bounds (enum machine_mode mode, int sign,
2196 enum machine_mode target_mode,
2197 rtx *mmin, rtx *mmax)
2199 unsigned size = GET_MODE_BITSIZE (mode);
2200 unsigned HOST_WIDE_INT min_val, max_val;
2202 gcc_assert (size <= HOST_BITS_PER_WIDE_INT);
2204 if (sign)
2206 min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1));
2207 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1)) - 1;
2209 else
2211 min_val = 0;
2212 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1) << 1) - 1;
2215 *mmin = gen_int_mode (min_val, target_mode);
2216 *mmax = gen_int_mode (max_val, target_mode);
2219 #include "gt-stor-layout.h"