]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/stor-layout.c
Change copyright header to refer to version 3 of the GNU General Public License and...
[thirdparty/gcc.git] / gcc / stor-layout.c
CommitLineData
7306ed3f 1/* C-compiler utilities for types and variables storage layout
06ceef4e 2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998,
455f14dd 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
71d59383 4 Free Software Foundation, Inc.
7306ed3f 5
1322177d 6This file is part of GCC.
7306ed3f 7
1322177d
LB
8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
9dcd6f09 10Software Foundation; either version 3, or (at your option) any later
1322177d 11version.
7306ed3f 12
1322177d
LB
13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
7306ed3f
JW
17
18You should have received a copy of the GNU General Public License
9dcd6f09
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
7306ed3f
JW
21
22
23#include "config.h"
670ee920 24#include "system.h"
4977bab6
ZW
25#include "coretypes.h"
26#include "tm.h"
7306ed3f 27#include "tree.h"
d05a5492 28#include "rtl.h"
6baf1cc8 29#include "tm_p.h"
566cdc73 30#include "flags.h"
7306ed3f 31#include "function.h"
234042f4 32#include "expr.h"
ea40ba9c 33#include "output.h"
10f0ad3d 34#include "toplev.h"
d7db6646 35#include "ggc.h"
f913c102 36#include "target.h"
43577e6b 37#include "langhooks.h"
26277d41 38#include "regs.h"
89b0433e 39#include "params.h"
7306ed3f 40
7306ed3f 41/* Data type for the expressions representing sizes of data types.
896cced4 42 It is the first integer type laid out. */
fed3cef0 43tree sizetype_tab[(int) TYPE_KIND_LAST];
7306ed3f 44
d4c40650
RS
45/* If nonzero, this is an upper limit on alignment of structure fields.
46 The value is measured in bits. */
467cecf3 47unsigned int maximum_field_alignment = TARGET_DEFAULT_PACK_STRUCT * BITS_PER_UNIT;
8c27b7d4 48/* ... and its original value in bytes, specified via -fpack-struct=<value>. */
467cecf3 49unsigned int initial_max_fld_align = TARGET_DEFAULT_PACK_STRUCT;
d4c40650 50
b5d6a2ff
RK
51/* Nonzero if all REFERENCE_TYPEs are internal and hence should be
52 allocated in Pmode, not ptr_mode. Set only by internal_reference_types
53 called only by a front end. */
54static int reference_types_internal = 0;
55
46c5ad27
AJ
56static void finalize_record_size (record_layout_info);
57static void finalize_type_size (tree);
58static void place_union_field (record_layout_info, tree);
b8089d8d 59#if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
46c5ad27
AJ
60static int excess_unit_span (HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT,
61 HOST_WIDE_INT, tree);
b8089d8d 62#endif
46c5ad27 63extern void debug_rli (record_layout_info);
7306ed3f
JW
64\f
65/* SAVE_EXPRs for sizes of types and decls, waiting to be expanded. */
66
e2500fed 67static GTY(()) tree pending_sizes;
7306ed3f 68
b5d6a2ff
RK
69/* Show that REFERENCE_TYPES are internal and should be Pmode. Called only
70 by front end. */
71
72void
46c5ad27 73internal_reference_types (void)
b5d6a2ff
RK
74{
75 reference_types_internal = 1;
76}
77
770ae6cc
RK
78/* Get a list of all the objects put on the pending sizes list. */
79
7306ed3f 80tree
46c5ad27 81get_pending_sizes (void)
7306ed3f
JW
82{
83 tree chain = pending_sizes;
d4b60170 84
7306ed3f
JW
85 pending_sizes = 0;
86 return chain;
87}
88
fe375cf1
JJ
89/* Add EXPR to the pending sizes list. */
90
91void
46c5ad27 92put_pending_size (tree expr)
fe375cf1 93{
3874585e
RK
94 /* Strip any simple arithmetic from EXPR to see if it has an underlying
95 SAVE_EXPR. */
a9ecacf6 96 expr = skip_simple_arithmetic (expr);
3874585e
RK
97
98 if (TREE_CODE (expr) == SAVE_EXPR)
99 pending_sizes = tree_cons (NULL_TREE, expr, pending_sizes);
fe375cf1
JJ
100}
101
770ae6cc
RK
102/* Put a chain of objects into the pending sizes list, which must be
103 empty. */
104
1fd7c4ac 105void
46c5ad27 106put_pending_sizes (tree chain)
1fd7c4ac 107{
41374e13 108 gcc_assert (!pending_sizes);
1fd7c4ac
RK
109 pending_sizes = chain;
110}
111
76ffb3a0 112/* Given a size SIZE that may not be a constant, return a SAVE_EXPR
7306ed3f
JW
113 to serve as the actual size-expression for a type or decl. */
114
4e4b555d 115tree
46c5ad27 116variable_size (tree size)
7306ed3f 117{
3695c25f
JM
118 tree save;
119
5e9bec99
RK
120 /* If the language-processor is to take responsibility for variable-sized
121 items (e.g., languages which have elaboration procedures like Ada),
ac79cd5a
RK
122 just return SIZE unchanged. Likewise for self-referential sizes and
123 constant sizes. */
76ffb3a0 124 if (TREE_CONSTANT (size)
ae2bcd98 125 || lang_hooks.decls.global_bindings_p () < 0
679035f3 126 || CONTAINS_PLACEHOLDER_P (size))
5e9bec99
RK
127 return size;
128
ad50bc8d 129 size = save_expr (size);
68de3831 130
d26f8097
MM
131 /* If an array with a variable number of elements is declared, and
132 the elements require destruction, we will emit a cleanup for the
133 array. That cleanup is run both on normal exit from the block
134 and in the exception-handler for the block. Normally, when code
135 is used in both ordinary code and in an exception handler it is
136 `unsaved', i.e., all SAVE_EXPRs are recalculated. However, we do
137 not wish to do that here; the array-size is the same in both
138 places. */
1c9766da 139 save = skip_simple_arithmetic (size);
d26f8097 140
6a0bec2c 141 if (cfun && cfun->x_dont_save_pending_sizes_p)
6de9cd9a
DN
142 /* The front-end doesn't want us to keep a list of the expressions
143 that determine sizes for variable size objects. Trust it. */
144 return size;
145
ae2bcd98 146 if (lang_hooks.decls.global_bindings_p ())
7306ed3f 147 {
80f9c711 148 if (TREE_CONSTANT (size))
971801ff 149 error ("type size can%'t be explicitly evaluated");
80f9c711
RS
150 else
151 error ("variable-size type declared outside of any function");
152
fed3cef0 153 return size_one_node;
7306ed3f
JW
154 }
155
6a0bec2c 156 put_pending_size (save);
7306ed3f
JW
157
158 return size;
159}
160\f
161#ifndef MAX_FIXED_MODE_SIZE
162#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
163#endif
164
37783865
ZW
165/* Return the machine mode to use for a nonscalar of SIZE bits. The
166 mode must be in class CLASS, and have exactly that many value bits;
167 it may have padding as well. If LIMIT is nonzero, modes of wider
168 than MAX_FIXED_MODE_SIZE will not be used. */
7306ed3f
JW
169
170enum machine_mode
46c5ad27 171mode_for_size (unsigned int size, enum mode_class class, int limit)
7306ed3f 172{
b3694847 173 enum machine_mode mode;
7306ed3f 174
72c602fc 175 if (limit && size > MAX_FIXED_MODE_SIZE)
7306ed3f
JW
176 return BLKmode;
177
5e9bec99 178 /* Get the first mode which has this size, in the specified class. */
7306ed3f
JW
179 for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
180 mode = GET_MODE_WIDER_MODE (mode))
37783865 181 if (GET_MODE_PRECISION (mode) == size)
7306ed3f
JW
182 return mode;
183
184 return BLKmode;
185}
186
72c602fc
RK
187/* Similar, except passed a tree node. */
188
189enum machine_mode
46c5ad27 190mode_for_size_tree (tree size, enum mode_class class, int limit)
72c602fc 191{
a6a12bb9
RS
192 unsigned HOST_WIDE_INT uhwi;
193 unsigned int ui;
194
195 if (!host_integerp (size, 1))
72c602fc 196 return BLKmode;
a6a12bb9
RS
197 uhwi = tree_low_cst (size, 1);
198 ui = uhwi;
199 if (uhwi != ui)
200 return BLKmode;
201 return mode_for_size (ui, class, limit);
72c602fc
RK
202}
203
5e9bec99 204/* Similar, but never return BLKmode; return the narrowest mode that
37783865 205 contains at least the requested number of value bits. */
5e9bec99 206
27922c13 207enum machine_mode
46c5ad27 208smallest_mode_for_size (unsigned int size, enum mode_class class)
5e9bec99 209{
b3694847 210 enum machine_mode mode;
5e9bec99
RK
211
212 /* Get the first mode which has at least this size, in the
213 specified class. */
214 for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
215 mode = GET_MODE_WIDER_MODE (mode))
37783865 216 if (GET_MODE_PRECISION (mode) >= size)
5e9bec99
RK
217 return mode;
218
41374e13 219 gcc_unreachable ();
5e9bec99
RK
220}
221
d006aa54
RH
222/* Find an integer mode of the exact same size, or BLKmode on failure. */
223
224enum machine_mode
46c5ad27 225int_mode_for_mode (enum machine_mode mode)
d006aa54
RH
226{
227 switch (GET_MODE_CLASS (mode))
228 {
229 case MODE_INT:
230 case MODE_PARTIAL_INT:
231 break;
232
233 case MODE_COMPLEX_INT:
234 case MODE_COMPLEX_FLOAT:
235 case MODE_FLOAT:
15ed7b52 236 case MODE_DECIMAL_FLOAT:
62c07905
JM
237 case MODE_VECTOR_INT:
238 case MODE_VECTOR_FLOAT:
d006aa54
RH
239 mode = mode_for_size (GET_MODE_BITSIZE (mode), MODE_INT, 0);
240 break;
241
242 case MODE_RANDOM:
243 if (mode == BLKmode)
786de7eb 244 break;
d4b60170 245
2d76cb1a 246 /* ... fall through ... */
d006aa54
RH
247
248 case MODE_CC:
249 default:
41374e13 250 gcc_unreachable ();
d006aa54
RH
251 }
252
253 return mode;
254}
255
187515f5
AO
256/* Return the alignment of MODE. This will be bounded by 1 and
257 BIGGEST_ALIGNMENT. */
258
259unsigned int
46c5ad27 260get_mode_alignment (enum machine_mode mode)
187515f5 261{
0974c7d7 262 return MIN (BIGGEST_ALIGNMENT, MAX (1, mode_base_align[mode]*BITS_PER_UNIT));
187515f5
AO
263}
264
7306ed3f 265\f
78d55cc8
JM
266/* Subroutine of layout_decl: Force alignment required for the data type.
267 But if the decl itself wants greater alignment, don't override that. */
268
269static inline void
270do_type_align (tree type, tree decl)
271{
272 if (TYPE_ALIGN (type) > DECL_ALIGN (decl))
273 {
274 DECL_ALIGN (decl) = TYPE_ALIGN (type);
3acef2ae
JM
275 if (TREE_CODE (decl) == FIELD_DECL)
276 DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type);
78d55cc8
JM
277 }
278}
279
7306ed3f
JW
280/* Set the size, mode and alignment of a ..._DECL node.
281 TYPE_DECL does need this for C++.
282 Note that LABEL_DECL and CONST_DECL nodes do not need this,
283 and FUNCTION_DECL nodes have them set up in a special (and simple) way.
284 Don't call layout_decl for them.
285
286 KNOWN_ALIGN is the amount of alignment we can assume this
287 decl has with no special effort. It is relevant only for FIELD_DECLs
288 and depends on the previous fields.
289 All that matters about KNOWN_ALIGN is which powers of 2 divide it.
290 If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
291 the record will be aligned to suit. */
292
293void
46c5ad27 294layout_decl (tree decl, unsigned int known_align)
7306ed3f 295{
b3694847
SS
296 tree type = TREE_TYPE (decl);
297 enum tree_code code = TREE_CODE (decl);
a46666a9 298 rtx rtl = NULL_RTX;
7306ed3f
JW
299
300 if (code == CONST_DECL)
301 return;
0ac11108 302
41374e13
NS
303 gcc_assert (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL
304 || code == TYPE_DECL ||code == FIELD_DECL);
0ac11108 305
a46666a9
RH
306 rtl = DECL_RTL_IF_SET (decl);
307
7306ed3f 308 if (type == error_mark_node)
33433751 309 type = void_type_node;
7306ed3f 310
770ae6cc
RK
311 /* Usually the size and mode come from the data type without change,
312 however, the front-end may set the explicit width of the field, so its
313 size may not be the same as the size of its type. This happens with
314 bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
315 also happens with other fields. For example, the C++ front-end creates
316 zero-sized fields corresponding to empty base classes, and depends on
317 layout_type setting DECL_FIELD_BITPOS correctly for the field. Set the
4b6bf620
RK
318 size in bytes from the size in bits. If we have already set the mode,
319 don't set it again since we can be called twice for FIELD_DECLs. */
770ae6cc 320
a150de29 321 DECL_UNSIGNED (decl) = TYPE_UNSIGNED (type);
4b6bf620
RK
322 if (DECL_MODE (decl) == VOIDmode)
323 DECL_MODE (decl) = TYPE_MODE (type);
770ae6cc 324
5e9bec99 325 if (DECL_SIZE (decl) == 0)
06ceef4e 326 {
ad50bc8d
RH
327 DECL_SIZE (decl) = TYPE_SIZE (type);
328 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type);
06ceef4e 329 }
1a96dc46 330 else if (DECL_SIZE_UNIT (decl) == 0)
770ae6cc 331 DECL_SIZE_UNIT (decl)
455f19cb
MM
332 = fold_convert (sizetype, size_binop (CEIL_DIV_EXPR, DECL_SIZE (decl),
333 bitsize_unit_node));
06ceef4e 334
78d55cc8
JM
335 if (code != FIELD_DECL)
336 /* For non-fields, update the alignment from the type. */
337 do_type_align (type, decl);
338 else
339 /* For fields, it's a bit more complicated... */
786de7eb 340 {
40aae178 341 bool old_user_align = DECL_USER_ALIGN (decl);
d1a701eb
MM
342 bool zero_bitfield = false;
343 bool packed_p = DECL_PACKED (decl);
344 unsigned int mfa;
40aae178 345
78d55cc8
JM
346 if (DECL_BIT_FIELD (decl))
347 {
348 DECL_BIT_FIELD_TYPE (decl) = type;
7306ed3f 349
78d55cc8 350 /* A zero-length bit-field affects the alignment of the next
d1a701eb
MM
351 field. In essence such bit-fields are not influenced by
352 any packing due to #pragma pack or attribute packed. */
78d55cc8 353 if (integer_zerop (DECL_SIZE (decl))
5fd9b178 354 && ! targetm.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl)))
78d55cc8 355 {
d1a701eb
MM
356 zero_bitfield = true;
357 packed_p = false;
78d55cc8
JM
358#ifdef PCC_BITFIELD_TYPE_MATTERS
359 if (PCC_BITFIELD_TYPE_MATTERS)
360 do_type_align (type, decl);
361 else
362#endif
ad3f5759 363 {
78d55cc8 364#ifdef EMPTY_FIELD_BOUNDARY
ad3f5759
AS
365 if (EMPTY_FIELD_BOUNDARY > DECL_ALIGN (decl))
366 {
367 DECL_ALIGN (decl) = EMPTY_FIELD_BOUNDARY;
368 DECL_USER_ALIGN (decl) = 0;
369 }
78d55cc8 370#endif
ad3f5759 371 }
78d55cc8
JM
372 }
373
374 /* See if we can use an ordinary integer mode for a bit-field.
375 Conditions are: a fixed size that is correct for another mode
376 and occupying a complete byte or bytes on proper boundary. */
377 if (TYPE_SIZE (type) != 0
378 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
379 && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
380 {
381 enum machine_mode xmode
382 = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
383
f676971a 384 if (xmode != BLKmode
9a706ec7
MM
385 && (known_align == 0
386 || known_align >= GET_MODE_ALIGNMENT (xmode)))
78d55cc8
JM
387 {
388 DECL_ALIGN (decl) = MAX (GET_MODE_ALIGNMENT (xmode),
389 DECL_ALIGN (decl));
390 DECL_MODE (decl) = xmode;
391 DECL_BIT_FIELD (decl) = 0;
392 }
393 }
394
395 /* Turn off DECL_BIT_FIELD if we won't need it set. */
396 if (TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
397 && known_align >= TYPE_ALIGN (type)
398 && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
399 DECL_BIT_FIELD (decl) = 0;
400 }
d1a701eb 401 else if (packed_p && DECL_USER_ALIGN (decl))
78d55cc8 402 /* Don't touch DECL_ALIGN. For other packed fields, go ahead and
2038bd69 403 round up; we'll reduce it again below. We want packing to
ba228239 404 supersede USER_ALIGN inherited from the type, but defer to
2038bd69 405 alignment explicitly specified on the field decl. */;
78d55cc8 406 else
40aae178
JM
407 do_type_align (type, decl);
408
409 /* If the field is of variable size, we can't misalign it since we
410 have no way to make a temporary to align the result. But this
411 isn't an issue if the decl is not addressable. Likewise if it
412 is of unknown size.
413
414 Note that do_type_align may set DECL_USER_ALIGN, so we need to
415 check old_user_align instead. */
d1a701eb 416 if (packed_p
40aae178
JM
417 && !old_user_align
418 && (DECL_NONADDRESSABLE_P (decl)
419 || DECL_SIZE_UNIT (decl) == 0
420 || TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST))
421 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
78d55cc8 422
d1a701eb 423 if (! packed_p && ! DECL_USER_ALIGN (decl))
7306ed3f 424 {
78d55cc8
JM
425 /* Some targets (i.e. i386, VMS) limit struct field alignment
426 to a lower boundary than alignment of variables unless
427 it was overridden by attribute aligned. */
428#ifdef BIGGEST_FIELD_ALIGNMENT
429 DECL_ALIGN (decl)
430 = MIN (DECL_ALIGN (decl), (unsigned) BIGGEST_FIELD_ALIGNMENT);
431#endif
432#ifdef ADJUST_FIELD_ALIGN
433 DECL_ALIGN (decl) = ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl));
434#endif
7306ed3f 435 }
9ca75f15 436
d1a701eb
MM
437 if (zero_bitfield)
438 mfa = initial_max_fld_align * BITS_PER_UNIT;
439 else
440 mfa = maximum_field_alignment;
9ca75f15 441 /* Should this be controlled by DECL_USER_ALIGN, too? */
d1a701eb
MM
442 if (mfa != 0)
443 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), mfa);
7306ed3f
JW
444 }
445
446 /* Evaluate nonconstant size only once, either now or as soon as safe. */
447 if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
448 DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
06ceef4e
RK
449 if (DECL_SIZE_UNIT (decl) != 0
450 && TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST)
451 DECL_SIZE_UNIT (decl) = variable_size (DECL_SIZE_UNIT (decl));
452
453 /* If requested, warn about definitions of large data objects. */
454 if (warn_larger_than
17aec3eb 455 && (code == VAR_DECL || code == PARM_DECL)
06ceef4e
RK
456 && ! DECL_EXTERNAL (decl))
457 {
458 tree size = DECL_SIZE_UNIT (decl);
459
460 if (size != 0 && TREE_CODE (size) == INTEGER_CST
05bccae2 461 && compare_tree_int (size, larger_than_size) > 0)
06ceef4e 462 {
0384674e 463 int size_as_int = TREE_INT_CST_LOW (size);
06ceef4e 464
05bccae2 465 if (compare_tree_int (size, size_as_int) == 0)
dee15844 466 warning (0, "size of %q+D is %d bytes", decl, size_as_int);
06ceef4e 467 else
ea40ba9c 468 warning (0, "size of %q+D is larger than %wd bytes",
dee15844 469 decl, larger_than_size);
06ceef4e
RK
470 }
471 }
a46666a9
RH
472
473 /* If the RTL was already set, update its mode and mem attributes. */
474 if (rtl)
475 {
476 PUT_MODE (rtl, DECL_MODE (decl));
477 SET_DECL_RTL (decl, 0);
478 set_mem_attributes (rtl, decl, 1);
479 SET_DECL_RTL (decl, rtl);
480 }
7306ed3f 481}
d8472c75
JM
482
483/* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
484 a previous call to layout_decl and calls it again. */
485
486void
487relayout_decl (tree decl)
488{
489 DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
490 DECL_MODE (decl) = VOIDmode;
c9eee440
AP
491 if (!DECL_USER_ALIGN (decl))
492 DECL_ALIGN (decl) = 0;
d8472c75
JM
493 SET_DECL_RTL (decl, 0);
494
495 layout_decl (decl, 0);
496}
7306ed3f 497\f
e0cea8d9
RK
498/* Hook for a front-end function that can modify the record layout as needed
499 immediately before it is finalized. */
500
1bb11558 501static void (*lang_adjust_rli) (record_layout_info) = 0;
e0cea8d9
RK
502
503void
46c5ad27 504set_lang_adjust_rli (void (*f) (record_layout_info))
e0cea8d9
RK
505{
506 lang_adjust_rli = f;
507}
508
770ae6cc
RK
509/* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
510 QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which
511 is to be passed to all other layout functions for this record. It is the
786de7eb 512 responsibility of the caller to call `free' for the storage returned.
770ae6cc
RK
513 Note that garbage collection is not permitted until we finish laying
514 out the record. */
7306ed3f 515
9328904c 516record_layout_info
46c5ad27 517start_record_layout (tree t)
7306ed3f 518{
703ad42b 519 record_layout_info rli = xmalloc (sizeof (struct record_layout_info_s));
9328904c
MM
520
521 rli->t = t;
770ae6cc 522
9328904c
MM
523 /* If the type has a minimum specified alignment (via an attribute
524 declaration, for example) use it -- otherwise, start with a
525 one-byte alignment. */
526 rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
78d55cc8 527 rli->unpacked_align = rli->record_align;
770ae6cc 528 rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
7306ed3f 529
5c19a356
MS
530#ifdef STRUCTURE_SIZE_BOUNDARY
531 /* Packed structures don't need to have minimum size. */
f132af85 532 if (! TYPE_PACKED (t))
353293e7
PB
533 {
534 unsigned tmp;
535
536 /* #pragma pack overrides STRUCTURE_SIZE_BOUNDARY. */
537 tmp = (unsigned) STRUCTURE_SIZE_BOUNDARY;
538 if (maximum_field_alignment != 0)
539 tmp = MIN (tmp, maximum_field_alignment);
540 rli->record_align = MAX (rli->record_align, tmp);
541 }
5c19a356 542#endif
7306ed3f 543
770ae6cc
RK
544 rli->offset = size_zero_node;
545 rli->bitpos = bitsize_zero_node;
f913c102 546 rli->prev_field = 0;
770ae6cc
RK
547 rli->pending_statics = 0;
548 rli->packed_maybe_necessary = 0;
0ac11108 549 rli->remaining_in_alignment = 0;
770ae6cc 550
9328904c
MM
551 return rli;
552}
7306ed3f 553
f2704b9f
RK
554/* These four routines perform computations that convert between
555 the offset/bitpos forms and byte and bit offsets. */
556
557tree
46c5ad27 558bit_from_pos (tree offset, tree bitpos)
f2704b9f
RK
559{
560 return size_binop (PLUS_EXPR, bitpos,
0ac11108 561 size_binop (MULT_EXPR,
455f19cb 562 fold_convert (bitsizetype, offset),
f2704b9f
RK
563 bitsize_unit_node));
564}
565
566tree
46c5ad27 567byte_from_pos (tree offset, tree bitpos)
f2704b9f
RK
568{
569 return size_binop (PLUS_EXPR, offset,
455f19cb
MM
570 fold_convert (sizetype,
571 size_binop (TRUNC_DIV_EXPR, bitpos,
572 bitsize_unit_node)));
f2704b9f
RK
573}
574
f2704b9f 575void
46c5ad27
AJ
576pos_from_bit (tree *poffset, tree *pbitpos, unsigned int off_align,
577 tree pos)
f2704b9f
RK
578{
579 *poffset = size_binop (MULT_EXPR,
455f19cb
MM
580 fold_convert (sizetype,
581 size_binop (FLOOR_DIV_EXPR, pos,
582 bitsize_int (off_align))),
f2704b9f
RK
583 size_int (off_align / BITS_PER_UNIT));
584 *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, bitsize_int (off_align));
585}
586
587/* Given a pointer to bit and byte offsets and an offset alignment,
588 normalize the offsets so they are within the alignment. */
589
590void
46c5ad27 591normalize_offset (tree *poffset, tree *pbitpos, unsigned int off_align)
f2704b9f
RK
592{
593 /* If the bit position is now larger than it should be, adjust it
594 downwards. */
595 if (compare_tree_int (*pbitpos, off_align) >= 0)
596 {
597 tree extra_aligns = size_binop (FLOOR_DIV_EXPR, *pbitpos,
598 bitsize_int (off_align));
599
600 *poffset
601 = size_binop (PLUS_EXPR, *poffset,
0ac11108 602 size_binop (MULT_EXPR,
455f19cb 603 fold_convert (sizetype, extra_aligns),
f2704b9f 604 size_int (off_align / BITS_PER_UNIT)));
786de7eb 605
f2704b9f
RK
606 *pbitpos
607 = size_binop (FLOOR_MOD_EXPR, *pbitpos, bitsize_int (off_align));
608 }
609}
610
770ae6cc 611/* Print debugging information about the information in RLI. */
cc9d4a85 612
770ae6cc 613void
46c5ad27 614debug_rli (record_layout_info rli)
cc9d4a85 615{
770ae6cc
RK
616 print_node_brief (stderr, "type", rli->t, 0);
617 print_node_brief (stderr, "\noffset", rli->offset, 0);
618 print_node_brief (stderr, " bitpos", rli->bitpos, 0);
cc9d4a85 619
78d55cc8
JM
620 fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
621 rli->record_align, rli->unpacked_align,
e0cea8d9 622 rli->offset_align);
0ac11108
EC
623
624 /* The ms_struct code is the only that uses this. */
625 if (targetm.ms_bitfield_layout_p (rli->t))
0c397f9c 626 fprintf (stderr, "remaining in alignment = %u\n", rli->remaining_in_alignment);
0ac11108 627
770ae6cc
RK
628 if (rli->packed_maybe_necessary)
629 fprintf (stderr, "packed may be necessary\n");
630
631 if (rli->pending_statics)
632 {
633 fprintf (stderr, "pending statics:\n");
634 debug_tree (rli->pending_statics);
635 }
636}
637
638/* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
639 BITPOS if necessary to keep BITPOS below OFFSET_ALIGN. */
640
641void
46c5ad27 642normalize_rli (record_layout_info rli)
770ae6cc 643{
f2704b9f 644 normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
770ae6cc 645}
cc9d4a85 646
770ae6cc
RK
647/* Returns the size in bytes allocated so far. */
648
649tree
46c5ad27 650rli_size_unit_so_far (record_layout_info rli)
770ae6cc 651{
f2704b9f 652 return byte_from_pos (rli->offset, rli->bitpos);
770ae6cc
RK
653}
654
655/* Returns the size in bits allocated so far. */
656
657tree
46c5ad27 658rli_size_so_far (record_layout_info rli)
770ae6cc 659{
f2704b9f 660 return bit_from_pos (rli->offset, rli->bitpos);
770ae6cc
RK
661}
662
0645ba8f 663/* FIELD is about to be added to RLI->T. The alignment (in bits) of
cbbaf4ae
R
664 the next available location within the record is given by KNOWN_ALIGN.
665 Update the variable alignment fields in RLI, and return the alignment
666 to give the FIELD. */
770ae6cc 667
6de9cd9a 668unsigned int
46c5ad27
AJ
669update_alignment_for_field (record_layout_info rli, tree field,
670 unsigned int known_align)
9328904c
MM
671{
672 /* The alignment required for FIELD. */
673 unsigned int desired_align;
9328904c
MM
674 /* The type of this field. */
675 tree type = TREE_TYPE (field);
0645ba8f
MM
676 /* True if the field was explicitly aligned by the user. */
677 bool user_align;
78d55cc8 678 bool is_bitfield;
9328904c 679
9dfb66b9
CD
680 /* Do not attempt to align an ERROR_MARK node */
681 if (TREE_CODE (type) == ERROR_MARK)
682 return 0;
683
78d55cc8
JM
684 /* Lay out the field so we know what alignment it needs. */
685 layout_decl (field, known_align);
770ae6cc 686 desired_align = DECL_ALIGN (field);
11cf4d18 687 user_align = DECL_USER_ALIGN (field);
770ae6cc 688
78d55cc8
JM
689 is_bitfield = (type != error_mark_node
690 && DECL_BIT_FIELD_TYPE (field)
691 && ! integer_zerop (TYPE_SIZE (type)));
7306ed3f 692
9328904c
MM
693 /* Record must have at least as much alignment as any field.
694 Otherwise, the alignment of the field within the record is
695 meaningless. */
0ac11108 696 if (targetm.ms_bitfield_layout_p (rli->t))
f913c102 697 {
e4850f36
DR
698 /* Here, the alignment of the underlying type of a bitfield can
699 affect the alignment of a record; even a zero-sized field
700 can do this. The alignment should be to the alignment of
701 the type, except that for zero-size bitfields this only
0e9e1e0a 702 applies if there was an immediately prior, nonzero-size
e4850f36 703 bitfield. (That's the way it is, experimentally.) */
cb312376 704 if ((!is_bitfield && !DECL_PACKED (field))
0ac11108
EC
705 || (!integer_zerop (DECL_SIZE (field))
706 ? !DECL_PACKED (field)
707 : (rli->prev_field
708 && DECL_BIT_FIELD_TYPE (rli->prev_field)
709 && ! integer_zerop (DECL_SIZE (rli->prev_field)))))
f913c102 710 {
e4850f36
DR
711 unsigned int type_align = TYPE_ALIGN (type);
712 type_align = MAX (type_align, desired_align);
713 if (maximum_field_alignment != 0)
714 type_align = MIN (type_align, maximum_field_alignment);
715 rli->record_align = MAX (rli->record_align, type_align);
f913c102
AO
716 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
717 }
786de7eb 718 }
3c12fcc2 719#ifdef PCC_BITFIELD_TYPE_MATTERS
78d55cc8 720 else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
9328904c 721 {
8dc65b6e 722 /* Named bit-fields cause the entire structure to have the
13c1cd82
PB
723 alignment implied by their type. Some targets also apply the same
724 rules to unnamed bitfields. */
725 if (DECL_NAME (field) != 0
726 || targetm.align_anon_bitfield ())
7306ed3f 727 {
9328904c 728 unsigned int type_align = TYPE_ALIGN (type);
729a2125 729
ad9335eb
JJ
730#ifdef ADJUST_FIELD_ALIGN
731 if (! TYPE_USER_ALIGN (type))
732 type_align = ADJUST_FIELD_ALIGN (field, type_align);
733#endif
734
d1a701eb
MM
735 /* Targets might chose to handle unnamed and hence possibly
736 zero-width bitfield. Those are not influenced by #pragmas
737 or packed attributes. */
738 if (integer_zerop (DECL_SIZE (field)))
739 {
740 if (initial_max_fld_align)
741 type_align = MIN (type_align,
742 initial_max_fld_align * BITS_PER_UNIT);
743 }
744 else if (maximum_field_alignment != 0)
9328904c
MM
745 type_align = MIN (type_align, maximum_field_alignment);
746 else if (DECL_PACKED (field))
747 type_align = MIN (type_align, BITS_PER_UNIT);
e2301a83 748
8dc65b6e
MM
749 /* The alignment of the record is increased to the maximum
750 of the current alignment, the alignment indicated on the
751 field (i.e., the alignment specified by an __aligned__
752 attribute), and the alignment indicated by the type of
753 the field. */
754 rli->record_align = MAX (rli->record_align, desired_align);
9328904c 755 rli->record_align = MAX (rli->record_align, type_align);
8dc65b6e 756
3c12fcc2 757 if (warn_packed)
e0cea8d9 758 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
daf06049 759 user_align |= TYPE_USER_ALIGN (type);
3c12fcc2 760 }
9328904c 761 }
9328904c 762#endif
78d55cc8 763 else
9328904c
MM
764 {
765 rli->record_align = MAX (rli->record_align, desired_align);
770ae6cc 766 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
9328904c 767 }
3c12fcc2 768
0645ba8f
MM
769 TYPE_USER_ALIGN (rli->t) |= user_align;
770
771 return desired_align;
772}
773
774/* Called from place_field to handle unions. */
775
776static void
46c5ad27 777place_union_field (record_layout_info rli, tree field)
0645ba8f
MM
778{
779 update_alignment_for_field (rli, field, /*known_align=*/0);
780
781 DECL_FIELD_OFFSET (field) = size_zero_node;
782 DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
783 SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
784
0ac11108 785 /* If this is an ERROR_MARK return *after* having set the
9dfb66b9
CD
786 field at the start of the union. This helps when parsing
787 invalid fields. */
788 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK)
789 return;
790
0645ba8f
MM
791 /* We assume the union's size will be a multiple of a byte so we don't
792 bother with BITPOS. */
793 if (TREE_CODE (rli->t) == UNION_TYPE)
794 rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
795 else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
4845b383
KH
796 rli->offset = fold_build3 (COND_EXPR, sizetype,
797 DECL_QUALIFIER (field),
798 DECL_SIZE_UNIT (field), rli->offset);
0645ba8f
MM
799}
800
b8089d8d 801#if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
4977bab6 802/* A bitfield of SIZE with a required access alignment of ALIGN is allocated
272d0bee 803 at BYTE_OFFSET / BIT_OFFSET. Return nonzero if the field would span more
4977bab6
ZW
804 units of alignment than the underlying TYPE. */
805static int
46c5ad27
AJ
806excess_unit_span (HOST_WIDE_INT byte_offset, HOST_WIDE_INT bit_offset,
807 HOST_WIDE_INT size, HOST_WIDE_INT align, tree type)
4977bab6
ZW
808{
809 /* Note that the calculation of OFFSET might overflow; we calculate it so
810 that we still get the right result as long as ALIGN is a power of two. */
811 unsigned HOST_WIDE_INT offset = byte_offset * BITS_PER_UNIT + bit_offset;
812
813 offset = offset % align;
814 return ((offset + size + align - 1) / align
815 > ((unsigned HOST_WIDE_INT) tree_low_cst (TYPE_SIZE (type), 1)
816 / align));
817}
b8089d8d 818#endif
4977bab6 819
0645ba8f
MM
820/* RLI contains information about the layout of a RECORD_TYPE. FIELD
821 is a FIELD_DECL to be added after those fields already present in
822 T. (FIELD is not actually added to the TYPE_FIELDS list here;
823 callers that desire that behavior must manually perform that step.) */
824
825void
46c5ad27 826place_field (record_layout_info rli, tree field)
0645ba8f
MM
827{
828 /* The alignment required for FIELD. */
829 unsigned int desired_align;
830 /* The alignment FIELD would have if we just dropped it into the
831 record as it presently stands. */
832 unsigned int known_align;
833 unsigned int actual_align;
834 /* The type of this field. */
835 tree type = TREE_TYPE (field);
836
dbe91deb 837 gcc_assert (TREE_CODE (field) != ERROR_MARK);
0645ba8f
MM
838
839 /* If FIELD is static, then treat it like a separate variable, not
840 really like a structure field. If it is a FUNCTION_DECL, it's a
841 method. In both cases, all we do is lay out the decl, and we do
842 it *after* the record is laid out. */
843 if (TREE_CODE (field) == VAR_DECL)
844 {
845 rli->pending_statics = tree_cons (NULL_TREE, field,
846 rli->pending_statics);
847 return;
848 }
849
850 /* Enumerators and enum types which are local to this class need not
851 be laid out. Likewise for initialized constant fields. */
852 else if (TREE_CODE (field) != FIELD_DECL)
853 return;
854
855 /* Unions are laid out very differently than records, so split
856 that code off to another function. */
857 else if (TREE_CODE (rli->t) != RECORD_TYPE)
858 {
859 place_union_field (rli, field);
860 return;
861 }
862
0ac11108 863 else if (TREE_CODE (type) == ERROR_MARK)
9dfb66b9
CD
864 {
865 /* Place this field at the current allocation position, so we
866 maintain monotonicity. */
867 DECL_FIELD_OFFSET (field) = rli->offset;
868 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
869 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
870 return;
871 }
872
0645ba8f
MM
873 /* Work out the known alignment so far. Note that A & (-A) is the
874 value of the least-significant bit in A that is one. */
875 if (! integer_zerop (rli->bitpos))
876 known_align = (tree_low_cst (rli->bitpos, 1)
877 & - tree_low_cst (rli->bitpos, 1));
878 else if (integer_zerop (rli->offset))
cbbaf4ae 879 known_align = 0;
0645ba8f
MM
880 else if (host_integerp (rli->offset, 1))
881 known_align = (BITS_PER_UNIT
882 * (tree_low_cst (rli->offset, 1)
883 & - tree_low_cst (rli->offset, 1)));
884 else
885 known_align = rli->offset_align;
46c5ad27 886
0645ba8f 887 desired_align = update_alignment_for_field (rli, field, known_align);
cbbaf4ae
R
888 if (known_align == 0)
889 known_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
0645ba8f 890
9328904c
MM
891 if (warn_packed && DECL_PACKED (field))
892 {
78d55cc8 893 if (known_align >= TYPE_ALIGN (type))
3c12fcc2 894 {
9328904c 895 if (TYPE_ALIGN (type) > desired_align)
3c12fcc2 896 {
9328904c 897 if (STRICT_ALIGNMENT)
dee15844
JM
898 warning (OPT_Wattributes, "packed attribute causes "
899 "inefficient alignment for %q+D", field);
9328904c 900 else
dee15844
JM
901 warning (OPT_Wattributes, "packed attribute is "
902 "unnecessary for %q+D", field);
3c12fcc2 903 }
3c12fcc2 904 }
9328904c
MM
905 else
906 rli->packed_maybe_necessary = 1;
907 }
7306ed3f 908
9328904c 909 /* Does this field automatically have alignment it needs by virtue
0ac11108
EC
910 of the fields that precede it and the record's own alignment?
911 We already align ms_struct fields, so don't re-align them. */
912 if (known_align < desired_align
913 && !targetm.ms_bitfield_layout_p (rli->t))
9328904c
MM
914 {
915 /* No, we need to skip space before this field.
916 Bump the cumulative size to multiple of field alignment. */
7306ed3f 917
dee15844 918 warning (OPT_Wpadded, "padding struct to align %q+D", field);
3c12fcc2 919
770ae6cc
RK
920 /* If the alignment is still within offset_align, just align
921 the bit position. */
922 if (desired_align < rli->offset_align)
923 rli->bitpos = round_up (rli->bitpos, desired_align);
9328904c
MM
924 else
925 {
770ae6cc
RK
926 /* First adjust OFFSET by the partial bits, then align. */
927 rli->offset
928 = size_binop (PLUS_EXPR, rli->offset,
455f19cb
MM
929 fold_convert (sizetype,
930 size_binop (CEIL_DIV_EXPR, rli->bitpos,
931 bitsize_unit_node)));
770ae6cc
RK
932 rli->bitpos = bitsize_zero_node;
933
934 rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
7306ed3f 935 }
770ae6cc 936
b1254b72
RK
937 if (! TREE_CONSTANT (rli->offset))
938 rli->offset_align = desired_align;
939
9328904c 940 }
7306ed3f 941
770ae6cc
RK
942 /* Handle compatibility with PCC. Note that if the record has any
943 variable-sized fields, we need not worry about compatibility. */
7306ed3f 944#ifdef PCC_BITFIELD_TYPE_MATTERS
9328904c 945 if (PCC_BITFIELD_TYPE_MATTERS
245f1bfa 946 && ! targetm.ms_bitfield_layout_p (rli->t)
9328904c
MM
947 && TREE_CODE (field) == FIELD_DECL
948 && type != error_mark_node
770ae6cc
RK
949 && DECL_BIT_FIELD (field)
950 && ! DECL_PACKED (field)
9328904c 951 && maximum_field_alignment == 0
770ae6cc
RK
952 && ! integer_zerop (DECL_SIZE (field))
953 && host_integerp (DECL_SIZE (field), 1)
954 && host_integerp (rli->offset, 1)
955 && host_integerp (TYPE_SIZE (type), 1))
9328904c
MM
956 {
957 unsigned int type_align = TYPE_ALIGN (type);
770ae6cc
RK
958 tree dsize = DECL_SIZE (field);
959 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
960 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
961 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
9328904c 962
ad9335eb
JJ
963#ifdef ADJUST_FIELD_ALIGN
964 if (! TYPE_USER_ALIGN (type))
965 type_align = ADJUST_FIELD_ALIGN (field, type_align);
966#endif
967
9328904c
MM
968 /* A bit field may not span more units of alignment of its type
969 than its type itself. Advance to next boundary if necessary. */
4977bab6 970 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
770ae6cc 971 rli->bitpos = round_up (rli->bitpos, type_align);
daf06049 972
0645ba8f 973 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
9328904c 974 }
7306ed3f
JW
975#endif
976
7306ed3f 977#ifdef BITFIELD_NBYTES_LIMITED
9328904c 978 if (BITFIELD_NBYTES_LIMITED
245f1bfa 979 && ! targetm.ms_bitfield_layout_p (rli->t)
9328904c
MM
980 && TREE_CODE (field) == FIELD_DECL
981 && type != error_mark_node
982 && DECL_BIT_FIELD_TYPE (field)
770ae6cc
RK
983 && ! DECL_PACKED (field)
984 && ! integer_zerop (DECL_SIZE (field))
985 && host_integerp (DECL_SIZE (field), 1)
163d3408 986 && host_integerp (rli->offset, 1)
770ae6cc 987 && host_integerp (TYPE_SIZE (type), 1))
9328904c
MM
988 {
989 unsigned int type_align = TYPE_ALIGN (type);
770ae6cc
RK
990 tree dsize = DECL_SIZE (field);
991 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
992 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
993 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
e2301a83 994
ad9335eb
JJ
995#ifdef ADJUST_FIELD_ALIGN
996 if (! TYPE_USER_ALIGN (type))
997 type_align = ADJUST_FIELD_ALIGN (field, type_align);
998#endif
999
9328904c
MM
1000 if (maximum_field_alignment != 0)
1001 type_align = MIN (type_align, maximum_field_alignment);
1002 /* ??? This test is opposite the test in the containing if
1003 statement, so this code is unreachable currently. */
1004 else if (DECL_PACKED (field))
1005 type_align = MIN (type_align, BITS_PER_UNIT);
1006
1007 /* A bit field may not span the unit of alignment of its type.
1008 Advance to next boundary if necessary. */
4977bab6 1009 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
770ae6cc 1010 rli->bitpos = round_up (rli->bitpos, type_align);
daf06049 1011
0645ba8f 1012 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
9328904c 1013 }
7306ed3f
JW
1014#endif
1015
e4850f36
DR
1016 /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.
1017 A subtlety:
1018 When a bit field is inserted into a packed record, the whole
1019 size of the underlying type is used by one or more same-size
4977bab6 1020 adjacent bitfields. (That is, if its long:3, 32 bits is
e4850f36
DR
1021 used in the record, and any additional adjacent long bitfields are
1022 packed into the same chunk of 32 bits. However, if the size
1023 changes, a new field of that size is allocated.) In an unpacked
14b493d6 1024 record, this is the same as using alignment, but not equivalent
4977bab6 1025 when packing.
e4850f36 1026
14b493d6 1027 Note: for compatibility, we use the type size, not the type alignment
e4850f36
DR
1028 to determine alignment, since that matches the documentation */
1029
0ac11108 1030 if (targetm.ms_bitfield_layout_p (rli->t))
f913c102 1031 {
e4850f36 1032 tree prev_saved = rli->prev_field;
72aeff7c 1033 tree prev_type = prev_saved ? DECL_BIT_FIELD_TYPE (prev_saved) : NULL;
f913c102 1034
0ac11108
EC
1035 /* This is a bitfield if it exists. */
1036 if (rli->prev_field)
e4850f36
DR
1037 {
1038 /* If both are bitfields, nonzero, and the same size, this is
1039 the middle of a run. Zero declared size fields are special
1040 and handled as "end of run". (Note: it's nonzero declared
1041 size, but equal type sizes!) (Since we know that both
1042 the current and previous fields are bitfields by the
1043 time we check it, DECL_SIZE must be present for both.) */
1044 if (DECL_BIT_FIELD_TYPE (field)
1045 && !integer_zerop (DECL_SIZE (field))
1046 && !integer_zerop (DECL_SIZE (rli->prev_field))
0384674e
RK
1047 && host_integerp (DECL_SIZE (rli->prev_field), 0)
1048 && host_integerp (TYPE_SIZE (type), 0)
72aeff7c 1049 && simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (prev_type)))
e4850f36
DR
1050 {
1051 /* We're in the middle of a run of equal type size fields; make
1052 sure we realign if we run out of bits. (Not decl size,
1053 type size!) */
0ac11108 1054 HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 1);
e4850f36
DR
1055
1056 if (rli->remaining_in_alignment < bitsize)
1057 {
72aeff7c
KK
1058 HOST_WIDE_INT typesize = tree_low_cst (TYPE_SIZE (type), 1);
1059
0ac11108 1060 /* out of bits; bump up to next 'word'. */
0ac11108 1061 rli->bitpos
72aeff7c
KK
1062 = size_binop (PLUS_EXPR, rli->bitpos,
1063 bitsize_int (rli->remaining_in_alignment));
0ac11108 1064 rli->prev_field = field;
72aeff7c
KK
1065 if (typesize < bitsize)
1066 rli->remaining_in_alignment = 0;
1067 else
1068 rli->remaining_in_alignment = typesize - bitsize;
e4850f36 1069 }
72aeff7c
KK
1070 else
1071 rli->remaining_in_alignment -= bitsize;
e4850f36
DR
1072 }
1073 else
1074 {
4977bab6
ZW
1075 /* End of a run: if leaving a run of bitfields of the same type
1076 size, we have to "use up" the rest of the bits of the type
e4850f36
DR
1077 size.
1078
1079 Compute the new position as the sum of the size for the prior
1080 type and where we first started working on that type.
1081 Note: since the beginning of the field was aligned then
1082 of course the end will be too. No round needed. */
1083
f7eb0dcd 1084 if (!integer_zerop (DECL_SIZE (rli->prev_field)))
e4850f36 1085 {
0ac11108
EC
1086 rli->bitpos
1087 = size_binop (PLUS_EXPR, rli->bitpos,
1088 bitsize_int (rli->remaining_in_alignment));
e4850f36
DR
1089 }
1090 else
0384674e
RK
1091 /* We "use up" size zero fields; the code below should behave
1092 as if the prior field was not a bitfield. */
1093 prev_saved = NULL;
e4850f36 1094
4977bab6 1095 /* Cause a new bitfield to be captured, either this time (if
991b6592 1096 currently a bitfield) or next time we see one. */
e4850f36 1097 if (!DECL_BIT_FIELD_TYPE(field)
f7eb0dcd 1098 || integer_zerop (DECL_SIZE (field)))
0384674e 1099 rli->prev_field = NULL;
e4850f36 1100 }
0384674e 1101
e4850f36
DR
1102 normalize_rli (rli);
1103 }
1104
1105 /* If we're starting a new run of same size type bitfields
1106 (or a run of non-bitfields), set up the "first of the run"
4977bab6 1107 fields.
e4850f36
DR
1108
1109 That is, if the current field is not a bitfield, or if there
1110 was a prior bitfield the type sizes differ, or if there wasn't
1111 a prior bitfield the size of the current field is nonzero.
1112
1113 Note: we must be sure to test ONLY the type size if there was
1114 a prior bitfield and ONLY for the current field being zero if
1115 there wasn't. */
1116
1117 if (!DECL_BIT_FIELD_TYPE (field)
f7eb0dcd 1118 || (prev_saved != NULL
72aeff7c 1119 ? !simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (prev_type))
0384674e 1120 : !integer_zerop (DECL_SIZE (field)) ))
e4850f36 1121 {
0384674e
RK
1122 /* Never smaller than a byte for compatibility. */
1123 unsigned int type_align = BITS_PER_UNIT;
e4850f36 1124
4977bab6 1125 /* (When not a bitfield), we could be seeing a flex array (with
e4850f36 1126 no DECL_SIZE). Since we won't be using remaining_in_alignment
4977bab6 1127 until we see a bitfield (and come by here again) we just skip
e4850f36 1128 calculating it. */
0384674e
RK
1129 if (DECL_SIZE (field) != NULL
1130 && host_integerp (TYPE_SIZE (TREE_TYPE (field)), 0)
1131 && host_integerp (DECL_SIZE (field), 0))
72aeff7c
KK
1132 {
1133 HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 1);
1134 HOST_WIDE_INT typesize
1135 = tree_low_cst (TYPE_SIZE (TREE_TYPE (field)), 1);
1136
1137 if (typesize < bitsize)
1138 rli->remaining_in_alignment = 0;
1139 else
1140 rli->remaining_in_alignment = typesize - bitsize;
1141 }
e4850f36 1142
991b6592 1143 /* Now align (conventionally) for the new type. */
0ac11108 1144 type_align = TYPE_ALIGN (TREE_TYPE (field));
f913c102 1145
e4850f36
DR
1146 if (maximum_field_alignment != 0)
1147 type_align = MIN (type_align, maximum_field_alignment);
f913c102 1148
e4850f36 1149 rli->bitpos = round_up (rli->bitpos, type_align);
0384674e 1150
e4850f36 1151 /* If we really aligned, don't allow subsequent bitfields
991b6592 1152 to undo that. */
e4850f36
DR
1153 rli->prev_field = NULL;
1154 }
f913c102
AO
1155 }
1156
770ae6cc
RK
1157 /* Offset so far becomes the position of this field after normalizing. */
1158 normalize_rli (rli);
1159 DECL_FIELD_OFFSET (field) = rli->offset;
1160 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
2f5c7f45 1161 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
770ae6cc
RK
1162
1163 /* If this field ended up more aligned than we thought it would be (we
1164 approximate this by seeing if its position changed), lay out the field
1165 again; perhaps we can use an integral mode for it now. */
4b6bf620 1166 if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
770ae6cc
RK
1167 actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1168 & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
4b6bf620 1169 else if (integer_zerop (DECL_FIELD_OFFSET (field)))
cbbaf4ae 1170 actual_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
770ae6cc
RK
1171 else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
1172 actual_align = (BITS_PER_UNIT
1173 * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1174 & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
9328904c 1175 else
770ae6cc 1176 actual_align = DECL_OFFSET_ALIGN (field);
cbbaf4ae
R
1177 /* ACTUAL_ALIGN is still the actual alignment *within the record* .
1178 store / extract bit field operations will check the alignment of the
1179 record against the mode of bit fields. */
770ae6cc
RK
1180
1181 if (known_align != actual_align)
1182 layout_decl (field, actual_align);
1183
0ac11108
EC
1184 if (rli->prev_field == NULL && DECL_BIT_FIELD_TYPE (field))
1185 rli->prev_field = field;
f913c102 1186
770ae6cc
RK
1187 /* Now add size of this field to the size of the record. If the size is
1188 not constant, treat the field as being a multiple of bytes and just
1189 adjust the offset, resetting the bit position. Otherwise, apportion the
1190 size amongst the bit position and offset. First handle the case of an
1191 unspecified size, which can happen when we have an invalid nested struct
1192 definition, such as struct j { struct j { int i; } }. The error message
1193 is printed in finish_struct. */
1194 if (DECL_SIZE (field) == 0)
1195 /* Do nothing. */;
292f30c5 1196 else if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST
455f14dd 1197 || TREE_OVERFLOW (DECL_SIZE (field)))
9328904c 1198 {
770ae6cc
RK
1199 rli->offset
1200 = size_binop (PLUS_EXPR, rli->offset,
455f19cb
MM
1201 fold_convert (sizetype,
1202 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1203 bitsize_unit_node)));
770ae6cc
RK
1204 rli->offset
1205 = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1206 rli->bitpos = bitsize_zero_node;
3923e410 1207 rli->offset_align = MIN (rli->offset_align, desired_align);
9328904c 1208 }
0ac11108
EC
1209 else if (targetm.ms_bitfield_layout_p (rli->t))
1210 {
1211 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1212
1213 /* If we ended a bitfield before the full length of the type then
1214 pad the struct out to the full length of the last type. */
1215 if ((TREE_CHAIN (field) == NULL
1216 || TREE_CODE (TREE_CHAIN (field)) != FIELD_DECL)
1217 && DECL_BIT_FIELD_TYPE (field)
1218 && !integer_zerop (DECL_SIZE (field)))
1219 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos,
1220 bitsize_int (rli->remaining_in_alignment));
1221
1222 normalize_rli (rli);
1223 }
9328904c
MM
1224 else
1225 {
770ae6cc
RK
1226 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1227 normalize_rli (rli);
7306ed3f 1228 }
9328904c 1229}
7306ed3f 1230
9328904c
MM
1231/* Assuming that all the fields have been laid out, this function uses
1232 RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
14b493d6 1233 indicated by RLI. */
7306ed3f 1234
9328904c 1235static void
46c5ad27 1236finalize_record_size (record_layout_info rli)
9328904c 1237{
770ae6cc
RK
1238 tree unpadded_size, unpadded_size_unit;
1239
65e14bf5
RK
1240 /* Now we want just byte and bit offsets, so set the offset alignment
1241 to be a byte and then normalize. */
1242 rli->offset_align = BITS_PER_UNIT;
1243 normalize_rli (rli);
7306ed3f
JW
1244
1245 /* Determine the desired alignment. */
1246#ifdef ROUND_TYPE_ALIGN
9328904c 1247 TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
b451555a 1248 rli->record_align);
7306ed3f 1249#else
9328904c 1250 TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
7306ed3f
JW
1251#endif
1252
65e14bf5
RK
1253 /* Compute the size so far. Be sure to allow for extra bits in the
1254 size in bytes. We have guaranteed above that it will be no more
1255 than a single byte. */
1256 unpadded_size = rli_size_so_far (rli);
1257 unpadded_size_unit = rli_size_unit_so_far (rli);
1258 if (! integer_zerop (rli->bitpos))
1259 unpadded_size_unit
1260 = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
770ae6cc 1261
f9da5064 1262 /* Round the size up to be a multiple of the required alignment. */
770ae6cc 1263 TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
a4e9ffe5
RK
1264 TYPE_SIZE_UNIT (rli->t)
1265 = round_up (unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
729a2125 1266
3176a0c2 1267 if (TREE_CONSTANT (unpadded_size)
770ae6cc 1268 && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
3176a0c2 1269 warning (OPT_Wpadded, "padding struct size to alignment boundary");
786de7eb 1270
770ae6cc
RK
1271 if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1272 && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1273 && TREE_CONSTANT (unpadded_size))
3c12fcc2
GM
1274 {
1275 tree unpacked_size;
729a2125 1276
3c12fcc2 1277#ifdef ROUND_TYPE_ALIGN
9328904c
MM
1278 rli->unpacked_align
1279 = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
3c12fcc2 1280#else
9328904c 1281 rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
3c12fcc2 1282#endif
770ae6cc 1283
9328904c 1284 unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
9328904c 1285 if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
3c12fcc2 1286 {
770ae6cc
RK
1287 TYPE_PACKED (rli->t) = 0;
1288
9328904c 1289 if (TYPE_NAME (rli->t))
3c12fcc2 1290 {
63ad61ed 1291 const char *name;
729a2125 1292
9328904c
MM
1293 if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1294 name = IDENTIFIER_POINTER (TYPE_NAME (rli->t));
3c12fcc2 1295 else
9328904c 1296 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
770ae6cc 1297
3c12fcc2 1298 if (STRICT_ALIGNMENT)
3176a0c2 1299 warning (OPT_Wpacked, "packed attribute causes inefficient "
971801ff 1300 "alignment for %qs", name);
3c12fcc2 1301 else
3176a0c2 1302 warning (OPT_Wpacked,
5c498b10 1303 "packed attribute is unnecessary for %qs", name);
3c12fcc2
GM
1304 }
1305 else
1306 {
1307 if (STRICT_ALIGNMENT)
3176a0c2 1308 warning (OPT_Wpacked,
5c498b10 1309 "packed attribute causes inefficient alignment");
3c12fcc2 1310 else
3176a0c2 1311 warning (OPT_Wpacked, "packed attribute is unnecessary");
3c12fcc2
GM
1312 }
1313 }
3c12fcc2 1314 }
9328904c
MM
1315}
1316
1317/* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE). */
7306ed3f 1318
65e14bf5 1319void
46c5ad27 1320compute_record_mode (tree type)
9328904c 1321{
770ae6cc
RK
1322 tree field;
1323 enum machine_mode mode = VOIDmode;
1324
9328904c
MM
1325 /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1326 However, if possible, we use a mode that fits in a register
1327 instead, in order to allow for better optimization down the
1328 line. */
1329 TYPE_MODE (type) = BLKmode;
9328904c 1330
770ae6cc
RK
1331 if (! host_integerp (TYPE_SIZE (type), 1))
1332 return;
9328904c 1333
770ae6cc
RK
1334 /* A record which has any BLKmode members must itself be
1335 BLKmode; it can't go in a register. Unless the member is
1336 BLKmode only because it isn't aligned. */
1337 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1338 {
770ae6cc
RK
1339 if (TREE_CODE (field) != FIELD_DECL)
1340 continue;
9328904c 1341
770ae6cc
RK
1342 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1343 || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
7a06d606
RK
1344 && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field))
1345 && !(TYPE_SIZE (TREE_TYPE (field)) != 0
1346 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))))
770ae6cc 1347 || ! host_integerp (bit_position (field), 1)
6a9f6727 1348 || DECL_SIZE (field) == 0
770ae6cc
RK
1349 || ! host_integerp (DECL_SIZE (field), 1))
1350 return;
1351
770ae6cc
RK
1352 /* If this field is the whole struct, remember its mode so
1353 that, say, we can put a double in a class into a DF
a8ca7756
JW
1354 register instead of forcing it to live in the stack. */
1355 if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
770ae6cc 1356 mode = DECL_MODE (field);
9328904c 1357
31a02448 1358#ifdef MEMBER_TYPE_FORCES_BLK
770ae6cc
RK
1359 /* With some targets, eg. c4x, it is sub-optimal
1360 to access an aligned BLKmode structure as a scalar. */
0d7839da 1361
182e515e 1362 if (MEMBER_TYPE_FORCES_BLK (field, mode))
770ae6cc 1363 return;
31a02448 1364#endif /* MEMBER_TYPE_FORCES_BLK */
770ae6cc 1365 }
9328904c 1366
897f610b
RS
1367 /* If we only have one real field; use its mode if that mode's size
1368 matches the type's size. This only applies to RECORD_TYPE. This
1369 does not apply to unions. */
1370 if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode
f439f9a5
R
1371 && host_integerp (TYPE_SIZE (type), 1)
1372 && GET_MODE_BITSIZE (mode) == TREE_INT_CST_LOW (TYPE_SIZE (type)))
770ae6cc 1373 TYPE_MODE (type) = mode;
f439f9a5
R
1374 else
1375 TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
770ae6cc
RK
1376
1377 /* If structure's known alignment is less than what the scalar
1378 mode would need, and it matters, then stick with BLKmode. */
1379 if (TYPE_MODE (type) != BLKmode
1380 && STRICT_ALIGNMENT
1381 && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1382 || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1383 {
1384 /* If this is the only reason this type is BLKmode, then
1385 don't force containing types to be BLKmode. */
1386 TYPE_NO_FORCE_BLK (type) = 1;
1387 TYPE_MODE (type) = BLKmode;
9328904c 1388 }
7306ed3f 1389}
9328904c
MM
1390
1391/* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1392 out. */
1393
1394static void
46c5ad27 1395finalize_type_size (tree type)
9328904c
MM
1396{
1397 /* Normally, use the alignment corresponding to the mode chosen.
1398 However, where strict alignment is not required, avoid
1399 over-aligning structures, since most compilers do not do this
490272b4 1400 alignment. */
9328904c
MM
1401
1402 if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
490272b4 1403 && (STRICT_ALIGNMENT
9328904c
MM
1404 || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1405 && TREE_CODE (type) != QUAL_UNION_TYPE
1406 && TREE_CODE (type) != ARRAY_TYPE)))
11cf4d18 1407 {
490272b4
RH
1408 unsigned mode_align = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1409
1410 /* Don't override a larger alignment requirement coming from a user
1411 alignment of one of the fields. */
1412 if (mode_align >= TYPE_ALIGN (type))
1413 {
1414 TYPE_ALIGN (type) = mode_align;
1415 TYPE_USER_ALIGN (type) = 0;
1416 }
11cf4d18 1417 }
9328904c
MM
1418
1419 /* Do machine-dependent extra alignment. */
1420#ifdef ROUND_TYPE_ALIGN
1421 TYPE_ALIGN (type)
1422 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1423#endif
1424
9328904c 1425 /* If we failed to find a simple way to calculate the unit size
770ae6cc 1426 of the type, find it by division. */
9328904c
MM
1427 if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1428 /* TYPE_SIZE (type) is computed in bitsizetype. After the division, the
1429 result will fit in sizetype. We will get more efficient code using
1430 sizetype, so we force a conversion. */
1431 TYPE_SIZE_UNIT (type)
455f19cb
MM
1432 = fold_convert (sizetype,
1433 size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1434 bitsize_unit_node));
9328904c 1435
770ae6cc
RK
1436 if (TYPE_SIZE (type) != 0)
1437 {
770ae6cc 1438 TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
a4e9ffe5
RK
1439 TYPE_SIZE_UNIT (type) = round_up (TYPE_SIZE_UNIT (type),
1440 TYPE_ALIGN_UNIT (type));
770ae6cc
RK
1441 }
1442
1443 /* Evaluate nonconstant sizes only once, either now or as soon as safe. */
1444 if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1445 TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
9328904c
MM
1446 if (TYPE_SIZE_UNIT (type) != 0
1447 && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1448 TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1449
1450 /* Also layout any other variants of the type. */
1451 if (TYPE_NEXT_VARIANT (type)
1452 || type != TYPE_MAIN_VARIANT (type))
1453 {
1454 tree variant;
1455 /* Record layout info of this variant. */
1456 tree size = TYPE_SIZE (type);
1457 tree size_unit = TYPE_SIZE_UNIT (type);
1458 unsigned int align = TYPE_ALIGN (type);
11cf4d18 1459 unsigned int user_align = TYPE_USER_ALIGN (type);
9328904c
MM
1460 enum machine_mode mode = TYPE_MODE (type);
1461
1462 /* Copy it into all variants. */
1463 for (variant = TYPE_MAIN_VARIANT (type);
1464 variant != 0;
1465 variant = TYPE_NEXT_VARIANT (variant))
1466 {
1467 TYPE_SIZE (variant) = size;
1468 TYPE_SIZE_UNIT (variant) = size_unit;
1469 TYPE_ALIGN (variant) = align;
11cf4d18 1470 TYPE_USER_ALIGN (variant) = user_align;
9328904c
MM
1471 TYPE_MODE (variant) = mode;
1472 }
1473 }
1474}
1475
1476/* Do all of the work required to layout the type indicated by RLI,
1477 once the fields have been laid out. This function will call `free'
17bbb839
MM
1478 for RLI, unless FREE_P is false. Passing a value other than false
1479 for FREE_P is bad practice; this option only exists to support the
1480 G++ 3.2 ABI. */
9328904c
MM
1481
1482void
46c5ad27 1483finish_record_layout (record_layout_info rli, int free_p)
9328904c 1484{
1937f939
JM
1485 tree variant;
1486
770ae6cc
RK
1487 /* Compute the final size. */
1488 finalize_record_size (rli);
1489
1490 /* Compute the TYPE_MODE for the record. */
1491 compute_record_mode (rli->t);
cc9d4a85 1492
8d8238b6
JM
1493 /* Perform any last tweaks to the TYPE_SIZE, etc. */
1494 finalize_type_size (rli->t);
1495
1937f939
JM
1496 /* Propagate TYPE_PACKED to variants. With C++ templates,
1497 handle_packed_attribute is too early to do this. */
1498 for (variant = TYPE_NEXT_VARIANT (rli->t); variant;
1499 variant = TYPE_NEXT_VARIANT (variant))
1500 TYPE_PACKED (variant) = TYPE_PACKED (rli->t);
1501
9328904c
MM
1502 /* Lay out any static members. This is done now because their type
1503 may use the record's type. */
1504 while (rli->pending_statics)
1505 {
1506 layout_decl (TREE_VALUE (rli->pending_statics), 0);
1507 rli->pending_statics = TREE_CHAIN (rli->pending_statics);
1508 }
cc9d4a85 1509
9328904c 1510 /* Clean up. */
17bbb839
MM
1511 if (free_p)
1512 free (rli);
9328904c 1513}
7306ed3f 1514\f
4977bab6
ZW
1515
1516/* Finish processing a builtin RECORD_TYPE type TYPE. It's name is
1517 NAME, its fields are chained in reverse on FIELDS.
1518
1519 If ALIGN_TYPE is non-null, it is given the same alignment as
1520 ALIGN_TYPE. */
1521
1522void
46c5ad27
AJ
1523finish_builtin_struct (tree type, const char *name, tree fields,
1524 tree align_type)
4977bab6
ZW
1525{
1526 tree tail, next;
1527
1528 for (tail = NULL_TREE; fields; tail = fields, fields = next)
1529 {
1530 DECL_FIELD_CONTEXT (fields) = type;
1531 next = TREE_CHAIN (fields);
1532 TREE_CHAIN (fields) = tail;
1533 }
1534 TYPE_FIELDS (type) = tail;
1535
1536 if (align_type)
1537 {
1538 TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
1539 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (align_type);
1540 }
1541
1542 layout_type (type);
1543#if 0 /* not yet, should get fixed properly later */
1544 TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
1545#else
1546 TYPE_NAME (type) = build_decl (TYPE_DECL, get_identifier (name), type);
1547#endif
1548 TYPE_STUB_DECL (type) = TYPE_NAME (type);
1549 layout_decl (TYPE_NAME (type), 0);
1550}
1551
7306ed3f
JW
1552/* Calculate the mode, size, and alignment for TYPE.
1553 For an array type, calculate the element separation as well.
1554 Record TYPE on the chain of permanent or temporary types
1555 so that dbxout will find out about it.
1556
1557 TYPE_SIZE of a type is nonzero if the type has been laid out already.
1558 layout_type does nothing on such a type.
1559
1560 If the type is incomplete, its TYPE_SIZE remains zero. */
1561
1562void
46c5ad27 1563layout_type (tree type)
7306ed3f 1564{
41374e13 1565 gcc_assert (type);
7306ed3f 1566
6de9cd9a
DN
1567 if (type == error_mark_node)
1568 return;
1569
7306ed3f
JW
1570 /* Do nothing if type has been laid out before. */
1571 if (TYPE_SIZE (type))
1572 return;
1573
7306ed3f
JW
1574 switch (TREE_CODE (type))
1575 {
1576 case LANG_TYPE:
1577 /* This kind of type is the responsibility
9faa82d8 1578 of the language-specific code. */
41374e13 1579 gcc_unreachable ();
7306ed3f 1580
2d76cb1a 1581 case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */
e9a25f70 1582 if (TYPE_PRECISION (type) == 0)
2d76cb1a 1583 TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */
d4b60170 1584
2d76cb1a 1585 /* ... fall through ... */
e9a25f70 1586
7306ed3f
JW
1587 case INTEGER_TYPE:
1588 case ENUMERAL_TYPE:
e2a77f99
RK
1589 if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
1590 && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
8df83eae 1591 TYPE_UNSIGNED (type) = 1;
7306ed3f 1592
5e9bec99
RK
1593 TYPE_MODE (type) = smallest_mode_for_size (TYPE_PRECISION (type),
1594 MODE_INT);
06ceef4e 1595 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
ead17059 1596 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
7306ed3f
JW
1597 break;
1598
1599 case REAL_TYPE:
1600 TYPE_MODE (type) = mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0);
06ceef4e 1601 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
ead17059 1602 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
7306ed3f
JW
1603 break;
1604
1605 case COMPLEX_TYPE:
8df83eae 1606 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
7306ed3f
JW
1607 TYPE_MODE (type)
1608 = mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
8df83eae
RK
1609 (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE
1610 ? MODE_COMPLEX_FLOAT : MODE_COMPLEX_INT),
7306ed3f 1611 0);
06ceef4e 1612 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
ead17059 1613 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
7306ed3f
JW
1614 break;
1615
0b4565c9 1616 case VECTOR_TYPE:
26277d41
PB
1617 {
1618 int nunits = TYPE_VECTOR_SUBPARTS (type);
26277d41
PB
1619 tree innertype = TREE_TYPE (type);
1620
41374e13 1621 gcc_assert (!(nunits & (nunits - 1)));
26277d41
PB
1622
1623 /* Find an appropriate mode for the vector type. */
1624 if (TYPE_MODE (type) == VOIDmode)
1625 {
1626 enum machine_mode innermode = TYPE_MODE (innertype);
1627 enum machine_mode mode;
1628
1629 /* First, look for a supported vector type. */
3d8bf70f 1630 if (SCALAR_FLOAT_MODE_P (innermode))
26277d41
PB
1631 mode = MIN_MODE_VECTOR_FLOAT;
1632 else
1633 mode = MIN_MODE_VECTOR_INT;
1634
1635 for (; mode != VOIDmode ; mode = GET_MODE_WIDER_MODE (mode))
1636 if (GET_MODE_NUNITS (mode) == nunits
1637 && GET_MODE_INNER (mode) == innermode
f676971a 1638 && targetm.vector_mode_supported_p (mode))
26277d41
PB
1639 break;
1640
1641 /* For integers, try mapping it to a same-sized scalar mode. */
1642 if (mode == VOIDmode
1643 && GET_MODE_CLASS (innermode) == MODE_INT)
1644 mode = mode_for_size (nunits * GET_MODE_BITSIZE (innermode),
1645 MODE_INT, 0);
1646
1647 if (mode == VOIDmode || !have_regs_of_mode[mode])
1648 TYPE_MODE (type) = BLKmode;
1649 else
1650 TYPE_MODE (type) = mode;
1651 }
1652
1653 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
1654 TYPE_SIZE_UNIT (type) = int_const_binop (MULT_EXPR,
1655 TYPE_SIZE_UNIT (innertype),
000d8d44 1656 size_int (nunits), 0);
26277d41 1657 TYPE_SIZE (type) = int_const_binop (MULT_EXPR, TYPE_SIZE (innertype),
000d8d44 1658 bitsize_int (nunits), 0);
e4ca3dc3 1659
34bc6352 1660 /* Always naturally align vectors. This prevents ABI changes
e4ca3dc3
RH
1661 depending on whether or not native vector modes are supported. */
1662 TYPE_ALIGN (type) = tree_low_cst (TYPE_SIZE (type), 0);
26277d41
PB
1663 break;
1664 }
0b4565c9 1665
7306ed3f 1666 case VOID_TYPE:
770ae6cc 1667 /* This is an incomplete type and so doesn't have a size. */
7306ed3f 1668 TYPE_ALIGN (type) = 1;
11cf4d18 1669 TYPE_USER_ALIGN (type) = 0;
7306ed3f
JW
1670 TYPE_MODE (type) = VOIDmode;
1671 break;
1672
321cb743 1673 case OFFSET_TYPE:
06ceef4e 1674 TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
ead17059 1675 TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
25caaba8
R
1676 /* A pointer might be MODE_PARTIAL_INT,
1677 but ptrdiff_t must be integral. */
1678 TYPE_MODE (type) = mode_for_size (POINTER_SIZE, MODE_INT, 0);
321cb743
MT
1679 break;
1680
7306ed3f
JW
1681 case FUNCTION_TYPE:
1682 case METHOD_TYPE:
019dd4ec
RK
1683 /* It's hard to see what the mode and size of a function ought to
1684 be, but we do know the alignment is FUNCTION_BOUNDARY, so
1685 make it consistent with that. */
1686 TYPE_MODE (type) = mode_for_size (FUNCTION_BOUNDARY, MODE_INT, 0);
1687 TYPE_SIZE (type) = bitsize_int (FUNCTION_BOUNDARY);
1688 TYPE_SIZE_UNIT (type) = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
7306ed3f
JW
1689 break;
1690
1691 case POINTER_TYPE:
1692 case REFERENCE_TYPE:
b5d6a2ff 1693 {
b5d6a2ff 1694
4977bab6
ZW
1695 enum machine_mode mode = ((TREE_CODE (type) == REFERENCE_TYPE
1696 && reference_types_internal)
1697 ? Pmode : TYPE_MODE (type));
1698
1699 int nbits = GET_MODE_BITSIZE (mode);
1700
b5d6a2ff 1701 TYPE_SIZE (type) = bitsize_int (nbits);
4977bab6 1702 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
8df83eae 1703 TYPE_UNSIGNED (type) = 1;
b5d6a2ff
RK
1704 TYPE_PRECISION (type) = nbits;
1705 }
7306ed3f
JW
1706 break;
1707
1708 case ARRAY_TYPE:
1709 {
b3694847
SS
1710 tree index = TYPE_DOMAIN (type);
1711 tree element = TREE_TYPE (type);
7306ed3f
JW
1712
1713 build_pointer_type (element);
1714
1715 /* We need to know both bounds in order to compute the size. */
1716 if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
1717 && TYPE_SIZE (element))
1718 {
ad50bc8d
RH
1719 tree ub = TYPE_MAX_VALUE (index);
1720 tree lb = TYPE_MIN_VALUE (index);
e24ff973 1721 tree length;
74a4fbfc 1722 tree element_size;
e24ff973 1723
a2d53b28
RH
1724 /* The initial subtraction should happen in the original type so
1725 that (possible) negative values are handled appropriately. */
e24ff973 1726 length = size_binop (PLUS_EXPR, size_one_node,
455f19cb 1727 fold_convert (sizetype,
4845b383
KH
1728 fold_build2 (MINUS_EXPR,
1729 TREE_TYPE (lb),
1730 ub, lb)));
7306ed3f 1731
74a4fbfc
DB
1732 /* Special handling for arrays of bits (for Chill). */
1733 element_size = TYPE_SIZE (element);
382110c0
RK
1734 if (TYPE_PACKED (type) && INTEGRAL_TYPE_P (element)
1735 && (integer_zerop (TYPE_MAX_VALUE (element))
1736 || integer_onep (TYPE_MAX_VALUE (element)))
1737 && host_integerp (TYPE_MIN_VALUE (element), 1))
74a4fbfc 1738 {
d4b60170 1739 HOST_WIDE_INT maxvalue
382110c0 1740 = tree_low_cst (TYPE_MAX_VALUE (element), 1);
d4b60170 1741 HOST_WIDE_INT minvalue
382110c0 1742 = tree_low_cst (TYPE_MIN_VALUE (element), 1);
d4b60170 1743
74a4fbfc
DB
1744 if (maxvalue - minvalue == 1
1745 && (maxvalue == 1 || maxvalue == 0))
1746 element_size = integer_one_node;
1747 }
1748
0d3c8800
RK
1749 /* If neither bound is a constant and sizetype is signed, make
1750 sure the size is never negative. We should really do this
1751 if *either* bound is non-constant, but this is the best
1752 compromise between C and Ada. */
8df83eae 1753 if (!TYPE_UNSIGNED (sizetype)
0d3c8800
RK
1754 && TREE_CODE (TYPE_MIN_VALUE (index)) != INTEGER_CST
1755 && TREE_CODE (TYPE_MAX_VALUE (index)) != INTEGER_CST)
1756 length = size_binop (MAX_EXPR, length, size_zero_node);
1757
fed3cef0 1758 TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
0ac11108 1759 fold_convert (bitsizetype,
455f19cb 1760 length));
ead17059
RH
1761
1762 /* If we know the size of the element, calculate the total
1763 size directly, rather than do some division thing below.
1764 This optimization helps Fortran assumed-size arrays
1765 (where the size of the array is determined at runtime)
7771032e
DB
1766 substantially.
1767 Note that we can't do this in the case where the size of
1768 the elements is one bit since TYPE_SIZE_UNIT cannot be
1769 set correctly in that case. */
fed3cef0 1770 if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
d4b60170
RK
1771 TYPE_SIZE_UNIT (type)
1772 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
7306ed3f
JW
1773 }
1774
1775 /* Now round the alignment and size,
1776 using machine-dependent criteria if any. */
1777
1778#ifdef ROUND_TYPE_ALIGN
1779 TYPE_ALIGN (type)
1780 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
1781#else
1782 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1783#endif
06d40de8
DG
1784 if (!TYPE_SIZE (element))
1785 /* We don't know the size of the underlying element type, so
1786 our alignment calculations will be wrong, forcing us to
1787 fall back on structural equality. */
1788 SET_TYPE_STRUCTURAL_EQUALITY (type);
c163d21d 1789 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
7306ed3f
JW
1790 TYPE_MODE (type) = BLKmode;
1791 if (TYPE_SIZE (type) != 0
31a02448 1792#ifdef MEMBER_TYPE_FORCES_BLK
182e515e 1793 && ! MEMBER_TYPE_FORCES_BLK (type, VOIDmode)
31a02448 1794#endif
7306ed3f
JW
1795 /* BLKmode elements force BLKmode aggregate;
1796 else extract/store fields may lose. */
1797 && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
1798 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
1799 {
a1471322
RK
1800 /* One-element arrays get the component type's mode. */
1801 if (simple_cst_equal (TYPE_SIZE (type),
1802 TYPE_SIZE (TREE_TYPE (type))))
1803 TYPE_MODE (type) = TYPE_MODE (TREE_TYPE (type));
1804 else
1805 TYPE_MODE (type)
1806 = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
7306ed3f 1807
72c602fc
RK
1808 if (TYPE_MODE (type) != BLKmode
1809 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
b9d49351 1810 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
7306ed3f
JW
1811 {
1812 TYPE_NO_FORCE_BLK (type) = 1;
1813 TYPE_MODE (type) = BLKmode;
1814 }
7306ed3f 1815 }
b606b65c
OH
1816 /* When the element size is constant, check that it is at least as
1817 large as the element alignment. */
002a9071
SE
1818 if (TYPE_SIZE_UNIT (element)
1819 && TREE_CODE (TYPE_SIZE_UNIT (element)) == INTEGER_CST
b606b65c
OH
1820 /* If TYPE_SIZE_UNIT overflowed, then it is certainly larger than
1821 TYPE_ALIGN_UNIT. */
455f14dd 1822 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (element))
002a9071
SE
1823 && !integer_zerop (TYPE_SIZE_UNIT (element))
1824 && compare_tree_int (TYPE_SIZE_UNIT (element),
1825 TYPE_ALIGN_UNIT (element)) < 0)
1826 error ("alignment of array elements is greater than element size");
7306ed3f
JW
1827 break;
1828 }
1829
1830 case RECORD_TYPE:
cc9d4a85
MM
1831 case UNION_TYPE:
1832 case QUAL_UNION_TYPE:
9328904c
MM
1833 {
1834 tree field;
1835 record_layout_info rli;
1836
1837 /* Initialize the layout information. */
770ae6cc
RK
1838 rli = start_record_layout (type);
1839
cc9d4a85
MM
1840 /* If this is a QUAL_UNION_TYPE, we want to process the fields
1841 in the reverse order in building the COND_EXPR that denotes
1842 its size. We reverse them again later. */
1843 if (TREE_CODE (type) == QUAL_UNION_TYPE)
1844 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
770ae6cc
RK
1845
1846 /* Place all the fields. */
9328904c 1847 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
770ae6cc
RK
1848 place_field (rli, field);
1849
cc9d4a85
MM
1850 if (TREE_CODE (type) == QUAL_UNION_TYPE)
1851 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
770ae6cc 1852
e0cea8d9
RK
1853 if (lang_adjust_rli)
1854 (*lang_adjust_rli) (rli);
1855
9328904c 1856 /* Finish laying out the record. */
17bbb839 1857 finish_record_layout (rli, /*free_p=*/true);
9328904c 1858 }
7306ed3f
JW
1859 break;
1860
7306ed3f 1861 default:
41374e13 1862 gcc_unreachable ();
729a2125 1863 }
7306ed3f 1864
9328904c 1865 /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE. For
cc9d4a85
MM
1866 records and unions, finish_record_layout already called this
1867 function. */
786de7eb 1868 if (TREE_CODE (type) != RECORD_TYPE
cc9d4a85
MM
1869 && TREE_CODE (type) != UNION_TYPE
1870 && TREE_CODE (type) != QUAL_UNION_TYPE)
9328904c 1871 finalize_type_size (type);
7306ed3f 1872
dc5041ab
JJ
1873 /* If an alias set has been set for this aggregate when it was incomplete,
1874 force it into alias set 0.
1875 This is too conservative, but we cannot call record_component_aliases
1876 here because some frontends still change the aggregates after
1877 layout_type. */
1878 if (AGGREGATE_TYPE_P (type) && TYPE_ALIAS_SET_KNOWN_P (type))
1879 TYPE_ALIAS_SET (type) = 0;
7306ed3f
JW
1880}
1881\f
1882/* Create and return a type for signed integers of PRECISION bits. */
1883
1884tree
46c5ad27 1885make_signed_type (int precision)
7306ed3f 1886{
b3694847 1887 tree type = make_node (INTEGER_TYPE);
7306ed3f
JW
1888
1889 TYPE_PRECISION (type) = precision;
1890
fed3cef0 1891 fixup_signed_type (type);
7306ed3f
JW
1892 return type;
1893}
1894
1895/* Create and return a type for unsigned integers of PRECISION bits. */
1896
1897tree
46c5ad27 1898make_unsigned_type (int precision)
7306ed3f 1899{
b3694847 1900 tree type = make_node (INTEGER_TYPE);
7306ed3f
JW
1901
1902 TYPE_PRECISION (type) = precision;
1903
7306ed3f
JW
1904 fixup_unsigned_type (type);
1905 return type;
1906}
fed3cef0
RK
1907\f
1908/* Initialize sizetype and bitsizetype to a reasonable and temporary
1909 value to enable integer types to be created. */
1910
1911void
8c1d6d62 1912initialize_sizetypes (bool signed_p)
fed3cef0
RK
1913{
1914 tree t = make_node (INTEGER_TYPE);
a6a12bb9 1915 int precision = GET_MODE_BITSIZE (SImode);
fed3cef0 1916
fed3cef0
RK
1917 TYPE_MODE (t) = SImode;
1918 TYPE_ALIGN (t) = GET_MODE_ALIGNMENT (SImode);
11cf4d18 1919 TYPE_USER_ALIGN (t) = 0;
3224bead 1920 TYPE_IS_SIZETYPE (t) = 1;
8c1d6d62 1921 TYPE_UNSIGNED (t) = !signed_p;
a6a12bb9 1922 TYPE_SIZE (t) = build_int_cst (t, precision);
7d60be94 1923 TYPE_SIZE_UNIT (t) = build_int_cst (t, GET_MODE_SIZE (SImode));
a6a12bb9 1924 TYPE_PRECISION (t) = precision;
fed3cef0 1925
a6a12bb9
RS
1926 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE. */
1927 set_min_and_max_values_for_integral_type (t, precision, !signed_p);
fed3cef0 1928
fed3cef0 1929 sizetype = t;
8c1d6d62 1930 bitsizetype = build_distinct_type_copy (t);
fed3cef0 1931}
7306ed3f 1932
8c1d6d62
NS
1933/* Make sizetype a version of TYPE, and initialize *sizetype
1934 accordingly. We do this by overwriting the stub sizetype and
1935 bitsizetype nodes created by initialize_sizetypes. This makes sure
1936 that (a) anything stubby about them no longer exists, (b) any
1937 INTEGER_CSTs created with such a type, remain valid. */
f8dac6eb
R
1938
1939void
46c5ad27 1940set_sizetype (tree type)
f8dac6eb 1941{
d4b60170 1942 int oprecision = TYPE_PRECISION (type);
f8dac6eb 1943 /* The *bitsizetype types use a precision that avoids overflows when
d4b60170
RK
1944 calculating signed sizes / offsets in bits. However, when
1945 cross-compiling from a 32 bit to a 64 bit host, we are limited to 64 bit
1946 precision. */
30f421e5
JDA
1947 int precision = MIN (MIN (oprecision + BITS_PER_UNIT_LOG + 1,
1948 MAX_FIXED_MODE_SIZE),
d4b60170 1949 2 * HOST_BITS_PER_WIDE_INT);
ad41cc2a 1950 tree t;
fed3cef0 1951
41374e13 1952 gcc_assert (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (sizetype));
81b3411c 1953
8c1d6d62
NS
1954 t = build_distinct_type_copy (type);
1955 /* We do want to use sizetype's cache, as we will be replacing that
1956 type. */
1957 TYPE_CACHED_VALUES (t) = TYPE_CACHED_VALUES (sizetype);
1958 TYPE_CACHED_VALUES_P (t) = TYPE_CACHED_VALUES_P (sizetype);
1959 TREE_TYPE (TYPE_CACHED_VALUES (t)) = type;
1960 TYPE_UID (t) = TYPE_UID (sizetype);
1961 TYPE_IS_SIZETYPE (t) = 1;
0ac11108 1962
8c1d6d62
NS
1963 /* Replace our original stub sizetype. */
1964 memcpy (sizetype, t, tree_size (sizetype));
1965 TYPE_MAIN_VARIANT (sizetype) = sizetype;
0ac11108 1966
8c1d6d62
NS
1967 t = make_node (INTEGER_TYPE);
1968 TYPE_NAME (t) = get_identifier ("bit_size_type");
1969 /* We do want to use bitsizetype's cache, as we will be replacing that
1970 type. */
1971 TYPE_CACHED_VALUES (t) = TYPE_CACHED_VALUES (bitsizetype);
1972 TYPE_CACHED_VALUES_P (t) = TYPE_CACHED_VALUES_P (bitsizetype);
1973 TYPE_PRECISION (t) = precision;
1974 TYPE_UID (t) = TYPE_UID (bitsizetype);
1975 TYPE_IS_SIZETYPE (t) = 1;
4ecd8dc7 1976
8c1d6d62
NS
1977 /* Replace our original stub bitsizetype. */
1978 memcpy (bitsizetype, t, tree_size (bitsizetype));
4ecd8dc7 1979 TYPE_MAIN_VARIANT (bitsizetype) = bitsizetype;
0ac11108 1980
8df83eae 1981 if (TYPE_UNSIGNED (type))
896cced4 1982 {
8c1d6d62
NS
1983 fixup_unsigned_type (bitsizetype);
1984 ssizetype = build_distinct_type_copy (make_signed_type (oprecision));
1985 TYPE_IS_SIZETYPE (ssizetype) = 1;
1986 sbitsizetype = build_distinct_type_copy (make_signed_type (precision));
1987 TYPE_IS_SIZETYPE (sbitsizetype) = 1;
896cced4
RH
1988 }
1989 else
1990 {
8c1d6d62 1991 fixup_signed_type (bitsizetype);
896cced4
RH
1992 ssizetype = sizetype;
1993 sbitsizetype = bitsizetype;
896cced4 1994 }
7f18f917
JL
1995
1996 /* If SIZETYPE is unsigned, we need to fix TYPE_MAX_VALUE so that
1997 it is sign extended in a way consistent with force_fit_type. */
1998 if (TYPE_UNSIGNED (type))
1999 {
2000 tree orig_max, new_max;
2001
2002 orig_max = TYPE_MAX_VALUE (sizetype);
2003
2ac7cbb5
RG
2004 /* Build a new node with the same values, but a different type.
2005 Sign extend it to ensure consistency. */
2006 new_max = build_int_cst_wide_type (sizetype,
2007 TREE_INT_CST_LOW (orig_max),
2008 TREE_INT_CST_HIGH (orig_max));
7f18f917
JL
2009 TYPE_MAX_VALUE (sizetype) = new_max;
2010 }
fed3cef0
RK
2011}
2012\f
71d59383
RS
2013/* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE
2014 or BOOLEAN_TYPE. Set TYPE_MIN_VALUE and TYPE_MAX_VALUE
7b6d72fc
MM
2015 for TYPE, based on the PRECISION and whether or not the TYPE
2016 IS_UNSIGNED. PRECISION need not correspond to a width supported
2017 natively by the hardware; for example, on a machine with 8-bit,
2018 16-bit, and 32-bit register modes, PRECISION might be 7, 23, or
2019 61. */
2020
2021void
2022set_min_and_max_values_for_integral_type (tree type,
2023 int precision,
2024 bool is_unsigned)
2025{
2026 tree min_value;
2027 tree max_value;
2028
2029 if (is_unsigned)
2030 {
7d60be94 2031 min_value = build_int_cst (type, 0);
f676971a 2032 max_value
7d60be94
NS
2033 = build_int_cst_wide (type, precision - HOST_BITS_PER_WIDE_INT >= 0
2034 ? -1
2035 : ((HOST_WIDE_INT) 1 << precision) - 1,
2036 precision - HOST_BITS_PER_WIDE_INT > 0
2037 ? ((unsigned HOST_WIDE_INT) ~0
2038 >> (HOST_BITS_PER_WIDE_INT
2039 - (precision - HOST_BITS_PER_WIDE_INT)))
2040 : 0);
7b6d72fc
MM
2041 }
2042 else
2043 {
f676971a 2044 min_value
7d60be94
NS
2045 = build_int_cst_wide (type,
2046 (precision - HOST_BITS_PER_WIDE_INT > 0
2047 ? 0
2048 : (HOST_WIDE_INT) (-1) << (precision - 1)),
2049 (((HOST_WIDE_INT) (-1)
2050 << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2051 ? precision - HOST_BITS_PER_WIDE_INT - 1
2052 : 0))));
7b6d72fc 2053 max_value
7d60be94
NS
2054 = build_int_cst_wide (type,
2055 (precision - HOST_BITS_PER_WIDE_INT > 0
2056 ? -1
2057 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
2058 (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2059 ? (((HOST_WIDE_INT) 1
2060 << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
2061 : 0));
7b6d72fc
MM
2062 }
2063
7b6d72fc
MM
2064 TYPE_MIN_VALUE (type) = min_value;
2065 TYPE_MAX_VALUE (type) = max_value;
2066}
2067
4cc89e53 2068/* Set the extreme values of TYPE based on its precision in bits,
13756074 2069 then lay it out. Used when make_signed_type won't do
4cc89e53
RS
2070 because the tree code is not INTEGER_TYPE.
2071 E.g. for Pascal, when the -fsigned-char option is given. */
2072
2073void
46c5ad27 2074fixup_signed_type (tree type)
4cc89e53 2075{
b3694847 2076 int precision = TYPE_PRECISION (type);
4cc89e53 2077
9cd56be1
JH
2078 /* We can not represent properly constants greater then
2079 2 * HOST_BITS_PER_WIDE_INT, still we need the types
2080 as they are used by i386 vector extensions and friends. */
2081 if (precision > HOST_BITS_PER_WIDE_INT * 2)
2082 precision = HOST_BITS_PER_WIDE_INT * 2;
2083
f676971a 2084 set_min_and_max_values_for_integral_type (type, precision,
7b6d72fc 2085 /*is_unsigned=*/false);
4cc89e53
RS
2086
2087 /* Lay out the type: set its alignment, size, etc. */
4cc89e53
RS
2088 layout_type (type);
2089}
2090
7306ed3f 2091/* Set the extreme values of TYPE based on its precision in bits,
13756074 2092 then lay it out. This is used both in `make_unsigned_type'
7306ed3f
JW
2093 and for enumeral types. */
2094
2095void
46c5ad27 2096fixup_unsigned_type (tree type)
7306ed3f 2097{
b3694847 2098 int precision = TYPE_PRECISION (type);
7306ed3f 2099
9cd56be1
JH
2100 /* We can not represent properly constants greater then
2101 2 * HOST_BITS_PER_WIDE_INT, still we need the types
2102 as they are used by i386 vector extensions and friends. */
2103 if (precision > HOST_BITS_PER_WIDE_INT * 2)
2104 precision = HOST_BITS_PER_WIDE_INT * 2;
2105
89b0433e 2106 TYPE_UNSIGNED (type) = 1;
f676971a
EC
2107
2108 set_min_and_max_values_for_integral_type (type, precision,
7b6d72fc 2109 /*is_unsigned=*/true);
7306ed3f
JW
2110
2111 /* Lay out the type: set its alignment, size, etc. */
7306ed3f
JW
2112 layout_type (type);
2113}
2114\f
2115/* Find the best machine mode to use when referencing a bit field of length
2116 BITSIZE bits starting at BITPOS.
2117
2118 The underlying object is known to be aligned to a boundary of ALIGN bits.
2119 If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
2120 larger than LARGEST_MODE (usually SImode).
2121
c2a64439 2122 If no mode meets all these conditions, we return VOIDmode.
0ac11108 2123
c2a64439
PB
2124 If VOLATILEP is false and SLOW_BYTE_ACCESS is false, we return the
2125 smallest mode meeting these conditions.
2126
2127 If VOLATILEP is false and SLOW_BYTE_ACCESS is true, we return the
2128 largest mode (but a mode no wider than UNITS_PER_WORD) that meets
2129 all the conditions.
0ac11108 2130
c2a64439
PB
2131 If VOLATILEP is true the narrow_volatile_bitfields target hook is used to
2132 decide which of the above modes should be used. */
7306ed3f
JW
2133
2134enum machine_mode
46c5ad27
AJ
2135get_best_mode (int bitsize, int bitpos, unsigned int align,
2136 enum machine_mode largest_mode, int volatilep)
7306ed3f
JW
2137{
2138 enum machine_mode mode;
770ae6cc 2139 unsigned int unit = 0;
7306ed3f
JW
2140
2141 /* Find the narrowest integer mode that contains the bit field. */
2142 for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
2143 mode = GET_MODE_WIDER_MODE (mode))
2144 {
2145 unit = GET_MODE_BITSIZE (mode);
956d6950 2146 if ((bitpos % unit) + bitsize <= unit)
7306ed3f
JW
2147 break;
2148 }
2149
0c61f541 2150 if (mode == VOIDmode
7306ed3f 2151 /* It is tempting to omit the following line
4e4b555d 2152 if STRICT_ALIGNMENT is true.
7306ed3f
JW
2153 But that is incorrect, since if the bitfield uses part of 3 bytes
2154 and we use a 4-byte mode, we could get a spurious segv
2155 if the extra 4th byte is past the end of memory.
2156 (Though at least one Unix compiler ignores this problem:
2157 that on the Sequent 386 machine. */
770ae6cc 2158 || MIN (unit, BIGGEST_ALIGNMENT) > align
7306ed3f
JW
2159 || (largest_mode != VOIDmode && unit > GET_MODE_BITSIZE (largest_mode)))
2160 return VOIDmode;
2161
c2a64439 2162 if ((SLOW_BYTE_ACCESS && ! volatilep)
62e5bf5d 2163 || (volatilep && !targetm.narrow_volatile_bitfield ()))
77fa0940
RK
2164 {
2165 enum machine_mode wide_mode = VOIDmode, tmode;
2166
2167 for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmode != VOIDmode;
2168 tmode = GET_MODE_WIDER_MODE (tmode))
2169 {
2170 unit = GET_MODE_BITSIZE (tmode);
2171 if (bitpos / unit == (bitpos + bitsize - 1) / unit
2172 && unit <= BITS_PER_WORD
770ae6cc 2173 && unit <= MIN (align, BIGGEST_ALIGNMENT)
77fa0940
RK
2174 && (largest_mode == VOIDmode
2175 || unit <= GET_MODE_BITSIZE (largest_mode)))
2176 wide_mode = tmode;
2177 }
2178
2179 if (wide_mode != VOIDmode)
2180 return wide_mode;
2181 }
7306ed3f
JW
2182
2183 return mode;
2184}
d7db6646 2185
50654f6c 2186/* Gets minimal and maximal values for MODE (signed or unsigned depending on
0aea6467 2187 SIGN). The returned constants are made to be usable in TARGET_MODE. */
50654f6c
ZD
2188
2189void
0aea6467
ZD
2190get_mode_bounds (enum machine_mode mode, int sign,
2191 enum machine_mode target_mode,
2192 rtx *mmin, rtx *mmax)
50654f6c 2193{
0aea6467
ZD
2194 unsigned size = GET_MODE_BITSIZE (mode);
2195 unsigned HOST_WIDE_INT min_val, max_val;
50654f6c 2196
41374e13 2197 gcc_assert (size <= HOST_BITS_PER_WIDE_INT);
50654f6c
ZD
2198
2199 if (sign)
2200 {
0aea6467
ZD
2201 min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1));
2202 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1)) - 1;
50654f6c
ZD
2203 }
2204 else
2205 {
0aea6467
ZD
2206 min_val = 0;
2207 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1) << 1) - 1;
50654f6c 2208 }
0aea6467 2209
bb80db7b
KH
2210 *mmin = gen_int_mode (min_val, target_mode);
2211 *mmax = gen_int_mode (max_val, target_mode);
50654f6c
ZD
2212}
2213
e2500fed 2214#include "gt-stor-layout.h"