On Thu, Dec 5, 2013 at 6:57 AM, Joseph S. Myers <[email protected]> wrote:
> Index: c-family/c-common.c
> ===================================================================
> --- c-family/c-common.c (revision 205668)
> +++ c-family/c-common.c (working copy)
> @@ -4921,14 +4921,17 @@ c_common_get_alias_set (tree t)
> }
>
> /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where
> - the second parameter indicates which OPERATOR is being applied.
> + the IS_SIZEOF parameter indicates which operator is being applied.
> The COMPLAIN flag controls whether we should diagnose possibly
> ill-formed constructs or not. LOC is the location of the SIZEOF or
> - TYPEOF operator. */
> + TYPEOF operator. If MIN_ALIGNOF, the least alignment required for
> + a type in any context should be returned, rather than the normal
> + alignment for that type. */
>
> tree
> c_sizeof_or_alignof_type (location_t loc,
> - tree type, bool is_sizeof, int complain)
> + tree type, bool is_sizeof, bool min_alignof,
> + int complain)
> {
> const char *op_name;
> tree value = NULL;
> @@ -4994,6 +4997,22 @@ c_sizeof_or_alignof_type (location_t loc,
> value = size_binop_loc (loc, CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
> size_int (TYPE_PRECISION (char_type_node)
> / BITS_PER_UNIT));
> + else if (min_alignof)
> + {
> + unsigned int align = TYPE_ALIGN (type);
> + align = MIN (align, BIGGEST_ALIGNMENT);
> +#ifdef BIGGEST_FIELD_ALIGNMENT
> + align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
> +#endif
> + tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE,
> + type);
> + unsigned int field_align = align;
> +#ifdef ADJUST_FIELD_ALIGN
> + field_align = ADJUST_FIELD_ALIGN (field, field_align);
> +#endif
Won't *field* be unused if ADJUST_FIELD_ALIGN not defined?
Thanks,
bin
--
Best Regards.