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