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