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