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