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