OSDN Git Service

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