On Tue, 16 Jun 2015, Eric Botcazou wrote:

> +@item unused
> +@cindex @code{unused} type attribute
> +When attached to a type (including a @code{union} or a @code{struct}),
> +this attribute means that variables of that type are meant to appear
> +possibly unused.  GCC does not produce a warning for any variables of
> +that type, even if the variable appears to do nothing.  This is often
> +the case with lock or thread classes, which are usually defined and then
> +not referenced, but contain constructors and destructors that have
> +nontrivial bookkeeping functions.

You appear to be duplicating the documentation of an unrelated attribute.

What happens when typeof is applied to a field with reversed storage 
order?

> +      else if (TYPE_REVERSE_STORAGE_ORDER (t)
> +            && TREE_CODE (field) == FIELD_DECL
> +            && TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
> +     {
> +       tree ftype = TREE_TYPE (field);
> +       do
> +         ftype = TREE_TYPE (ftype);
> +       while (TREE_CODE (ftype) == ARRAY_TYPE);
> +       if (!RECORD_OR_UNION_TYPE_P (ftype))
> +         {
> +           tree *ftypep = &TREE_TYPE (field);
> +           do {
> +             *ftypep = build_distinct_type_copy (*ftypep);
> +             TYPE_REVERSE_STORAGE_ORDER (*ftypep) = 1;
> +             ftypep = &TREE_TYPE (*ftypep);
> +           } while (TREE_CODE (*ftypep) == ARRAY_TYPE);

I don't think this type construction is safe when the array type has 
qualified element type.  The following invariant is meant to hold: for an 
array type whose element type (possibly after going down through several 
levels of array types) is qualified, the TYPE_MAIN_VARIANT is a 
corresponding array type whose element type is unqualified.  So in that 
case you need to build two sequences of array types, not one: the main 
variants with unqualified element type, and the versions with qualified 
element type.  See c_build_qualified_type.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to