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