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