[asan] Avoid instrumenting duplicated memory access in the same basic block
[gcc.git] / gcc / stor-layout.c
1 /* C-compiler utilities for types and variables storage layout
2 Copyright (C) 1987-2013 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
19
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26 #include "rtl.h"
27 #include "tm_p.h"
28 #include "flags.h"
29 #include "function.h"
30 #include "expr.h"
31 #include "diagnostic-core.h"
32 #include "ggc.h"
33 #include "target.h"
34 #include "langhooks.h"
35 #include "regs.h"
36 #include "params.h"
37 #include "cgraph.h"
38 #include "tree-inline.h"
39 #include "tree-dump.h"
40 #include "gimple.h"
41
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) stk_type_kind_last];
45
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
50 /* Nonzero if all REFERENCE_TYPEs are internal and hence should be allocated
51 in the address spaces' address_mode, not pointer_mode. Set only by
52 internal_reference_types called only by a front end. */
53 static int reference_types_internal = 0;
54
55 static tree self_referential_size (tree);
56 static void finalize_record_size (record_layout_info);
57 static void finalize_type_size (tree);
58 static void place_union_field (record_layout_info, tree);
59 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
60 static int excess_unit_span (HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT,
61 HOST_WIDE_INT, tree);
62 #endif
63 extern void debug_rli (record_layout_info);
64 \f
65 /* Show that REFERENCE_TYPES are internal and should use address_mode.
66 Called only by front end. */
67
68 void
69 internal_reference_types (void)
70 {
71 reference_types_internal = 1;
72 }
73
74 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR
75 to serve as the actual size-expression for a type or decl. */
76
77 tree
78 variable_size (tree size)
79 {
80 /* Obviously. */
81 if (TREE_CONSTANT (size))
82 return size;
83
84 /* If the size is self-referential, we can't make a SAVE_EXPR (see
85 save_expr for the rationale). But we can do something else. */
86 if (CONTAINS_PLACEHOLDER_P (size))
87 return self_referential_size (size);
88
89 /* If we are in the global binding level, we can't make a SAVE_EXPR
90 since it may end up being shared across functions, so it is up
91 to the front-end to deal with this case. */
92 if (lang_hooks.decls.global_bindings_p ())
93 return size;
94
95 return save_expr (size);
96 }
97
98 /* An array of functions used for self-referential size computation. */
99 static GTY(()) vec<tree, va_gc> *size_functions;
100
101 /* Look inside EXPR into simple arithmetic operations involving constants.
102 Return the outermost non-arithmetic or non-constant node. */
103
104 static tree
105 skip_simple_constant_arithmetic (tree expr)
106 {
107 while (true)
108 {
109 if (UNARY_CLASS_P (expr))
110 expr = TREE_OPERAND (expr, 0);
111 else if (BINARY_CLASS_P (expr))
112 {
113 if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
114 expr = TREE_OPERAND (expr, 0);
115 else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
116 expr = TREE_OPERAND (expr, 1);
117 else
118 break;
119 }
120 else
121 break;
122 }
123
124 return expr;
125 }
126
127 /* Similar to copy_tree_r but do not copy component references involving
128 PLACEHOLDER_EXPRs. These nodes are spotted in find_placeholder_in_expr
129 and substituted in substitute_in_expr. */
130
131 static tree
132 copy_self_referential_tree_r (tree *tp, int *walk_subtrees, void *data)
133 {
134 enum tree_code code = TREE_CODE (*tp);
135
136 /* Stop at types, decls, constants like copy_tree_r. */
137 if (TREE_CODE_CLASS (code) == tcc_type
138 || TREE_CODE_CLASS (code) == tcc_declaration
139 || TREE_CODE_CLASS (code) == tcc_constant)
140 {
141 *walk_subtrees = 0;
142 return NULL_TREE;
143 }
144
145 /* This is the pattern built in ada/make_aligning_type. */
146 else if (code == ADDR_EXPR
147 && TREE_CODE (TREE_OPERAND (*tp, 0)) == PLACEHOLDER_EXPR)
148 {
149 *walk_subtrees = 0;
150 return NULL_TREE;
151 }
152
153 /* Default case: the component reference. */
154 else if (code == COMPONENT_REF)
155 {
156 tree inner;
157 for (inner = TREE_OPERAND (*tp, 0);
158 REFERENCE_CLASS_P (inner);
159 inner = TREE_OPERAND (inner, 0))
160 ;
161
162 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
163 {
164 *walk_subtrees = 0;
165 return NULL_TREE;
166 }
167 }
168
169 /* We're not supposed to have them in self-referential size trees
170 because we wouldn't properly control when they are evaluated.
171 However, not creating superfluous SAVE_EXPRs requires accurate
172 tracking of readonly-ness all the way down to here, which we
173 cannot always guarantee in practice. So punt in this case. */
174 else if (code == SAVE_EXPR)
175 return error_mark_node;
176
177 else if (code == STATEMENT_LIST)
178 gcc_unreachable ();
179
180 return copy_tree_r (tp, walk_subtrees, data);
181 }
182
183 /* Given a SIZE expression that is self-referential, return an equivalent
184 expression to serve as the actual size expression for a type. */
185
186 static tree
187 self_referential_size (tree size)
188 {
189 static unsigned HOST_WIDE_INT fnno = 0;
190 vec<tree> self_refs = vNULL;
191 tree param_type_list = NULL, param_decl_list = NULL;
192 tree t, ref, return_type, fntype, fnname, fndecl;
193 unsigned int i;
194 char buf[128];
195 vec<tree, va_gc> *args = NULL;
196
197 /* Do not factor out simple operations. */
198 t = skip_simple_constant_arithmetic (size);
199 if (TREE_CODE (t) == CALL_EXPR)
200 return size;
201
202 /* Collect the list of self-references in the expression. */
203 find_placeholder_in_expr (size, &self_refs);
204 gcc_assert (self_refs.length () > 0);
205
206 /* Obtain a private copy of the expression. */
207 t = size;
208 if (walk_tree (&t, copy_self_referential_tree_r, NULL, NULL) != NULL_TREE)
209 return size;
210 size = t;
211
212 /* Build the parameter and argument lists in parallel; also
213 substitute the former for the latter in the expression. */
214 vec_alloc (args, self_refs.length ());
215 FOR_EACH_VEC_ELT (self_refs, i, ref)
216 {
217 tree subst, param_name, param_type, param_decl;
218
219 if (DECL_P (ref))
220 {
221 /* We shouldn't have true variables here. */
222 gcc_assert (TREE_READONLY (ref));
223 subst = ref;
224 }
225 /* This is the pattern built in ada/make_aligning_type. */
226 else if (TREE_CODE (ref) == ADDR_EXPR)
227 subst = ref;
228 /* Default case: the component reference. */
229 else
230 subst = TREE_OPERAND (ref, 1);
231
232 sprintf (buf, "p%d", i);
233 param_name = get_identifier (buf);
234 param_type = TREE_TYPE (ref);
235 param_decl
236 = build_decl (input_location, PARM_DECL, param_name, param_type);
237 if (targetm.calls.promote_prototypes (NULL_TREE)
238 && INTEGRAL_TYPE_P (param_type)
239 && TYPE_PRECISION (param_type) < TYPE_PRECISION (integer_type_node))
240 DECL_ARG_TYPE (param_decl) = integer_type_node;
241 else
242 DECL_ARG_TYPE (param_decl) = param_type;
243 DECL_ARTIFICIAL (param_decl) = 1;
244 TREE_READONLY (param_decl) = 1;
245
246 size = substitute_in_expr (size, subst, param_decl);
247
248 param_type_list = tree_cons (NULL_TREE, param_type, param_type_list);
249 param_decl_list = chainon (param_decl, param_decl_list);
250 args->quick_push (ref);
251 }
252
253 self_refs.release ();
254
255 /* Append 'void' to indicate that the number of parameters is fixed. */
256 param_type_list = tree_cons (NULL_TREE, void_type_node, param_type_list);
257
258 /* The 3 lists have been created in reverse order. */
259 param_type_list = nreverse (param_type_list);
260 param_decl_list = nreverse (param_decl_list);
261
262 /* Build the function type. */
263 return_type = TREE_TYPE (size);
264 fntype = build_function_type (return_type, param_type_list);
265
266 /* Build the function declaration. */
267 sprintf (buf, "SZ"HOST_WIDE_INT_PRINT_UNSIGNED, fnno++);
268 fnname = get_file_function_name (buf);
269 fndecl = build_decl (input_location, FUNCTION_DECL, fnname, fntype);
270 for (t = param_decl_list; t; t = DECL_CHAIN (t))
271 DECL_CONTEXT (t) = fndecl;
272 DECL_ARGUMENTS (fndecl) = param_decl_list;
273 DECL_RESULT (fndecl)
274 = build_decl (input_location, RESULT_DECL, 0, return_type);
275 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
276
277 /* The function has been created by the compiler and we don't
278 want to emit debug info for it. */
279 DECL_ARTIFICIAL (fndecl) = 1;
280 DECL_IGNORED_P (fndecl) = 1;
281
282 /* It is supposed to be "const" and never throw. */
283 TREE_READONLY (fndecl) = 1;
284 TREE_NOTHROW (fndecl) = 1;
285
286 /* We want it to be inlined when this is deemed profitable, as
287 well as discarded if every call has been integrated. */
288 DECL_DECLARED_INLINE_P (fndecl) = 1;
289
290 /* It is made up of a unique return statement. */
291 DECL_INITIAL (fndecl) = make_node (BLOCK);
292 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
293 t = build2 (MODIFY_EXPR, return_type, DECL_RESULT (fndecl), size);
294 DECL_SAVED_TREE (fndecl) = build1 (RETURN_EXPR, void_type_node, t);
295 TREE_STATIC (fndecl) = 1;
296
297 /* Put it onto the list of size functions. */
298 vec_safe_push (size_functions, fndecl);
299
300 /* Replace the original expression with a call to the size function. */
301 return build_call_expr_loc_vec (UNKNOWN_LOCATION, fndecl, args);
302 }
303
304 /* Take, queue and compile all the size functions. It is essential that
305 the size functions be gimplified at the very end of the compilation
306 in order to guarantee transparent handling of self-referential sizes.
307 Otherwise the GENERIC inliner would not be able to inline them back
308 at each of their call sites, thus creating artificial non-constant
309 size expressions which would trigger nasty problems later on. */
310
311 void
312 finalize_size_functions (void)
313 {
314 unsigned int i;
315 tree fndecl;
316
317 for (i = 0; size_functions && size_functions->iterate (i, &fndecl); i++)
318 {
319 dump_function (TDI_original, fndecl);
320 gimplify_function_tree (fndecl);
321 dump_function (TDI_generic, fndecl);
322 cgraph_finalize_function (fndecl, false);
323 }
324
325 vec_free (size_functions);
326 }
327 \f
328 /* Return the machine mode to use for a nonscalar of SIZE bits. The
329 mode must be in class MCLASS, and have exactly that many value bits;
330 it may have padding as well. If LIMIT is nonzero, modes of wider
331 than MAX_FIXED_MODE_SIZE will not be used. */
332
333 enum machine_mode
334 mode_for_size (unsigned int size, enum mode_class mclass, int limit)
335 {
336 enum machine_mode mode;
337
338 if (limit && size > MAX_FIXED_MODE_SIZE)
339 return BLKmode;
340
341 /* Get the first mode which has this size, in the specified class. */
342 for (mode = GET_CLASS_NARROWEST_MODE (mclass); mode != VOIDmode;
343 mode = GET_MODE_WIDER_MODE (mode))
344 if (GET_MODE_PRECISION (mode) == size)
345 return mode;
346
347 return BLKmode;
348 }
349
350 /* Similar, except passed a tree node. */
351
352 enum machine_mode
353 mode_for_size_tree (const_tree size, enum mode_class mclass, int limit)
354 {
355 unsigned HOST_WIDE_INT uhwi;
356 unsigned int ui;
357
358 if (!host_integerp (size, 1))
359 return BLKmode;
360 uhwi = tree_low_cst (size, 1);
361 ui = uhwi;
362 if (uhwi != ui)
363 return BLKmode;
364 return mode_for_size (ui, mclass, limit);
365 }
366
367 /* Similar, but never return BLKmode; return the narrowest mode that
368 contains at least the requested number of value bits. */
369
370 enum machine_mode
371 smallest_mode_for_size (unsigned int size, enum mode_class mclass)
372 {
373 enum machine_mode mode;
374
375 /* Get the first mode which has at least this size, in the
376 specified class. */
377 for (mode = GET_CLASS_NARROWEST_MODE (mclass); mode != VOIDmode;
378 mode = GET_MODE_WIDER_MODE (mode))
379 if (GET_MODE_PRECISION (mode) >= size)
380 return mode;
381
382 gcc_unreachable ();
383 }
384
385 /* Find an integer mode of the exact same size, or BLKmode on failure. */
386
387 enum machine_mode
388 int_mode_for_mode (enum machine_mode mode)
389 {
390 switch (GET_MODE_CLASS (mode))
391 {
392 case MODE_INT:
393 case MODE_PARTIAL_INT:
394 break;
395
396 case MODE_COMPLEX_INT:
397 case MODE_COMPLEX_FLOAT:
398 case MODE_FLOAT:
399 case MODE_DECIMAL_FLOAT:
400 case MODE_VECTOR_INT:
401 case MODE_VECTOR_FLOAT:
402 case MODE_FRACT:
403 case MODE_ACCUM:
404 case MODE_UFRACT:
405 case MODE_UACCUM:
406 case MODE_VECTOR_FRACT:
407 case MODE_VECTOR_ACCUM:
408 case MODE_VECTOR_UFRACT:
409 case MODE_VECTOR_UACCUM:
410 mode = mode_for_size (GET_MODE_BITSIZE (mode), MODE_INT, 0);
411 break;
412
413 case MODE_RANDOM:
414 if (mode == BLKmode)
415 break;
416
417 /* ... fall through ... */
418
419 case MODE_CC:
420 default:
421 gcc_unreachable ();
422 }
423
424 return mode;
425 }
426
427 /* Find a mode that is suitable for representing a vector with
428 NUNITS elements of mode INNERMODE. Returns BLKmode if there
429 is no suitable mode. */
430
431 enum machine_mode
432 mode_for_vector (enum machine_mode innermode, unsigned nunits)
433 {
434 enum machine_mode mode;
435
436 /* First, look for a supported vector type. */
437 if (SCALAR_FLOAT_MODE_P (innermode))
438 mode = MIN_MODE_VECTOR_FLOAT;
439 else if (SCALAR_FRACT_MODE_P (innermode))
440 mode = MIN_MODE_VECTOR_FRACT;
441 else if (SCALAR_UFRACT_MODE_P (innermode))
442 mode = MIN_MODE_VECTOR_UFRACT;
443 else if (SCALAR_ACCUM_MODE_P (innermode))
444 mode = MIN_MODE_VECTOR_ACCUM;
445 else if (SCALAR_UACCUM_MODE_P (innermode))
446 mode = MIN_MODE_VECTOR_UACCUM;
447 else
448 mode = MIN_MODE_VECTOR_INT;
449
450 /* Do not check vector_mode_supported_p here. We'll do that
451 later in vector_type_mode. */
452 for (; mode != VOIDmode ; mode = GET_MODE_WIDER_MODE (mode))
453 if (GET_MODE_NUNITS (mode) == nunits
454 && GET_MODE_INNER (mode) == innermode)
455 break;
456
457 /* For integers, try mapping it to a same-sized scalar mode. */
458 if (mode == VOIDmode
459 && GET_MODE_CLASS (innermode) == MODE_INT)
460 mode = mode_for_size (nunits * GET_MODE_BITSIZE (innermode),
461 MODE_INT, 0);
462
463 if (mode == VOIDmode
464 || (GET_MODE_CLASS (mode) == MODE_INT
465 && !have_regs_of_mode[mode]))
466 return BLKmode;
467
468 return mode;
469 }
470
471 /* Return the alignment of MODE. This will be bounded by 1 and
472 BIGGEST_ALIGNMENT. */
473
474 unsigned int
475 get_mode_alignment (enum machine_mode mode)
476 {
477 return MIN (BIGGEST_ALIGNMENT, MAX (1, mode_base_align[mode]*BITS_PER_UNIT));
478 }
479
480 /* Return the natural mode of an array, given that it is SIZE bytes in
481 total and has elements of type ELEM_TYPE. */
482
483 static enum machine_mode
484 mode_for_array (tree elem_type, tree size)
485 {
486 tree elem_size;
487 unsigned HOST_WIDE_INT int_size, int_elem_size;
488 bool limit_p;
489
490 /* One-element arrays get the component type's mode. */
491 elem_size = TYPE_SIZE (elem_type);
492 if (simple_cst_equal (size, elem_size))
493 return TYPE_MODE (elem_type);
494
495 limit_p = true;
496 if (host_integerp (size, 1) && host_integerp (elem_size, 1))
497 {
498 int_size = tree_low_cst (size, 1);
499 int_elem_size = tree_low_cst (elem_size, 1);
500 if (int_elem_size > 0
501 && int_size % int_elem_size == 0
502 && targetm.array_mode_supported_p (TYPE_MODE (elem_type),
503 int_size / int_elem_size))
504 limit_p = false;
505 }
506 return mode_for_size_tree (size, MODE_INT, limit_p);
507 }
508 \f
509 /* Subroutine of layout_decl: Force alignment required for the data type.
510 But if the decl itself wants greater alignment, don't override that. */
511
512 static inline void
513 do_type_align (tree type, tree decl)
514 {
515 if (TYPE_ALIGN (type) > DECL_ALIGN (decl))
516 {
517 DECL_ALIGN (decl) = TYPE_ALIGN (type);
518 if (TREE_CODE (decl) == FIELD_DECL)
519 DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type);
520 }
521 }
522
523 /* Set the size, mode and alignment of a ..._DECL node.
524 TYPE_DECL does need this for C++.
525 Note that LABEL_DECL and CONST_DECL nodes do not need this,
526 and FUNCTION_DECL nodes have them set up in a special (and simple) way.
527 Don't call layout_decl for them.
528
529 KNOWN_ALIGN is the amount of alignment we can assume this
530 decl has with no special effort. It is relevant only for FIELD_DECLs
531 and depends on the previous fields.
532 All that matters about KNOWN_ALIGN is which powers of 2 divide it.
533 If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
534 the record will be aligned to suit. */
535
536 void
537 layout_decl (tree decl, unsigned int known_align)
538 {
539 tree type = TREE_TYPE (decl);
540 enum tree_code code = TREE_CODE (decl);
541 rtx rtl = NULL_RTX;
542 location_t loc = DECL_SOURCE_LOCATION (decl);
543
544 if (code == CONST_DECL)
545 return;
546
547 gcc_assert (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL
548 || code == TYPE_DECL ||code == FIELD_DECL);
549
550 rtl = DECL_RTL_IF_SET (decl);
551
552 if (type == error_mark_node)
553 type = void_type_node;
554
555 /* Usually the size and mode come from the data type without change,
556 however, the front-end may set the explicit width of the field, so its
557 size may not be the same as the size of its type. This happens with
558 bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
559 also happens with other fields. For example, the C++ front-end creates
560 zero-sized fields corresponding to empty base classes, and depends on
561 layout_type setting DECL_FIELD_BITPOS correctly for the field. Set the
562 size in bytes from the size in bits. If we have already set the mode,
563 don't set it again since we can be called twice for FIELD_DECLs. */
564
565 DECL_UNSIGNED (decl) = TYPE_UNSIGNED (type);
566 if (DECL_MODE (decl) == VOIDmode)
567 DECL_MODE (decl) = TYPE_MODE (type);
568
569 if (DECL_SIZE (decl) == 0)
570 {
571 DECL_SIZE (decl) = TYPE_SIZE (type);
572 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type);
573 }
574 else if (DECL_SIZE_UNIT (decl) == 0)
575 DECL_SIZE_UNIT (decl)
576 = fold_convert_loc (loc, sizetype,
577 size_binop_loc (loc, CEIL_DIV_EXPR, DECL_SIZE (decl),
578 bitsize_unit_node));
579
580 if (code != FIELD_DECL)
581 /* For non-fields, update the alignment from the type. */
582 do_type_align (type, decl);
583 else
584 /* For fields, it's a bit more complicated... */
585 {
586 bool old_user_align = DECL_USER_ALIGN (decl);
587 bool zero_bitfield = false;
588 bool packed_p = DECL_PACKED (decl);
589 unsigned int mfa;
590
591 if (DECL_BIT_FIELD (decl))
592 {
593 DECL_BIT_FIELD_TYPE (decl) = type;
594
595 /* A zero-length bit-field affects the alignment of the next
596 field. In essence such bit-fields are not influenced by
597 any packing due to #pragma pack or attribute packed. */
598 if (integer_zerop (DECL_SIZE (decl))
599 && ! targetm.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl)))
600 {
601 zero_bitfield = true;
602 packed_p = false;
603 #ifdef PCC_BITFIELD_TYPE_MATTERS
604 if (PCC_BITFIELD_TYPE_MATTERS)
605 do_type_align (type, decl);
606 else
607 #endif
608 {
609 #ifdef EMPTY_FIELD_BOUNDARY
610 if (EMPTY_FIELD_BOUNDARY > DECL_ALIGN (decl))
611 {
612 DECL_ALIGN (decl) = EMPTY_FIELD_BOUNDARY;
613 DECL_USER_ALIGN (decl) = 0;
614 }
615 #endif
616 }
617 }
618
619 /* See if we can use an ordinary integer mode for a bit-field.
620 Conditions are: a fixed size that is correct for another mode,
621 occupying a complete byte or bytes on proper boundary,
622 and not -fstrict-volatile-bitfields. If the latter is set,
623 we unfortunately can't check TREE_THIS_VOLATILE, as a cast
624 may make a volatile object later. */
625 if (TYPE_SIZE (type) != 0
626 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
627 && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT
628 && flag_strict_volatile_bitfields <= 0)
629 {
630 enum machine_mode xmode
631 = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
632 unsigned int xalign = GET_MODE_ALIGNMENT (xmode);
633
634 if (xmode != BLKmode
635 && !(xalign > BITS_PER_UNIT && DECL_PACKED (decl))
636 && (known_align == 0 || known_align >= xalign))
637 {
638 DECL_ALIGN (decl) = MAX (xalign, DECL_ALIGN (decl));
639 DECL_MODE (decl) = xmode;
640 DECL_BIT_FIELD (decl) = 0;
641 }
642 }
643
644 /* Turn off DECL_BIT_FIELD if we won't need it set. */
645 if (TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
646 && known_align >= TYPE_ALIGN (type)
647 && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
648 DECL_BIT_FIELD (decl) = 0;
649 }
650 else if (packed_p && DECL_USER_ALIGN (decl))
651 /* Don't touch DECL_ALIGN. For other packed fields, go ahead and
652 round up; we'll reduce it again below. We want packing to
653 supersede USER_ALIGN inherited from the type, but defer to
654 alignment explicitly specified on the field decl. */;
655 else
656 do_type_align (type, decl);
657
658 /* If the field is packed and not explicitly aligned, give it the
659 minimum alignment. Note that do_type_align may set
660 DECL_USER_ALIGN, so we need to check old_user_align instead. */
661 if (packed_p
662 && !old_user_align)
663 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
664
665 if (! packed_p && ! DECL_USER_ALIGN (decl))
666 {
667 /* Some targets (i.e. i386, VMS) limit struct field alignment
668 to a lower boundary than alignment of variables unless
669 it was overridden by attribute aligned. */
670 #ifdef BIGGEST_FIELD_ALIGNMENT
671 DECL_ALIGN (decl)
672 = MIN (DECL_ALIGN (decl), (unsigned) BIGGEST_FIELD_ALIGNMENT);
673 #endif
674 #ifdef ADJUST_FIELD_ALIGN
675 DECL_ALIGN (decl) = ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl));
676 #endif
677 }
678
679 if (zero_bitfield)
680 mfa = initial_max_fld_align * BITS_PER_UNIT;
681 else
682 mfa = maximum_field_alignment;
683 /* Should this be controlled by DECL_USER_ALIGN, too? */
684 if (mfa != 0)
685 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), mfa);
686 }
687
688 /* Evaluate nonconstant size only once, either now or as soon as safe. */
689 if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
690 DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
691 if (DECL_SIZE_UNIT (decl) != 0
692 && TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST)
693 DECL_SIZE_UNIT (decl) = variable_size (DECL_SIZE_UNIT (decl));
694
695 /* If requested, warn about definitions of large data objects. */
696 if (warn_larger_than
697 && (code == VAR_DECL || code == PARM_DECL)
698 && ! DECL_EXTERNAL (decl))
699 {
700 tree size = DECL_SIZE_UNIT (decl);
701
702 if (size != 0 && TREE_CODE (size) == INTEGER_CST
703 && compare_tree_int (size, larger_than_size) > 0)
704 {
705 int size_as_int = TREE_INT_CST_LOW (size);
706
707 if (compare_tree_int (size, size_as_int) == 0)
708 warning (OPT_Wlarger_than_, "size of %q+D is %d bytes", decl, size_as_int);
709 else
710 warning (OPT_Wlarger_than_, "size of %q+D is larger than %wd bytes",
711 decl, larger_than_size);
712 }
713 }
714
715 /* If the RTL was already set, update its mode and mem attributes. */
716 if (rtl)
717 {
718 PUT_MODE (rtl, DECL_MODE (decl));
719 SET_DECL_RTL (decl, 0);
720 set_mem_attributes (rtl, decl, 1);
721 SET_DECL_RTL (decl, rtl);
722 }
723 }
724
725 /* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
726 a previous call to layout_decl and calls it again. */
727
728 void
729 relayout_decl (tree decl)
730 {
731 DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
732 DECL_MODE (decl) = VOIDmode;
733 if (!DECL_USER_ALIGN (decl))
734 DECL_ALIGN (decl) = 0;
735 SET_DECL_RTL (decl, 0);
736
737 layout_decl (decl, 0);
738 }
739 \f
740 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
741 QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which
742 is to be passed to all other layout functions for this record. It is the
743 responsibility of the caller to call `free' for the storage returned.
744 Note that garbage collection is not permitted until we finish laying
745 out the record. */
746
747 record_layout_info
748 start_record_layout (tree t)
749 {
750 record_layout_info rli = XNEW (struct record_layout_info_s);
751
752 rli->t = t;
753
754 /* If the type has a minimum specified alignment (via an attribute
755 declaration, for example) use it -- otherwise, start with a
756 one-byte alignment. */
757 rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
758 rli->unpacked_align = rli->record_align;
759 rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
760
761 #ifdef STRUCTURE_SIZE_BOUNDARY
762 /* Packed structures don't need to have minimum size. */
763 if (! TYPE_PACKED (t))
764 {
765 unsigned tmp;
766
767 /* #pragma pack overrides STRUCTURE_SIZE_BOUNDARY. */
768 tmp = (unsigned) STRUCTURE_SIZE_BOUNDARY;
769 if (maximum_field_alignment != 0)
770 tmp = MIN (tmp, maximum_field_alignment);
771 rli->record_align = MAX (rli->record_align, tmp);
772 }
773 #endif
774
775 rli->offset = size_zero_node;
776 rli->bitpos = bitsize_zero_node;
777 rli->prev_field = 0;
778 rli->pending_statics = 0;
779 rli->packed_maybe_necessary = 0;
780 rli->remaining_in_alignment = 0;
781
782 return rli;
783 }
784
785 /* Return the combined bit position for the byte offset OFFSET and the
786 bit position BITPOS.
787
788 These functions operate on byte and bit positions present in FIELD_DECLs
789 and assume that these expressions result in no (intermediate) overflow.
790 This assumption is necessary to fold the expressions as much as possible,
791 so as to avoid creating artificially variable-sized types in languages
792 supporting variable-sized types like Ada. */
793
794 tree
795 bit_from_pos (tree offset, tree bitpos)
796 {
797 if (TREE_CODE (offset) == PLUS_EXPR)
798 offset = size_binop (PLUS_EXPR,
799 fold_convert (bitsizetype, TREE_OPERAND (offset, 0)),
800 fold_convert (bitsizetype, TREE_OPERAND (offset, 1)));
801 else
802 offset = fold_convert (bitsizetype, offset);
803 return size_binop (PLUS_EXPR, bitpos,
804 size_binop (MULT_EXPR, offset, bitsize_unit_node));
805 }
806
807 /* Return the combined truncated byte position for the byte offset OFFSET and
808 the bit position BITPOS. */
809
810 tree
811 byte_from_pos (tree offset, tree bitpos)
812 {
813 tree bytepos;
814 if (TREE_CODE (bitpos) == MULT_EXPR
815 && tree_int_cst_equal (TREE_OPERAND (bitpos, 1), bitsize_unit_node))
816 bytepos = TREE_OPERAND (bitpos, 0);
817 else
818 bytepos = size_binop (TRUNC_DIV_EXPR, bitpos, bitsize_unit_node);
819 return size_binop (PLUS_EXPR, offset, fold_convert (sizetype, bytepos));
820 }
821
822 /* Split the bit position POS into a byte offset *POFFSET and a bit
823 position *PBITPOS with the byte offset aligned to OFF_ALIGN bits. */
824
825 void
826 pos_from_bit (tree *poffset, tree *pbitpos, unsigned int off_align,
827 tree pos)
828 {
829 tree toff_align = bitsize_int (off_align);
830 if (TREE_CODE (pos) == MULT_EXPR
831 && tree_int_cst_equal (TREE_OPERAND (pos, 1), toff_align))
832 {
833 *poffset = size_binop (MULT_EXPR,
834 fold_convert (sizetype, TREE_OPERAND (pos, 0)),
835 size_int (off_align / BITS_PER_UNIT));
836 *pbitpos = bitsize_zero_node;
837 }
838 else
839 {
840 *poffset = size_binop (MULT_EXPR,
841 fold_convert (sizetype,
842 size_binop (FLOOR_DIV_EXPR, pos,
843 toff_align)),
844 size_int (off_align / BITS_PER_UNIT));
845 *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, toff_align);
846 }
847 }
848
849 /* Given a pointer to bit and byte offsets and an offset alignment,
850 normalize the offsets so they are within the alignment. */
851
852 void
853 normalize_offset (tree *poffset, tree *pbitpos, unsigned int off_align)
854 {
855 /* If the bit position is now larger than it should be, adjust it
856 downwards. */
857 if (compare_tree_int (*pbitpos, off_align) >= 0)
858 {
859 tree offset, bitpos;
860 pos_from_bit (&offset, &bitpos, off_align, *pbitpos);
861 *poffset = size_binop (PLUS_EXPR, *poffset, offset);
862 *pbitpos = bitpos;
863 }
864 }
865
866 /* Print debugging information about the information in RLI. */
867
868 DEBUG_FUNCTION void
869 debug_rli (record_layout_info rli)
870 {
871 print_node_brief (stderr, "type", rli->t, 0);
872 print_node_brief (stderr, "\noffset", rli->offset, 0);
873 print_node_brief (stderr, " bitpos", rli->bitpos, 0);
874
875 fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
876 rli->record_align, rli->unpacked_align,
877 rli->offset_align);
878
879 /* The ms_struct code is the only that uses this. */
880 if (targetm.ms_bitfield_layout_p (rli->t))
881 fprintf (stderr, "remaining in alignment = %u\n", rli->remaining_in_alignment);
882
883 if (rli->packed_maybe_necessary)
884 fprintf (stderr, "packed may be necessary\n");
885
886 if (!vec_safe_is_empty (rli->pending_statics))
887 {
888 fprintf (stderr, "pending statics:\n");
889 debug_vec_tree (rli->pending_statics);
890 }
891 }
892
893 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
894 BITPOS if necessary to keep BITPOS below OFFSET_ALIGN. */
895
896 void
897 normalize_rli (record_layout_info rli)
898 {
899 normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
900 }
901
902 /* Returns the size in bytes allocated so far. */
903
904 tree
905 rli_size_unit_so_far (record_layout_info rli)
906 {
907 return byte_from_pos (rli->offset, rli->bitpos);
908 }
909
910 /* Returns the size in bits allocated so far. */
911
912 tree
913 rli_size_so_far (record_layout_info rli)
914 {
915 return bit_from_pos (rli->offset, rli->bitpos);
916 }
917
918 /* FIELD is about to be added to RLI->T. The alignment (in bits) of
919 the next available location within the record is given by KNOWN_ALIGN.
920 Update the variable alignment fields in RLI, and return the alignment
921 to give the FIELD. */
922
923 unsigned int
924 update_alignment_for_field (record_layout_info rli, tree field,
925 unsigned int known_align)
926 {
927 /* The alignment required for FIELD. */
928 unsigned int desired_align;
929 /* The type of this field. */
930 tree type = TREE_TYPE (field);
931 /* True if the field was explicitly aligned by the user. */
932 bool user_align;
933 bool is_bitfield;
934
935 /* Do not attempt to align an ERROR_MARK node */
936 if (TREE_CODE (type) == ERROR_MARK)
937 return 0;
938
939 /* Lay out the field so we know what alignment it needs. */
940 layout_decl (field, known_align);
941 desired_align = DECL_ALIGN (field);
942 user_align = DECL_USER_ALIGN (field);
943
944 is_bitfield = (type != error_mark_node
945 && DECL_BIT_FIELD_TYPE (field)
946 && ! integer_zerop (TYPE_SIZE (type)));
947
948 /* Record must have at least as much alignment as any field.
949 Otherwise, the alignment of the field within the record is
950 meaningless. */
951 if (targetm.ms_bitfield_layout_p (rli->t))
952 {
953 /* Here, the alignment of the underlying type of a bitfield can
954 affect the alignment of a record; even a zero-sized field
955 can do this. The alignment should be to the alignment of
956 the type, except that for zero-size bitfields this only
957 applies if there was an immediately prior, nonzero-size
958 bitfield. (That's the way it is, experimentally.) */
959 if ((!is_bitfield && !DECL_PACKED (field))
960 || ((DECL_SIZE (field) == NULL_TREE
961 || !integer_zerop (DECL_SIZE (field)))
962 ? !DECL_PACKED (field)
963 : (rli->prev_field
964 && DECL_BIT_FIELD_TYPE (rli->prev_field)
965 && ! integer_zerop (DECL_SIZE (rli->prev_field)))))
966 {
967 unsigned int type_align = TYPE_ALIGN (type);
968 type_align = MAX (type_align, desired_align);
969 if (maximum_field_alignment != 0)
970 type_align = MIN (type_align, maximum_field_alignment);
971 rli->record_align = MAX (rli->record_align, type_align);
972 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
973 }
974 }
975 #ifdef PCC_BITFIELD_TYPE_MATTERS
976 else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
977 {
978 /* Named bit-fields cause the entire structure to have the
979 alignment implied by their type. Some targets also apply the same
980 rules to unnamed bitfields. */
981 if (DECL_NAME (field) != 0
982 || targetm.align_anon_bitfield ())
983 {
984 unsigned int type_align = TYPE_ALIGN (type);
985
986 #ifdef ADJUST_FIELD_ALIGN
987 if (! TYPE_USER_ALIGN (type))
988 type_align = ADJUST_FIELD_ALIGN (field, type_align);
989 #endif
990
991 /* Targets might chose to handle unnamed and hence possibly
992 zero-width bitfield. Those are not influenced by #pragmas
993 or packed attributes. */
994 if (integer_zerop (DECL_SIZE (field)))
995 {
996 if (initial_max_fld_align)
997 type_align = MIN (type_align,
998 initial_max_fld_align * BITS_PER_UNIT);
999 }
1000 else if (maximum_field_alignment != 0)
1001 type_align = MIN (type_align, maximum_field_alignment);
1002 else if (DECL_PACKED (field))
1003 type_align = MIN (type_align, BITS_PER_UNIT);
1004
1005 /* The alignment of the record is increased to the maximum
1006 of the current alignment, the alignment indicated on the
1007 field (i.e., the alignment specified by an __aligned__
1008 attribute), and the alignment indicated by the type of
1009 the field. */
1010 rli->record_align = MAX (rli->record_align, desired_align);
1011 rli->record_align = MAX (rli->record_align, type_align);
1012
1013 if (warn_packed)
1014 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
1015 user_align |= TYPE_USER_ALIGN (type);
1016 }
1017 }
1018 #endif
1019 else
1020 {
1021 rli->record_align = MAX (rli->record_align, desired_align);
1022 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
1023 }
1024
1025 TYPE_USER_ALIGN (rli->t) |= user_align;
1026
1027 return desired_align;
1028 }
1029
1030 /* Called from place_field to handle unions. */
1031
1032 static void
1033 place_union_field (record_layout_info rli, tree field)
1034 {
1035 update_alignment_for_field (rli, field, /*known_align=*/0);
1036
1037 DECL_FIELD_OFFSET (field) = size_zero_node;
1038 DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
1039 SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
1040
1041 /* If this is an ERROR_MARK return *after* having set the
1042 field at the start of the union. This helps when parsing
1043 invalid fields. */
1044 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK)
1045 return;
1046
1047 /* We assume the union's size will be a multiple of a byte so we don't
1048 bother with BITPOS. */
1049 if (TREE_CODE (rli->t) == UNION_TYPE)
1050 rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1051 else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
1052 rli->offset = fold_build3 (COND_EXPR, sizetype, DECL_QUALIFIER (field),
1053 DECL_SIZE_UNIT (field), rli->offset);
1054 }
1055
1056 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
1057 /* A bitfield of SIZE with a required access alignment of ALIGN is allocated
1058 at BYTE_OFFSET / BIT_OFFSET. Return nonzero if the field would span more
1059 units of alignment than the underlying TYPE. */
1060 static int
1061 excess_unit_span (HOST_WIDE_INT byte_offset, HOST_WIDE_INT bit_offset,
1062 HOST_WIDE_INT size, HOST_WIDE_INT align, tree type)
1063 {
1064 /* Note that the calculation of OFFSET might overflow; we calculate it so
1065 that we still get the right result as long as ALIGN is a power of two. */
1066 unsigned HOST_WIDE_INT offset = byte_offset * BITS_PER_UNIT + bit_offset;
1067
1068 offset = offset % align;
1069 return ((offset + size + align - 1) / align
1070 > ((unsigned HOST_WIDE_INT) tree_low_cst (TYPE_SIZE (type), 1)
1071 / align));
1072 }
1073 #endif
1074
1075 /* RLI contains information about the layout of a RECORD_TYPE. FIELD
1076 is a FIELD_DECL to be added after those fields already present in
1077 T. (FIELD is not actually added to the TYPE_FIELDS list here;
1078 callers that desire that behavior must manually perform that step.) */
1079
1080 void
1081 place_field (record_layout_info rli, tree field)
1082 {
1083 /* The alignment required for FIELD. */
1084 unsigned int desired_align;
1085 /* The alignment FIELD would have if we just dropped it into the
1086 record as it presently stands. */
1087 unsigned int known_align;
1088 unsigned int actual_align;
1089 /* The type of this field. */
1090 tree type = TREE_TYPE (field);
1091
1092 gcc_assert (TREE_CODE (field) != ERROR_MARK);
1093
1094 /* If FIELD is static, then treat it like a separate variable, not
1095 really like a structure field. If it is a FUNCTION_DECL, it's a
1096 method. In both cases, all we do is lay out the decl, and we do
1097 it *after* the record is laid out. */
1098 if (TREE_CODE (field) == VAR_DECL)
1099 {
1100 vec_safe_push (rli->pending_statics, field);
1101 return;
1102 }
1103
1104 /* Enumerators and enum types which are local to this class need not
1105 be laid out. Likewise for initialized constant fields. */
1106 else if (TREE_CODE (field) != FIELD_DECL)
1107 return;
1108
1109 /* Unions are laid out very differently than records, so split
1110 that code off to another function. */
1111 else if (TREE_CODE (rli->t) != RECORD_TYPE)
1112 {
1113 place_union_field (rli, field);
1114 return;
1115 }
1116
1117 else if (TREE_CODE (type) == ERROR_MARK)
1118 {
1119 /* Place this field at the current allocation position, so we
1120 maintain monotonicity. */
1121 DECL_FIELD_OFFSET (field) = rli->offset;
1122 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1123 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1124 return;
1125 }
1126
1127 /* Work out the known alignment so far. Note that A & (-A) is the
1128 value of the least-significant bit in A that is one. */
1129 if (! integer_zerop (rli->bitpos))
1130 known_align = (tree_low_cst (rli->bitpos, 1)
1131 & - tree_low_cst (rli->bitpos, 1));
1132 else if (integer_zerop (rli->offset))
1133 known_align = 0;
1134 else if (host_integerp (rli->offset, 1))
1135 known_align = (BITS_PER_UNIT
1136 * (tree_low_cst (rli->offset, 1)
1137 & - tree_low_cst (rli->offset, 1)));
1138 else
1139 known_align = rli->offset_align;
1140
1141 desired_align = update_alignment_for_field (rli, field, known_align);
1142 if (known_align == 0)
1143 known_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
1144
1145 if (warn_packed && DECL_PACKED (field))
1146 {
1147 if (known_align >= TYPE_ALIGN (type))
1148 {
1149 if (TYPE_ALIGN (type) > desired_align)
1150 {
1151 if (STRICT_ALIGNMENT)
1152 warning (OPT_Wattributes, "packed attribute causes "
1153 "inefficient alignment for %q+D", field);
1154 /* Don't warn if DECL_PACKED was set by the type. */
1155 else if (!TYPE_PACKED (rli->t))
1156 warning (OPT_Wattributes, "packed attribute is "
1157 "unnecessary for %q+D", field);
1158 }
1159 }
1160 else
1161 rli->packed_maybe_necessary = 1;
1162 }
1163
1164 /* Does this field automatically have alignment it needs by virtue
1165 of the fields that precede it and the record's own alignment? */
1166 if (known_align < desired_align)
1167 {
1168 /* No, we need to skip space before this field.
1169 Bump the cumulative size to multiple of field alignment. */
1170
1171 if (!targetm.ms_bitfield_layout_p (rli->t)
1172 && DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION)
1173 warning (OPT_Wpadded, "padding struct to align %q+D", field);
1174
1175 /* If the alignment is still within offset_align, just align
1176 the bit position. */
1177 if (desired_align < rli->offset_align)
1178 rli->bitpos = round_up (rli->bitpos, desired_align);
1179 else
1180 {
1181 /* First adjust OFFSET by the partial bits, then align. */
1182 rli->offset
1183 = size_binop (PLUS_EXPR, rli->offset,
1184 fold_convert (sizetype,
1185 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1186 bitsize_unit_node)));
1187 rli->bitpos = bitsize_zero_node;
1188
1189 rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
1190 }
1191
1192 if (! TREE_CONSTANT (rli->offset))
1193 rli->offset_align = desired_align;
1194 if (targetm.ms_bitfield_layout_p (rli->t))
1195 rli->prev_field = NULL;
1196 }
1197
1198 /* Handle compatibility with PCC. Note that if the record has any
1199 variable-sized fields, we need not worry about compatibility. */
1200 #ifdef PCC_BITFIELD_TYPE_MATTERS
1201 if (PCC_BITFIELD_TYPE_MATTERS
1202 && ! targetm.ms_bitfield_layout_p (rli->t)
1203 && TREE_CODE (field) == FIELD_DECL
1204 && type != error_mark_node
1205 && DECL_BIT_FIELD (field)
1206 && (! DECL_PACKED (field)
1207 /* Enter for these packed fields only to issue a warning. */
1208 || TYPE_ALIGN (type) <= BITS_PER_UNIT)
1209 && maximum_field_alignment == 0
1210 && ! integer_zerop (DECL_SIZE (field))
1211 && host_integerp (DECL_SIZE (field), 1)
1212 && host_integerp (rli->offset, 1)
1213 && host_integerp (TYPE_SIZE (type), 1))
1214 {
1215 unsigned int type_align = TYPE_ALIGN (type);
1216 tree dsize = DECL_SIZE (field);
1217 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
1218 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
1219 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
1220
1221 #ifdef ADJUST_FIELD_ALIGN
1222 if (! TYPE_USER_ALIGN (type))
1223 type_align = ADJUST_FIELD_ALIGN (field, type_align);
1224 #endif
1225
1226 /* A bit field may not span more units of alignment of its type
1227 than its type itself. Advance to next boundary if necessary. */
1228 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
1229 {
1230 if (DECL_PACKED (field))
1231 {
1232 if (warn_packed_bitfield_compat == 1)
1233 inform
1234 (input_location,
1235 "offset of packed bit-field %qD has changed in GCC 4.4",
1236 field);
1237 }
1238 else
1239 rli->bitpos = round_up (rli->bitpos, type_align);
1240 }
1241
1242 if (! DECL_PACKED (field))
1243 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
1244 }
1245 #endif
1246
1247 #ifdef BITFIELD_NBYTES_LIMITED
1248 if (BITFIELD_NBYTES_LIMITED
1249 && ! targetm.ms_bitfield_layout_p (rli->t)
1250 && TREE_CODE (field) == FIELD_DECL
1251 && type != error_mark_node
1252 && DECL_BIT_FIELD_TYPE (field)
1253 && ! DECL_PACKED (field)
1254 && ! integer_zerop (DECL_SIZE (field))
1255 && host_integerp (DECL_SIZE (field), 1)
1256 && host_integerp (rli->offset, 1)
1257 && host_integerp (TYPE_SIZE (type), 1))
1258 {
1259 unsigned int type_align = TYPE_ALIGN (type);
1260 tree dsize = DECL_SIZE (field);
1261 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
1262 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
1263 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
1264
1265 #ifdef ADJUST_FIELD_ALIGN
1266 if (! TYPE_USER_ALIGN (type))
1267 type_align = ADJUST_FIELD_ALIGN (field, type_align);
1268 #endif
1269
1270 if (maximum_field_alignment != 0)
1271 type_align = MIN (type_align, maximum_field_alignment);
1272 /* ??? This test is opposite the test in the containing if
1273 statement, so this code is unreachable currently. */
1274 else if (DECL_PACKED (field))
1275 type_align = MIN (type_align, BITS_PER_UNIT);
1276
1277 /* A bit field may not span the unit of alignment of its type.
1278 Advance to next boundary if necessary. */
1279 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
1280 rli->bitpos = round_up (rli->bitpos, type_align);
1281
1282 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
1283 }
1284 #endif
1285
1286 /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.
1287 A subtlety:
1288 When a bit field is inserted into a packed record, the whole
1289 size of the underlying type is used by one or more same-size
1290 adjacent bitfields. (That is, if its long:3, 32 bits is
1291 used in the record, and any additional adjacent long bitfields are
1292 packed into the same chunk of 32 bits. However, if the size
1293 changes, a new field of that size is allocated.) In an unpacked
1294 record, this is the same as using alignment, but not equivalent
1295 when packing.
1296
1297 Note: for compatibility, we use the type size, not the type alignment
1298 to determine alignment, since that matches the documentation */
1299
1300 if (targetm.ms_bitfield_layout_p (rli->t))
1301 {
1302 tree prev_saved = rli->prev_field;
1303 tree prev_type = prev_saved ? DECL_BIT_FIELD_TYPE (prev_saved) : NULL;
1304
1305 /* This is a bitfield if it exists. */
1306 if (rli->prev_field)
1307 {
1308 /* If both are bitfields, nonzero, and the same size, this is
1309 the middle of a run. Zero declared size fields are special
1310 and handled as "end of run". (Note: it's nonzero declared
1311 size, but equal type sizes!) (Since we know that both
1312 the current and previous fields are bitfields by the
1313 time we check it, DECL_SIZE must be present for both.) */
1314 if (DECL_BIT_FIELD_TYPE (field)
1315 && !integer_zerop (DECL_SIZE (field))
1316 && !integer_zerop (DECL_SIZE (rli->prev_field))
1317 && host_integerp (DECL_SIZE (rli->prev_field), 0)
1318 && host_integerp (TYPE_SIZE (type), 0)
1319 && simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (prev_type)))
1320 {
1321 /* We're in the middle of a run of equal type size fields; make
1322 sure we realign if we run out of bits. (Not decl size,
1323 type size!) */
1324 HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 1);
1325
1326 if (rli->remaining_in_alignment < bitsize)
1327 {
1328 HOST_WIDE_INT typesize = tree_low_cst (TYPE_SIZE (type), 1);
1329
1330 /* out of bits; bump up to next 'word'. */
1331 rli->bitpos
1332 = size_binop (PLUS_EXPR, rli->bitpos,
1333 bitsize_int (rli->remaining_in_alignment));
1334 rli->prev_field = field;
1335 if (typesize < bitsize)
1336 rli->remaining_in_alignment = 0;
1337 else
1338 rli->remaining_in_alignment = typesize - bitsize;
1339 }
1340 else
1341 rli->remaining_in_alignment -= bitsize;
1342 }
1343 else
1344 {
1345 /* End of a run: if leaving a run of bitfields of the same type
1346 size, we have to "use up" the rest of the bits of the type
1347 size.
1348
1349 Compute the new position as the sum of the size for the prior
1350 type and where we first started working on that type.
1351 Note: since the beginning of the field was aligned then
1352 of course the end will be too. No round needed. */
1353
1354 if (!integer_zerop (DECL_SIZE (rli->prev_field)))
1355 {
1356 rli->bitpos
1357 = size_binop (PLUS_EXPR, rli->bitpos,
1358 bitsize_int (rli->remaining_in_alignment));
1359 }
1360 else
1361 /* We "use up" size zero fields; the code below should behave
1362 as if the prior field was not a bitfield. */
1363 prev_saved = NULL;
1364
1365 /* Cause a new bitfield to be captured, either this time (if
1366 currently a bitfield) or next time we see one. */
1367 if (!DECL_BIT_FIELD_TYPE(field)
1368 || integer_zerop (DECL_SIZE (field)))
1369 rli->prev_field = NULL;
1370 }
1371
1372 normalize_rli (rli);
1373 }
1374
1375 /* If we're starting a new run of same type size bitfields
1376 (or a run of non-bitfields), set up the "first of the run"
1377 fields.
1378
1379 That is, if the current field is not a bitfield, or if there
1380 was a prior bitfield the type sizes differ, or if there wasn't
1381 a prior bitfield the size of the current field is nonzero.
1382
1383 Note: we must be sure to test ONLY the type size if there was
1384 a prior bitfield and ONLY for the current field being zero if
1385 there wasn't. */
1386
1387 if (!DECL_BIT_FIELD_TYPE (field)
1388 || (prev_saved != NULL
1389 ? !simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (prev_type))
1390 : !integer_zerop (DECL_SIZE (field)) ))
1391 {
1392 /* Never smaller than a byte for compatibility. */
1393 unsigned int type_align = BITS_PER_UNIT;
1394
1395 /* (When not a bitfield), we could be seeing a flex array (with
1396 no DECL_SIZE). Since we won't be using remaining_in_alignment
1397 until we see a bitfield (and come by here again) we just skip
1398 calculating it. */
1399 if (DECL_SIZE (field) != NULL
1400 && host_integerp (TYPE_SIZE (TREE_TYPE (field)), 1)
1401 && host_integerp (DECL_SIZE (field), 1))
1402 {
1403 unsigned HOST_WIDE_INT bitsize
1404 = tree_low_cst (DECL_SIZE (field), 1);
1405 unsigned HOST_WIDE_INT typesize
1406 = tree_low_cst (TYPE_SIZE (TREE_TYPE (field)), 1);
1407
1408 if (typesize < bitsize)
1409 rli->remaining_in_alignment = 0;
1410 else
1411 rli->remaining_in_alignment = typesize - bitsize;
1412 }
1413
1414 /* Now align (conventionally) for the new type. */
1415 type_align = TYPE_ALIGN (TREE_TYPE (field));
1416
1417 if (maximum_field_alignment != 0)
1418 type_align = MIN (type_align, maximum_field_alignment);
1419
1420 rli->bitpos = round_up (rli->bitpos, type_align);
1421
1422 /* If we really aligned, don't allow subsequent bitfields
1423 to undo that. */
1424 rli->prev_field = NULL;
1425 }
1426 }
1427
1428 /* Offset so far becomes the position of this field after normalizing. */
1429 normalize_rli (rli);
1430 DECL_FIELD_OFFSET (field) = rli->offset;
1431 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1432 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1433
1434 /* If this field ended up more aligned than we thought it would be (we
1435 approximate this by seeing if its position changed), lay out the field
1436 again; perhaps we can use an integral mode for it now. */
1437 if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
1438 actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1439 & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
1440 else if (integer_zerop (DECL_FIELD_OFFSET (field)))
1441 actual_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
1442 else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
1443 actual_align = (BITS_PER_UNIT
1444 * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1445 & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
1446 else
1447 actual_align = DECL_OFFSET_ALIGN (field);
1448 /* ACTUAL_ALIGN is still the actual alignment *within the record* .
1449 store / extract bit field operations will check the alignment of the
1450 record against the mode of bit fields. */
1451
1452 if (known_align != actual_align)
1453 layout_decl (field, actual_align);
1454
1455 if (rli->prev_field == NULL && DECL_BIT_FIELD_TYPE (field))
1456 rli->prev_field = field;
1457
1458 /* Now add size of this field to the size of the record. If the size is
1459 not constant, treat the field as being a multiple of bytes and just
1460 adjust the offset, resetting the bit position. Otherwise, apportion the
1461 size amongst the bit position and offset. First handle the case of an
1462 unspecified size, which can happen when we have an invalid nested struct
1463 definition, such as struct j { struct j { int i; } }. The error message
1464 is printed in finish_struct. */
1465 if (DECL_SIZE (field) == 0)
1466 /* Do nothing. */;
1467 else if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST
1468 || TREE_OVERFLOW (DECL_SIZE (field)))
1469 {
1470 rli->offset
1471 = size_binop (PLUS_EXPR, rli->offset,
1472 fold_convert (sizetype,
1473 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1474 bitsize_unit_node)));
1475 rli->offset
1476 = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1477 rli->bitpos = bitsize_zero_node;
1478 rli->offset_align = MIN (rli->offset_align, desired_align);
1479 }
1480 else if (targetm.ms_bitfield_layout_p (rli->t))
1481 {
1482 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1483
1484 /* If we ended a bitfield before the full length of the type then
1485 pad the struct out to the full length of the last type. */
1486 if ((DECL_CHAIN (field) == NULL
1487 || TREE_CODE (DECL_CHAIN (field)) != FIELD_DECL)
1488 && DECL_BIT_FIELD_TYPE (field)
1489 && !integer_zerop (DECL_SIZE (field)))
1490 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos,
1491 bitsize_int (rli->remaining_in_alignment));
1492
1493 normalize_rli (rli);
1494 }
1495 else
1496 {
1497 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1498 normalize_rli (rli);
1499 }
1500 }
1501
1502 /* Assuming that all the fields have been laid out, this function uses
1503 RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1504 indicated by RLI. */
1505
1506 static void
1507 finalize_record_size (record_layout_info rli)
1508 {
1509 tree unpadded_size, unpadded_size_unit;
1510
1511 /* Now we want just byte and bit offsets, so set the offset alignment
1512 to be a byte and then normalize. */
1513 rli->offset_align = BITS_PER_UNIT;
1514 normalize_rli (rli);
1515
1516 /* Determine the desired alignment. */
1517 #ifdef ROUND_TYPE_ALIGN
1518 TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
1519 rli->record_align);
1520 #else
1521 TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
1522 #endif
1523
1524 /* Compute the size so far. Be sure to allow for extra bits in the
1525 size in bytes. We have guaranteed above that it will be no more
1526 than a single byte. */
1527 unpadded_size = rli_size_so_far (rli);
1528 unpadded_size_unit = rli_size_unit_so_far (rli);
1529 if (! integer_zerop (rli->bitpos))
1530 unpadded_size_unit
1531 = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
1532
1533 /* Round the size up to be a multiple of the required alignment. */
1534 TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
1535 TYPE_SIZE_UNIT (rli->t)
1536 = round_up (unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
1537
1538 if (TREE_CONSTANT (unpadded_size)
1539 && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0
1540 && input_location != BUILTINS_LOCATION)
1541 warning (OPT_Wpadded, "padding struct size to alignment boundary");
1542
1543 if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1544 && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1545 && TREE_CONSTANT (unpadded_size))
1546 {
1547 tree unpacked_size;
1548
1549 #ifdef ROUND_TYPE_ALIGN
1550 rli->unpacked_align
1551 = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
1552 #else
1553 rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
1554 #endif
1555
1556 unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
1557 if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
1558 {
1559 if (TYPE_NAME (rli->t))
1560 {
1561 tree name;
1562
1563 if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1564 name = TYPE_NAME (rli->t);
1565 else
1566 name = DECL_NAME (TYPE_NAME (rli->t));
1567
1568 if (STRICT_ALIGNMENT)
1569 warning (OPT_Wpacked, "packed attribute causes inefficient "
1570 "alignment for %qE", name);
1571 else
1572 warning (OPT_Wpacked,
1573 "packed attribute is unnecessary for %qE", name);
1574 }
1575 else
1576 {
1577 if (STRICT_ALIGNMENT)
1578 warning (OPT_Wpacked,
1579 "packed attribute causes inefficient alignment");
1580 else
1581 warning (OPT_Wpacked, "packed attribute is unnecessary");
1582 }
1583 }
1584 }
1585 }
1586
1587 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE). */
1588
1589 void
1590 compute_record_mode (tree type)
1591 {
1592 tree field;
1593 enum machine_mode mode = VOIDmode;
1594
1595 /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1596 However, if possible, we use a mode that fits in a register
1597 instead, in order to allow for better optimization down the
1598 line. */
1599 SET_TYPE_MODE (type, BLKmode);
1600
1601 if (! host_integerp (TYPE_SIZE (type), 1))
1602 return;
1603
1604 /* A record which has any BLKmode members must itself be
1605 BLKmode; it can't go in a register. Unless the member is
1606 BLKmode only because it isn't aligned. */
1607 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1608 {
1609 if (TREE_CODE (field) != FIELD_DECL)
1610 continue;
1611
1612 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1613 || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1614 && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field))
1615 && !(TYPE_SIZE (TREE_TYPE (field)) != 0
1616 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))))
1617 || ! host_integerp (bit_position (field), 1)
1618 || DECL_SIZE (field) == 0
1619 || ! host_integerp (DECL_SIZE (field), 1))
1620 return;
1621
1622 /* If this field is the whole struct, remember its mode so
1623 that, say, we can put a double in a class into a DF
1624 register instead of forcing it to live in the stack. */
1625 if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1626 mode = DECL_MODE (field);
1627
1628 /* With some targets, it is sub-optimal to access an aligned
1629 BLKmode structure as a scalar. */
1630 if (targetm.member_type_forces_blk (field, mode))
1631 return;
1632 }
1633
1634 /* If we only have one real field; use its mode if that mode's size
1635 matches the type's size. This only applies to RECORD_TYPE. This
1636 does not apply to unions. */
1637 if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode
1638 && host_integerp (TYPE_SIZE (type), 1)
1639 && GET_MODE_BITSIZE (mode) == TREE_INT_CST_LOW (TYPE_SIZE (type)))
1640 SET_TYPE_MODE (type, mode);
1641 else
1642 SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1));
1643
1644 /* If structure's known alignment is less than what the scalar
1645 mode would need, and it matters, then stick with BLKmode. */
1646 if (TYPE_MODE (type) != BLKmode
1647 && STRICT_ALIGNMENT
1648 && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1649 || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1650 {
1651 /* If this is the only reason this type is BLKmode, then
1652 don't force containing types to be BLKmode. */
1653 TYPE_NO_FORCE_BLK (type) = 1;
1654 SET_TYPE_MODE (type, BLKmode);
1655 }
1656 }
1657
1658 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1659 out. */
1660
1661 static void
1662 finalize_type_size (tree type)
1663 {
1664 /* Normally, use the alignment corresponding to the mode chosen.
1665 However, where strict alignment is not required, avoid
1666 over-aligning structures, since most compilers do not do this
1667 alignment. */
1668
1669 if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1670 && (STRICT_ALIGNMENT
1671 || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1672 && TREE_CODE (type) != QUAL_UNION_TYPE
1673 && TREE_CODE (type) != ARRAY_TYPE)))
1674 {
1675 unsigned mode_align = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1676
1677 /* Don't override a larger alignment requirement coming from a user
1678 alignment of one of the fields. */
1679 if (mode_align >= TYPE_ALIGN (type))
1680 {
1681 TYPE_ALIGN (type) = mode_align;
1682 TYPE_USER_ALIGN (type) = 0;
1683 }
1684 }
1685
1686 /* Do machine-dependent extra alignment. */
1687 #ifdef ROUND_TYPE_ALIGN
1688 TYPE_ALIGN (type)
1689 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1690 #endif
1691
1692 /* If we failed to find a simple way to calculate the unit size
1693 of the type, find it by division. */
1694 if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1695 /* TYPE_SIZE (type) is computed in bitsizetype. After the division, the
1696 result will fit in sizetype. We will get more efficient code using
1697 sizetype, so we force a conversion. */
1698 TYPE_SIZE_UNIT (type)
1699 = fold_convert (sizetype,
1700 size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1701 bitsize_unit_node));
1702
1703 if (TYPE_SIZE (type) != 0)
1704 {
1705 TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1706 TYPE_SIZE_UNIT (type)
1707 = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN_UNIT (type));
1708 }
1709
1710 /* Evaluate nonconstant sizes only once, either now or as soon as safe. */
1711 if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1712 TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1713 if (TYPE_SIZE_UNIT (type) != 0
1714 && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1715 TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1716
1717 /* Also layout any other variants of the type. */
1718 if (TYPE_NEXT_VARIANT (type)
1719 || type != TYPE_MAIN_VARIANT (type))
1720 {
1721 tree variant;
1722 /* Record layout info of this variant. */
1723 tree size = TYPE_SIZE (type);
1724 tree size_unit = TYPE_SIZE_UNIT (type);
1725 unsigned int align = TYPE_ALIGN (type);
1726 unsigned int user_align = TYPE_USER_ALIGN (type);
1727 enum machine_mode mode = TYPE_MODE (type);
1728
1729 /* Copy it into all variants. */
1730 for (variant = TYPE_MAIN_VARIANT (type);
1731 variant != 0;
1732 variant = TYPE_NEXT_VARIANT (variant))
1733 {
1734 TYPE_SIZE (variant) = size;
1735 TYPE_SIZE_UNIT (variant) = size_unit;
1736 TYPE_ALIGN (variant) = align;
1737 TYPE_USER_ALIGN (variant) = user_align;
1738 SET_TYPE_MODE (variant, mode);
1739 }
1740 }
1741 }
1742
1743 /* Return a new underlying object for a bitfield started with FIELD. */
1744
1745 static tree
1746 start_bitfield_representative (tree field)
1747 {
1748 tree repr = make_node (FIELD_DECL);
1749 DECL_FIELD_OFFSET (repr) = DECL_FIELD_OFFSET (field);
1750 /* Force the representative to begin at a BITS_PER_UNIT aligned
1751 boundary - C++ may use tail-padding of a base object to
1752 continue packing bits so the bitfield region does not start
1753 at bit zero (see g++.dg/abi/bitfield5.C for example).
1754 Unallocated bits may happen for other reasons as well,
1755 for example Ada which allows explicit bit-granular structure layout. */
1756 DECL_FIELD_BIT_OFFSET (repr)
1757 = size_binop (BIT_AND_EXPR,
1758 DECL_FIELD_BIT_OFFSET (field),
1759 bitsize_int (~(BITS_PER_UNIT - 1)));
1760 SET_DECL_OFFSET_ALIGN (repr, DECL_OFFSET_ALIGN (field));
1761 DECL_SIZE (repr) = DECL_SIZE (field);
1762 DECL_SIZE_UNIT (repr) = DECL_SIZE_UNIT (field);
1763 DECL_PACKED (repr) = DECL_PACKED (field);
1764 DECL_CONTEXT (repr) = DECL_CONTEXT (field);
1765 return repr;
1766 }
1767
1768 /* Finish up a bitfield group that was started by creating the underlying
1769 object REPR with the last field in the bitfield group FIELD. */
1770
1771 static void
1772 finish_bitfield_representative (tree repr, tree field)
1773 {
1774 unsigned HOST_WIDE_INT bitsize, maxbitsize;
1775 enum machine_mode mode;
1776 tree nextf, size;
1777
1778 size = size_diffop (DECL_FIELD_OFFSET (field),
1779 DECL_FIELD_OFFSET (repr));
1780 gcc_assert (host_integerp (size, 1));
1781 bitsize = (tree_low_cst (size, 1) * BITS_PER_UNIT
1782 + tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1783 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1)
1784 + tree_low_cst (DECL_SIZE (field), 1));
1785
1786 /* Round up bitsize to multiples of BITS_PER_UNIT. */
1787 bitsize = (bitsize + BITS_PER_UNIT - 1) & ~(BITS_PER_UNIT - 1);
1788
1789 /* Now nothing tells us how to pad out bitsize ... */
1790 nextf = DECL_CHAIN (field);
1791 while (nextf && TREE_CODE (nextf) != FIELD_DECL)
1792 nextf = DECL_CHAIN (nextf);
1793 if (nextf)
1794 {
1795 tree maxsize;
1796 /* If there was an error, the field may be not laid out
1797 correctly. Don't bother to do anything. */
1798 if (TREE_TYPE (nextf) == error_mark_node)
1799 return;
1800 maxsize = size_diffop (DECL_FIELD_OFFSET (nextf),
1801 DECL_FIELD_OFFSET (repr));
1802 if (host_integerp (maxsize, 1))
1803 {
1804 maxbitsize = (tree_low_cst (maxsize, 1) * BITS_PER_UNIT
1805 + tree_low_cst (DECL_FIELD_BIT_OFFSET (nextf), 1)
1806 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
1807 /* If the group ends within a bitfield nextf does not need to be
1808 aligned to BITS_PER_UNIT. Thus round up. */
1809 maxbitsize = (maxbitsize + BITS_PER_UNIT - 1) & ~(BITS_PER_UNIT - 1);
1810 }
1811 else
1812 maxbitsize = bitsize;
1813 }
1814 else
1815 {
1816 /* ??? If you consider that tail-padding of this struct might be
1817 re-used when deriving from it we cannot really do the following
1818 and thus need to set maxsize to bitsize? Also we cannot
1819 generally rely on maxsize to fold to an integer constant, so
1820 use bitsize as fallback for this case. */
1821 tree maxsize = size_diffop (TYPE_SIZE_UNIT (DECL_CONTEXT (field)),
1822 DECL_FIELD_OFFSET (repr));
1823 if (host_integerp (maxsize, 1))
1824 maxbitsize = (tree_low_cst (maxsize, 1) * BITS_PER_UNIT
1825 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
1826 else
1827 maxbitsize = bitsize;
1828 }
1829
1830 /* Only if we don't artificially break up the representative in
1831 the middle of a large bitfield with different possibly
1832 overlapping representatives. And all representatives start
1833 at byte offset. */
1834 gcc_assert (maxbitsize % BITS_PER_UNIT == 0);
1835
1836 /* Find the smallest nice mode to use. */
1837 for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
1838 mode = GET_MODE_WIDER_MODE (mode))
1839 if (GET_MODE_BITSIZE (mode) >= bitsize)
1840 break;
1841 if (mode != VOIDmode
1842 && (GET_MODE_BITSIZE (mode) > maxbitsize
1843 || GET_MODE_BITSIZE (mode) > MAX_FIXED_MODE_SIZE))
1844 mode = VOIDmode;
1845
1846 if (mode == VOIDmode)
1847 {
1848 /* We really want a BLKmode representative only as a last resort,
1849 considering the member b in
1850 struct { int a : 7; int b : 17; int c; } __attribute__((packed));
1851 Otherwise we simply want to split the representative up
1852 allowing for overlaps within the bitfield region as required for
1853 struct { int a : 7; int b : 7;
1854 int c : 10; int d; } __attribute__((packed));
1855 [0, 15] HImode for a and b, [8, 23] HImode for c. */
1856 DECL_SIZE (repr) = bitsize_int (bitsize);
1857 DECL_SIZE_UNIT (repr) = size_int (bitsize / BITS_PER_UNIT);
1858 DECL_MODE (repr) = BLKmode;
1859 TREE_TYPE (repr) = build_array_type_nelts (unsigned_char_type_node,
1860 bitsize / BITS_PER_UNIT);
1861 }
1862 else
1863 {
1864 unsigned HOST_WIDE_INT modesize = GET_MODE_BITSIZE (mode);
1865 DECL_SIZE (repr) = bitsize_int (modesize);
1866 DECL_SIZE_UNIT (repr) = size_int (modesize / BITS_PER_UNIT);
1867 DECL_MODE (repr) = mode;
1868 TREE_TYPE (repr) = lang_hooks.types.type_for_mode (mode, 1);
1869 }
1870
1871 /* Remember whether the bitfield group is at the end of the
1872 structure or not. */
1873 DECL_CHAIN (repr) = nextf;
1874 }
1875
1876 /* Compute and set FIELD_DECLs for the underlying objects we should
1877 use for bitfield access for the structure laid out with RLI. */
1878
1879 static void
1880 finish_bitfield_layout (record_layout_info rli)
1881 {
1882 tree field, prev;
1883 tree repr = NULL_TREE;
1884
1885 /* Unions would be special, for the ease of type-punning optimizations
1886 we could use the underlying type as hint for the representative
1887 if the bitfield would fit and the representative would not exceed
1888 the union in size. */
1889 if (TREE_CODE (rli->t) != RECORD_TYPE)
1890 return;
1891
1892 for (prev = NULL_TREE, field = TYPE_FIELDS (rli->t);
1893 field; field = DECL_CHAIN (field))
1894 {
1895 if (TREE_CODE (field) != FIELD_DECL)
1896 continue;
1897
1898 /* In the C++ memory model, consecutive bit fields in a structure are
1899 considered one memory location and updating a memory location
1900 may not store into adjacent memory locations. */
1901 if (!repr
1902 && DECL_BIT_FIELD_TYPE (field))
1903 {
1904 /* Start new representative. */
1905 repr = start_bitfield_representative (field);
1906 }
1907 else if (repr
1908 && ! DECL_BIT_FIELD_TYPE (field))
1909 {
1910 /* Finish off new representative. */
1911 finish_bitfield_representative (repr, prev);
1912 repr = NULL_TREE;
1913 }
1914 else if (DECL_BIT_FIELD_TYPE (field))
1915 {
1916 gcc_assert (repr != NULL_TREE);
1917
1918 /* Zero-size bitfields finish off a representative and
1919 do not have a representative themselves. This is
1920 required by the C++ memory model. */
1921 if (integer_zerop (DECL_SIZE (field)))
1922 {
1923 finish_bitfield_representative (repr, prev);
1924 repr = NULL_TREE;
1925 }
1926
1927 /* We assume that either DECL_FIELD_OFFSET of the representative
1928 and each bitfield member is a constant or they are equal.
1929 This is because we need to be able to compute the bit-offset
1930 of each field relative to the representative in get_bit_range
1931 during RTL expansion.
1932 If these constraints are not met, simply force a new
1933 representative to be generated. That will at most
1934 generate worse code but still maintain correctness with
1935 respect to the C++ memory model. */
1936 else if (!((host_integerp (DECL_FIELD_OFFSET (repr), 1)
1937 && host_integerp (DECL_FIELD_OFFSET (field), 1))
1938 || operand_equal_p (DECL_FIELD_OFFSET (repr),
1939 DECL_FIELD_OFFSET (field), 0)))
1940 {
1941 finish_bitfield_representative (repr, prev);
1942 repr = start_bitfield_representative (field);
1943 }
1944 }
1945 else
1946 continue;
1947
1948 if (repr)
1949 DECL_BIT_FIELD_REPRESENTATIVE (field) = repr;
1950
1951 prev = field;
1952 }
1953
1954 if (repr)
1955 finish_bitfield_representative (repr, prev);
1956 }
1957
1958 /* Do all of the work required to layout the type indicated by RLI,
1959 once the fields have been laid out. This function will call `free'
1960 for RLI, unless FREE_P is false. Passing a value other than false
1961 for FREE_P is bad practice; this option only exists to support the
1962 G++ 3.2 ABI. */
1963
1964 void
1965 finish_record_layout (record_layout_info rli, int free_p)
1966 {
1967 tree variant;
1968
1969 /* Compute the final size. */
1970 finalize_record_size (rli);
1971
1972 /* Compute the TYPE_MODE for the record. */
1973 compute_record_mode (rli->t);
1974
1975 /* Perform any last tweaks to the TYPE_SIZE, etc. */
1976 finalize_type_size (rli->t);
1977
1978 /* Compute bitfield representatives. */
1979 finish_bitfield_layout (rli);
1980
1981 /* Propagate TYPE_PACKED to variants. With C++ templates,
1982 handle_packed_attribute is too early to do this. */
1983 for (variant = TYPE_NEXT_VARIANT (rli->t); variant;
1984 variant = TYPE_NEXT_VARIANT (variant))
1985 TYPE_PACKED (variant) = TYPE_PACKED (rli->t);
1986
1987 /* Lay out any static members. This is done now because their type
1988 may use the record's type. */
1989 while (!vec_safe_is_empty (rli->pending_statics))
1990 layout_decl (rli->pending_statics->pop (), 0);
1991
1992 /* Clean up. */
1993 if (free_p)
1994 {
1995 vec_free (rli->pending_statics);
1996 free (rli);
1997 }
1998 }
1999 \f
2000
2001 /* Finish processing a builtin RECORD_TYPE type TYPE. It's name is
2002 NAME, its fields are chained in reverse on FIELDS.
2003
2004 If ALIGN_TYPE is non-null, it is given the same alignment as
2005 ALIGN_TYPE. */
2006
2007 void
2008 finish_builtin_struct (tree type, const char *name, tree fields,
2009 tree align_type)
2010 {
2011 tree tail, next;
2012
2013 for (tail = NULL_TREE; fields; tail = fields, fields = next)
2014 {
2015 DECL_FIELD_CONTEXT (fields) = type;
2016 next = DECL_CHAIN (fields);
2017 DECL_CHAIN (fields) = tail;
2018 }
2019 TYPE_FIELDS (type) = tail;
2020
2021 if (align_type)
2022 {
2023 TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
2024 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (align_type);
2025 }
2026
2027 layout_type (type);
2028 #if 0 /* not yet, should get fixed properly later */
2029 TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
2030 #else
2031 TYPE_NAME (type) = build_decl (BUILTINS_LOCATION,
2032 TYPE_DECL, get_identifier (name), type);
2033 #endif
2034 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2035 layout_decl (TYPE_NAME (type), 0);
2036 }
2037
2038 /* Calculate the mode, size, and alignment for TYPE.
2039 For an array type, calculate the element separation as well.
2040 Record TYPE on the chain of permanent or temporary types
2041 so that dbxout will find out about it.
2042
2043 TYPE_SIZE of a type is nonzero if the type has been laid out already.
2044 layout_type does nothing on such a type.
2045
2046 If the type is incomplete, its TYPE_SIZE remains zero. */
2047
2048 void
2049 layout_type (tree type)
2050 {
2051 gcc_assert (type);
2052
2053 if (type == error_mark_node)
2054 return;
2055
2056 /* Do nothing if type has been laid out before. */
2057 if (TYPE_SIZE (type))
2058 return;
2059
2060 switch (TREE_CODE (type))
2061 {
2062 case LANG_TYPE:
2063 /* This kind of type is the responsibility
2064 of the language-specific code. */
2065 gcc_unreachable ();
2066
2067 case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */
2068 if (TYPE_PRECISION (type) == 0)
2069 TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */
2070
2071 /* ... fall through ... */
2072
2073 case INTEGER_TYPE:
2074 case ENUMERAL_TYPE:
2075 if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
2076 && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
2077 TYPE_UNSIGNED (type) = 1;
2078
2079 SET_TYPE_MODE (type,
2080 smallest_mode_for_size (TYPE_PRECISION (type), MODE_INT));
2081 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2082 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2083 break;
2084
2085 case REAL_TYPE:
2086 SET_TYPE_MODE (type,
2087 mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0));
2088 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2089 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2090 break;
2091
2092 case FIXED_POINT_TYPE:
2093 /* TYPE_MODE (type) has been set already. */
2094 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2095 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2096 break;
2097
2098 case COMPLEX_TYPE:
2099 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
2100 SET_TYPE_MODE (type,
2101 mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
2102 (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE
2103 ? MODE_COMPLEX_FLOAT : MODE_COMPLEX_INT),
2104 0));
2105 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2106 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2107 break;
2108
2109 case VECTOR_TYPE:
2110 {
2111 int nunits = TYPE_VECTOR_SUBPARTS (type);
2112 tree innertype = TREE_TYPE (type);
2113
2114 gcc_assert (!(nunits & (nunits - 1)));
2115
2116 /* Find an appropriate mode for the vector type. */
2117 if (TYPE_MODE (type) == VOIDmode)
2118 SET_TYPE_MODE (type,
2119 mode_for_vector (TYPE_MODE (innertype), nunits));
2120
2121 TYPE_SATURATING (type) = TYPE_SATURATING (TREE_TYPE (type));
2122 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
2123 TYPE_SIZE_UNIT (type) = int_const_binop (MULT_EXPR,
2124 TYPE_SIZE_UNIT (innertype),
2125 size_int (nunits));
2126 TYPE_SIZE (type) = int_const_binop (MULT_EXPR, TYPE_SIZE (innertype),
2127 bitsize_int (nunits));
2128
2129 /* For vector types, we do not default to the mode's alignment.
2130 Instead, query a target hook, defaulting to natural alignment.
2131 This prevents ABI changes depending on whether or not native
2132 vector modes are supported. */
2133 TYPE_ALIGN (type) = targetm.vector_alignment (type);
2134
2135 /* However, if the underlying mode requires a bigger alignment than
2136 what the target hook provides, we cannot use the mode. For now,
2137 simply reject that case. */
2138 gcc_assert (TYPE_ALIGN (type)
2139 >= GET_MODE_ALIGNMENT (TYPE_MODE (type)));
2140 break;
2141 }
2142
2143 case VOID_TYPE:
2144 /* This is an incomplete type and so doesn't have a size. */
2145 TYPE_ALIGN (type) = 1;
2146 TYPE_USER_ALIGN (type) = 0;
2147 SET_TYPE_MODE (type, VOIDmode);
2148 break;
2149
2150 case OFFSET_TYPE:
2151 TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
2152 TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
2153 /* A pointer might be MODE_PARTIAL_INT,
2154 but ptrdiff_t must be integral. */
2155 SET_TYPE_MODE (type, mode_for_size (POINTER_SIZE, MODE_INT, 0));
2156 TYPE_PRECISION (type) = POINTER_SIZE;
2157 break;
2158
2159 case FUNCTION_TYPE:
2160 case METHOD_TYPE:
2161 /* It's hard to see what the mode and size of a function ought to
2162 be, but we do know the alignment is FUNCTION_BOUNDARY, so
2163 make it consistent with that. */
2164 SET_TYPE_MODE (type, mode_for_size (FUNCTION_BOUNDARY, MODE_INT, 0));
2165 TYPE_SIZE (type) = bitsize_int (FUNCTION_BOUNDARY);
2166 TYPE_SIZE_UNIT (type) = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2167 break;
2168
2169 case POINTER_TYPE:
2170 case REFERENCE_TYPE:
2171 {
2172 enum machine_mode mode = TYPE_MODE (type);
2173 if (TREE_CODE (type) == REFERENCE_TYPE && reference_types_internal)
2174 {
2175 addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
2176 mode = targetm.addr_space.address_mode (as);
2177 }
2178
2179 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (mode));
2180 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
2181 TYPE_UNSIGNED (type) = 1;
2182 TYPE_PRECISION (type) = GET_MODE_BITSIZE (mode);
2183 }
2184 break;
2185
2186 case ARRAY_TYPE:
2187 {
2188 tree index = TYPE_DOMAIN (type);
2189 tree element = TREE_TYPE (type);
2190
2191 build_pointer_type (element);
2192
2193 /* We need to know both bounds in order to compute the size. */
2194 if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
2195 && TYPE_SIZE (element))
2196 {
2197 tree ub = TYPE_MAX_VALUE (index);
2198 tree lb = TYPE_MIN_VALUE (index);
2199 tree element_size = TYPE_SIZE (element);
2200 tree length;
2201
2202 /* Make sure that an array of zero-sized element is zero-sized
2203 regardless of its extent. */
2204 if (integer_zerop (element_size))
2205 length = size_zero_node;
2206
2207 /* The computation should happen in the original signedness so
2208 that (possible) negative values are handled appropriately
2209 when determining overflow. */
2210 else
2211 {
2212 /* ??? When it is obvious that the range is signed
2213 represent it using ssizetype. */
2214 if (TREE_CODE (lb) == INTEGER_CST
2215 && TREE_CODE (ub) == INTEGER_CST
2216 && TYPE_UNSIGNED (TREE_TYPE (lb))
2217 && tree_int_cst_lt (ub, lb))
2218 {
2219 unsigned prec = TYPE_PRECISION (TREE_TYPE (lb));
2220 lb = double_int_to_tree
2221 (ssizetype,
2222 tree_to_double_int (lb).sext (prec));
2223 ub = double_int_to_tree
2224 (ssizetype,
2225 tree_to_double_int (ub).sext (prec));
2226 }
2227 length
2228 = fold_convert (sizetype,
2229 size_binop (PLUS_EXPR,
2230 build_int_cst (TREE_TYPE (lb), 1),
2231 size_binop (MINUS_EXPR, ub, lb)));
2232 }
2233
2234 /* ??? We have no way to distinguish a null-sized array from an
2235 array spanning the whole sizetype range, so we arbitrarily
2236 decide that [0, -1] is the only valid representation. */
2237 if (integer_zerop (length)
2238 && TREE_OVERFLOW (length)
2239 && integer_zerop (lb))
2240 length = size_zero_node;
2241
2242 TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
2243 fold_convert (bitsizetype,
2244 length));
2245
2246 /* If we know the size of the element, calculate the total size
2247 directly, rather than do some division thing below. This
2248 optimization helps Fortran assumed-size arrays (where the
2249 size of the array is determined at runtime) substantially. */
2250 if (TYPE_SIZE_UNIT (element))
2251 TYPE_SIZE_UNIT (type)
2252 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
2253 }
2254
2255 /* Now round the alignment and size,
2256 using machine-dependent criteria if any. */
2257
2258 #ifdef ROUND_TYPE_ALIGN
2259 TYPE_ALIGN (type)
2260 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
2261 #else
2262 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
2263 #endif
2264 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
2265 SET_TYPE_MODE (type, BLKmode);
2266 if (TYPE_SIZE (type) != 0
2267 && ! targetm.member_type_forces_blk (type, VOIDmode)
2268 /* BLKmode elements force BLKmode aggregate;
2269 else extract/store fields may lose. */
2270 && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
2271 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
2272 {
2273 SET_TYPE_MODE (type, mode_for_array (TREE_TYPE (type),
2274 TYPE_SIZE (type)));
2275 if (TYPE_MODE (type) != BLKmode
2276 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
2277 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
2278 {
2279 TYPE_NO_FORCE_BLK (type) = 1;
2280 SET_TYPE_MODE (type, BLKmode);
2281 }
2282 }
2283 /* When the element size is constant, check that it is at least as
2284 large as the element alignment. */
2285 if (TYPE_SIZE_UNIT (element)
2286 && TREE_CODE (TYPE_SIZE_UNIT (element)) == INTEGER_CST
2287 /* If TYPE_SIZE_UNIT overflowed, then it is certainly larger than
2288 TYPE_ALIGN_UNIT. */
2289 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (element))
2290 && !integer_zerop (TYPE_SIZE_UNIT (element))
2291 && compare_tree_int (TYPE_SIZE_UNIT (element),
2292 TYPE_ALIGN_UNIT (element)) < 0)
2293 error ("alignment of array elements is greater than element size");
2294 break;
2295 }
2296
2297 case RECORD_TYPE:
2298 case UNION_TYPE:
2299 case QUAL_UNION_TYPE:
2300 {
2301 tree field;
2302 record_layout_info rli;
2303
2304 /* Initialize the layout information. */
2305 rli = start_record_layout (type);
2306
2307 /* If this is a QUAL_UNION_TYPE, we want to process the fields
2308 in the reverse order in building the COND_EXPR that denotes
2309 its size. We reverse them again later. */
2310 if (TREE_CODE (type) == QUAL_UNION_TYPE)
2311 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
2312
2313 /* Place all the fields. */
2314 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2315 place_field (rli, field);
2316
2317 if (TREE_CODE (type) == QUAL_UNION_TYPE)
2318 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
2319
2320 /* Finish laying out the record. */
2321 finish_record_layout (rli, /*free_p=*/true);
2322 }
2323 break;
2324
2325 default:
2326 gcc_unreachable ();
2327 }
2328
2329 /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE. For
2330 records and unions, finish_record_layout already called this
2331 function. */
2332 if (TREE_CODE (type) != RECORD_TYPE
2333 && TREE_CODE (type) != UNION_TYPE
2334 && TREE_CODE (type) != QUAL_UNION_TYPE)
2335 finalize_type_size (type);
2336
2337 /* We should never see alias sets on incomplete aggregates. And we
2338 should not call layout_type on not incomplete aggregates. */
2339 if (AGGREGATE_TYPE_P (type))
2340 gcc_assert (!TYPE_ALIAS_SET_KNOWN_P (type));
2341 }
2342
2343 /* Vector types need to re-check the target flags each time we report
2344 the machine mode. We need to do this because attribute target can
2345 change the result of vector_mode_supported_p and have_regs_of_mode
2346 on a per-function basis. Thus the TYPE_MODE of a VECTOR_TYPE can
2347 change on a per-function basis. */
2348 /* ??? Possibly a better solution is to run through all the types
2349 referenced by a function and re-compute the TYPE_MODE once, rather
2350 than make the TYPE_MODE macro call a function. */
2351
2352 enum machine_mode
2353 vector_type_mode (const_tree t)
2354 {
2355 enum machine_mode mode;
2356
2357 gcc_assert (TREE_CODE (t) == VECTOR_TYPE);
2358
2359 mode = t->type_common.mode;
2360 if (VECTOR_MODE_P (mode)
2361 && (!targetm.vector_mode_supported_p (mode)
2362 || !have_regs_of_mode[mode]))
2363 {
2364 enum machine_mode innermode = TREE_TYPE (t)->type_common.mode;
2365
2366 /* For integers, try mapping it to a same-sized scalar mode. */
2367 if (GET_MODE_CLASS (innermode) == MODE_INT)
2368 {
2369 mode = mode_for_size (TYPE_VECTOR_SUBPARTS (t)
2370 * GET_MODE_BITSIZE (innermode), MODE_INT, 0);
2371
2372 if (mode != VOIDmode && have_regs_of_mode[mode])
2373 return mode;
2374 }
2375
2376 return BLKmode;
2377 }
2378
2379 return mode;
2380 }
2381 \f
2382 /* Create and return a type for signed integers of PRECISION bits. */
2383
2384 tree
2385 make_signed_type (int precision)
2386 {
2387 tree type = make_node (INTEGER_TYPE);
2388
2389 TYPE_PRECISION (type) = precision;
2390
2391 fixup_signed_type (type);
2392 return type;
2393 }
2394
2395 /* Create and return a type for unsigned integers of PRECISION bits. */
2396
2397 tree
2398 make_unsigned_type (int precision)
2399 {
2400 tree type = make_node (INTEGER_TYPE);
2401
2402 TYPE_PRECISION (type) = precision;
2403
2404 fixup_unsigned_type (type);
2405 return type;
2406 }
2407 \f
2408 /* Create and return a type for fract of PRECISION bits, UNSIGNEDP,
2409 and SATP. */
2410
2411 tree
2412 make_fract_type (int precision, int unsignedp, int satp)
2413 {
2414 tree type = make_node (FIXED_POINT_TYPE);
2415
2416 TYPE_PRECISION (type) = precision;
2417
2418 if (satp)
2419 TYPE_SATURATING (type) = 1;
2420
2421 /* Lay out the type: set its alignment, size, etc. */
2422 if (unsignedp)
2423 {
2424 TYPE_UNSIGNED (type) = 1;
2425 SET_TYPE_MODE (type, mode_for_size (precision, MODE_UFRACT, 0));
2426 }
2427 else
2428 SET_TYPE_MODE (type, mode_for_size (precision, MODE_FRACT, 0));
2429 layout_type (type);
2430
2431 return type;
2432 }
2433
2434 /* Create and return a type for accum of PRECISION bits, UNSIGNEDP,
2435 and SATP. */
2436
2437 tree
2438 make_accum_type (int precision, int unsignedp, int satp)
2439 {
2440 tree type = make_node (FIXED_POINT_TYPE);
2441
2442 TYPE_PRECISION (type) = precision;
2443
2444 if (satp)
2445 TYPE_SATURATING (type) = 1;
2446
2447 /* Lay out the type: set its alignment, size, etc. */
2448 if (unsignedp)
2449 {
2450 TYPE_UNSIGNED (type) = 1;
2451 SET_TYPE_MODE (type, mode_for_size (precision, MODE_UACCUM, 0));
2452 }
2453 else
2454 SET_TYPE_MODE (type, mode_for_size (precision, MODE_ACCUM, 0));
2455 layout_type (type);
2456
2457 return type;
2458 }
2459
2460 /* Initialize sizetypes so layout_type can use them. */
2461
2462 void
2463 initialize_sizetypes (void)
2464 {
2465 int precision, bprecision;
2466
2467 /* Get sizetypes precision from the SIZE_TYPE target macro. */
2468 if (strcmp (SIZETYPE, "unsigned int") == 0)
2469 precision = INT_TYPE_SIZE;
2470 else if (strcmp (SIZETYPE, "long unsigned int") == 0)
2471 precision = LONG_TYPE_SIZE;
2472 else if (strcmp (SIZETYPE, "long long unsigned int") == 0)
2473 precision = LONG_LONG_TYPE_SIZE;
2474 else if (strcmp (SIZETYPE, "short unsigned int") == 0)
2475 precision = SHORT_TYPE_SIZE;
2476 else
2477 gcc_unreachable ();
2478
2479 bprecision
2480 = MIN (precision + BITS_PER_UNIT_LOG + 1, MAX_FIXED_MODE_SIZE);
2481 bprecision
2482 = GET_MODE_PRECISION (smallest_mode_for_size (bprecision, MODE_INT));
2483 if (bprecision > HOST_BITS_PER_DOUBLE_INT)
2484 bprecision = HOST_BITS_PER_DOUBLE_INT;
2485
2486 /* Create stubs for sizetype and bitsizetype so we can create constants. */
2487 sizetype = make_node (INTEGER_TYPE);
2488 TYPE_NAME (sizetype) = get_identifier ("sizetype");
2489 TYPE_PRECISION (sizetype) = precision;
2490 TYPE_UNSIGNED (sizetype) = 1;
2491 bitsizetype = make_node (INTEGER_TYPE);
2492 TYPE_NAME (bitsizetype) = get_identifier ("bitsizetype");
2493 TYPE_PRECISION (bitsizetype) = bprecision;
2494 TYPE_UNSIGNED (bitsizetype) = 1;
2495
2496 /* Now layout both types manually. */
2497 SET_TYPE_MODE (sizetype, smallest_mode_for_size (precision, MODE_INT));
2498 TYPE_ALIGN (sizetype) = GET_MODE_ALIGNMENT (TYPE_MODE (sizetype));
2499 TYPE_SIZE (sizetype) = bitsize_int (precision);
2500 TYPE_SIZE_UNIT (sizetype) = size_int (GET_MODE_SIZE (TYPE_MODE (sizetype)));
2501 set_min_and_max_values_for_integral_type (sizetype, precision,
2502 /*is_unsigned=*/true);
2503
2504 SET_TYPE_MODE (bitsizetype, smallest_mode_for_size (bprecision, MODE_INT));
2505 TYPE_ALIGN (bitsizetype) = GET_MODE_ALIGNMENT (TYPE_MODE (bitsizetype));
2506 TYPE_SIZE (bitsizetype) = bitsize_int (bprecision);
2507 TYPE_SIZE_UNIT (bitsizetype)
2508 = size_int (GET_MODE_SIZE (TYPE_MODE (bitsizetype)));
2509 set_min_and_max_values_for_integral_type (bitsizetype, bprecision,
2510 /*is_unsigned=*/true);
2511
2512 /* Create the signed variants of *sizetype. */
2513 ssizetype = make_signed_type (TYPE_PRECISION (sizetype));
2514 TYPE_NAME (ssizetype) = get_identifier ("ssizetype");
2515 sbitsizetype = make_signed_type (TYPE_PRECISION (bitsizetype));
2516 TYPE_NAME (sbitsizetype) = get_identifier ("sbitsizetype");
2517 }
2518 \f
2519 /* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE
2520 or BOOLEAN_TYPE. Set TYPE_MIN_VALUE and TYPE_MAX_VALUE
2521 for TYPE, based on the PRECISION and whether or not the TYPE
2522 IS_UNSIGNED. PRECISION need not correspond to a width supported
2523 natively by the hardware; for example, on a machine with 8-bit,
2524 16-bit, and 32-bit register modes, PRECISION might be 7, 23, or
2525 61. */
2526
2527 void
2528 set_min_and_max_values_for_integral_type (tree type,
2529 int precision,
2530 bool is_unsigned)
2531 {
2532 tree min_value;
2533 tree max_value;
2534
2535 if (is_unsigned)
2536 {
2537 min_value = build_int_cst (type, 0);
2538 max_value
2539 = build_int_cst_wide (type, precision - HOST_BITS_PER_WIDE_INT >= 0
2540 ? -1
2541 : ((HOST_WIDE_INT) 1 << precision) - 1,
2542 precision - HOST_BITS_PER_WIDE_INT > 0
2543 ? ((unsigned HOST_WIDE_INT) ~0
2544 >> (HOST_BITS_PER_WIDE_INT
2545 - (precision - HOST_BITS_PER_WIDE_INT)))
2546 : 0);
2547 }
2548 else
2549 {
2550 min_value
2551 = build_int_cst_wide (type,
2552 (precision - HOST_BITS_PER_WIDE_INT > 0
2553 ? 0
2554 : (HOST_WIDE_INT) (-1) << (precision - 1)),
2555 (((HOST_WIDE_INT) (-1)
2556 << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2557 ? precision - HOST_BITS_PER_WIDE_INT - 1
2558 : 0))));
2559 max_value
2560 = build_int_cst_wide (type,
2561 (precision - HOST_BITS_PER_WIDE_INT > 0
2562 ? -1
2563 : (HOST_WIDE_INT)
2564 (((unsigned HOST_WIDE_INT) 1
2565 << (precision - 1)) - 1)),
2566 (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2567 ? (HOST_WIDE_INT)
2568 ((((unsigned HOST_WIDE_INT) 1
2569 << (precision - HOST_BITS_PER_WIDE_INT
2570 - 1))) - 1)
2571 : 0));
2572 }
2573
2574 TYPE_MIN_VALUE (type) = min_value;
2575 TYPE_MAX_VALUE (type) = max_value;
2576 }
2577
2578 /* Set the extreme values of TYPE based on its precision in bits,
2579 then lay it out. Used when make_signed_type won't do
2580 because the tree code is not INTEGER_TYPE.
2581 E.g. for Pascal, when the -fsigned-char option is given. */
2582
2583 void
2584 fixup_signed_type (tree type)
2585 {
2586 int precision = TYPE_PRECISION (type);
2587
2588 /* We can not represent properly constants greater then
2589 HOST_BITS_PER_DOUBLE_INT, still we need the types
2590 as they are used by i386 vector extensions and friends. */
2591 if (precision > HOST_BITS_PER_DOUBLE_INT)
2592 precision = HOST_BITS_PER_DOUBLE_INT;
2593
2594 set_min_and_max_values_for_integral_type (type, precision,
2595 /*is_unsigned=*/false);
2596
2597 /* Lay out the type: set its alignment, size, etc. */
2598 layout_type (type);
2599 }
2600
2601 /* Set the extreme values of TYPE based on its precision in bits,
2602 then lay it out. This is used both in `make_unsigned_type'
2603 and for enumeral types. */
2604
2605 void
2606 fixup_unsigned_type (tree type)
2607 {
2608 int precision = TYPE_PRECISION (type);
2609
2610 /* We can not represent properly constants greater then
2611 HOST_BITS_PER_DOUBLE_INT, still we need the types
2612 as they are used by i386 vector extensions and friends. */
2613 if (precision > HOST_BITS_PER_DOUBLE_INT)
2614 precision = HOST_BITS_PER_DOUBLE_INT;
2615
2616 TYPE_UNSIGNED (type) = 1;
2617
2618 set_min_and_max_values_for_integral_type (type, precision,
2619 /*is_unsigned=*/true);
2620
2621 /* Lay out the type: set its alignment, size, etc. */
2622 layout_type (type);
2623 }
2624 \f
2625 /* Construct an iterator for a bitfield that spans BITSIZE bits,
2626 starting at BITPOS.
2627
2628 BITREGION_START is the bit position of the first bit in this
2629 sequence of bit fields. BITREGION_END is the last bit in this
2630 sequence. If these two fields are non-zero, we should restrict the
2631 memory access to that range. Otherwise, we are allowed to touch
2632 any adjacent non bit-fields.
2633
2634 ALIGN is the alignment of the underlying object in bits.
2635 VOLATILEP says whether the bitfield is volatile. */
2636
2637 bit_field_mode_iterator
2638 ::bit_field_mode_iterator (HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos,
2639 HOST_WIDE_INT bitregion_start,
2640 HOST_WIDE_INT bitregion_end,
2641 unsigned int align, bool volatilep)
2642 : mode_ (GET_CLASS_NARROWEST_MODE (MODE_INT)), bitsize_ (bitsize),
2643 bitpos_ (bitpos), bitregion_start_ (bitregion_start),
2644 bitregion_end_ (bitregion_end), align_ (align),
2645 volatilep_ (volatilep), count_ (0)
2646 {
2647 if (!bitregion_end_)
2648 {
2649 /* We can assume that any aligned chunk of ALIGN bits that overlaps
2650 the bitfield is mapped and won't trap, provided that ALIGN isn't
2651 too large. The cap is the biggest required alignment for data,
2652 or at least the word size. And force one such chunk at least. */
2653 unsigned HOST_WIDE_INT units
2654 = MIN (align, MAX (BIGGEST_ALIGNMENT, BITS_PER_WORD));
2655 if (bitsize <= 0)
2656 bitsize = 1;
2657 bitregion_end_ = bitpos + bitsize + units - 1;
2658 bitregion_end_ -= bitregion_end_ % units + 1;
2659 }
2660 }
2661
2662 /* Calls to this function return successively larger modes that can be used
2663 to represent the bitfield. Return true if another bitfield mode is
2664 available, storing it in *OUT_MODE if so. */
2665
2666 bool
2667 bit_field_mode_iterator::next_mode (enum machine_mode *out_mode)
2668 {
2669 for (; mode_ != VOIDmode; mode_ = GET_MODE_WIDER_MODE (mode_))
2670 {
2671 unsigned int unit = GET_MODE_BITSIZE (mode_);
2672
2673 /* Skip modes that don't have full precision. */
2674 if (unit != GET_MODE_PRECISION (mode_))
2675 continue;
2676
2677 /* Stop if the mode is too wide to handle efficiently. */
2678 if (unit > MAX_FIXED_MODE_SIZE)
2679 break;
2680
2681 /* Don't deliver more than one multiword mode; the smallest one
2682 should be used. */
2683 if (count_ > 0 && unit > BITS_PER_WORD)
2684 break;
2685
2686 /* Skip modes that are too small. */
2687 unsigned HOST_WIDE_INT substart = (unsigned HOST_WIDE_INT) bitpos_ % unit;
2688 unsigned HOST_WIDE_INT subend = substart + bitsize_;
2689 if (subend > unit)
2690 continue;
2691
2692 /* Stop if the mode goes outside the bitregion. */
2693 HOST_WIDE_INT start = bitpos_ - substart;
2694 if (bitregion_start_ && start < bitregion_start_)
2695 break;
2696 HOST_WIDE_INT end = start + unit;
2697 if (end > bitregion_end_ + 1)
2698 break;
2699
2700 /* Stop if the mode requires too much alignment. */
2701 if (GET_MODE_ALIGNMENT (mode_) > align_
2702 && SLOW_UNALIGNED_ACCESS (mode_, align_))
2703 break;
2704
2705 *out_mode = mode_;
2706 mode_ = GET_MODE_WIDER_MODE (mode_);
2707 count_++;
2708 return true;
2709 }
2710 return false;
2711 }
2712
2713 /* Return true if smaller modes are generally preferred for this kind
2714 of bitfield. */
2715
2716 bool
2717 bit_field_mode_iterator::prefer_smaller_modes ()
2718 {
2719 return (volatilep_
2720 ? targetm.narrow_volatile_bitfield ()
2721 : !SLOW_BYTE_ACCESS);
2722 }
2723
2724 /* Find the best machine mode to use when referencing a bit field of length
2725 BITSIZE bits starting at BITPOS.
2726
2727 BITREGION_START is the bit position of the first bit in this
2728 sequence of bit fields. BITREGION_END is the last bit in this
2729 sequence. If these two fields are non-zero, we should restrict the
2730 memory access to that range. Otherwise, we are allowed to touch
2731 any adjacent non bit-fields.
2732
2733 The underlying object is known to be aligned to a boundary of ALIGN bits.
2734 If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
2735 larger than LARGEST_MODE (usually SImode).
2736
2737 If no mode meets all these conditions, we return VOIDmode.
2738
2739 If VOLATILEP is false and SLOW_BYTE_ACCESS is false, we return the
2740 smallest mode meeting these conditions.
2741
2742 If VOLATILEP is false and SLOW_BYTE_ACCESS is true, we return the
2743 largest mode (but a mode no wider than UNITS_PER_WORD) that meets
2744 all the conditions.
2745
2746 If VOLATILEP is true the narrow_volatile_bitfields target hook is used to
2747 decide which of the above modes should be used. */
2748
2749 enum machine_mode
2750 get_best_mode (int bitsize, int bitpos,
2751 unsigned HOST_WIDE_INT bitregion_start,
2752 unsigned HOST_WIDE_INT bitregion_end,
2753 unsigned int align,
2754 enum machine_mode largest_mode, bool volatilep)
2755 {
2756 bit_field_mode_iterator iter (bitsize, bitpos, bitregion_start,
2757 bitregion_end, align, volatilep);
2758 enum machine_mode widest_mode = VOIDmode;
2759 enum machine_mode mode;
2760 while (iter.next_mode (&mode)
2761 /* ??? For historical reasons, reject modes that would normally
2762 receive greater alignment, even if unaligned accesses are
2763 acceptable. This has both advantages and disadvantages.
2764 Removing this check means that something like:
2765
2766 struct s { unsigned int x; unsigned int y; };
2767 int f (struct s *s) { return s->x == 0 && s->y == 0; }
2768
2769 can be implemented using a single load and compare on
2770 64-bit machines that have no alignment restrictions.
2771 For example, on powerpc64-linux-gnu, we would generate:
2772
2773 ld 3,0(3)
2774 cntlzd 3,3
2775 srdi 3,3,6
2776 blr
2777
2778 rather than:
2779
2780 lwz 9,0(3)
2781 cmpwi 7,9,0
2782 bne 7,.L3
2783 lwz 3,4(3)
2784 cntlzw 3,3
2785 srwi 3,3,5
2786 extsw 3,3
2787 blr
2788 .p2align 4,,15
2789 .L3:
2790 li 3,0
2791 blr
2792
2793 However, accessing more than one field can make life harder
2794 for the gimple optimizers. For example, gcc.dg/vect/bb-slp-5.c
2795 has a series of unsigned short copies followed by a series of
2796 unsigned short comparisons. With this check, both the copies
2797 and comparisons remain 16-bit accesses and FRE is able
2798 to eliminate the latter. Without the check, the comparisons
2799 can be done using 2 64-bit operations, which FRE isn't able
2800 to handle in the same way.
2801
2802 Either way, it would probably be worth disabling this check
2803 during expand. One particular example where removing the
2804 check would help is the get_best_mode call in store_bit_field.
2805 If we are given a memory bitregion of 128 bits that is aligned
2806 to a 64-bit boundary, and the bitfield we want to modify is
2807 in the second half of the bitregion, this check causes
2808 store_bitfield to turn the memory into a 64-bit reference
2809 to the _first_ half of the region. We later use
2810 adjust_bitfield_address to get a reference to the correct half,
2811 but doing so looks to adjust_bitfield_address as though we are
2812 moving past the end of the original object, so it drops the
2813 associated MEM_EXPR and MEM_OFFSET. Removing the check
2814 causes store_bit_field to keep a 128-bit memory reference,
2815 so that the final bitfield reference still has a MEM_EXPR
2816 and MEM_OFFSET. */
2817 && GET_MODE_ALIGNMENT (mode) <= align
2818 && (largest_mode == VOIDmode
2819 || GET_MODE_SIZE (mode) <= GET_MODE_SIZE (largest_mode)))
2820 {
2821 widest_mode = mode;
2822 if (iter.prefer_smaller_modes ())
2823 break;
2824 }
2825 return widest_mode;
2826 }
2827
2828 /* Gets minimal and maximal values for MODE (signed or unsigned depending on
2829 SIGN). The returned constants are made to be usable in TARGET_MODE. */
2830
2831 void
2832 get_mode_bounds (enum machine_mode mode, int sign,
2833 enum machine_mode target_mode,
2834 rtx *mmin, rtx *mmax)
2835 {
2836 unsigned size = GET_MODE_BITSIZE (mode);
2837 unsigned HOST_WIDE_INT min_val, max_val;
2838
2839 gcc_assert (size <= HOST_BITS_PER_WIDE_INT);
2840
2841 if (sign)
2842 {
2843 min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1));
2844 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1)) - 1;
2845 }
2846 else
2847 {
2848 min_val = 0;
2849 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1) << 1) - 1;
2850 }
2851
2852 *mmin = gen_int_mode (min_val, target_mode);
2853 *mmax = gen_int_mode (max_val, target_mode);
2854 }
2855
2856 #include "gt-stor-layout.h"