OSDN Git Service

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