another chock with the static type code in c-family/c-common:handle_deprecated_attribute()
 around line 8919-8923

handle_deprecated_attribute (tree *node, tree name,
                             tree args, int flags,
                             bool *no_add_attrs)
{
<...>
if (DECL_P (*node))
    {
      tree decl = *node;
      type = TREE_TYPE (decl);
<...>
    }
else if (TYPE_P (*node))
    {
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
        *node = build_variant_type_copy (*node);
      TREE_DEPRECATED (*node) = 1;
      type = *node;
    }
<...>

if (type && TYPE_NAME (type))
        {
          if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
(*)         what = TYPE_NAME (*node);
          else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
                   && DECL_NAME (TYPE_NAME (type)))
            what = DECL_NAME (TYPE_NAME (type));
        }
      if (what)
warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);


I think the (*) line is suppose to be
  what = TYPE_NAME (type);

It will work fine for the case where a type is passed in since type is equivilent to *name, but in some cases of DECL I'd say it's not looking at the correct field..

Andrew

Reply via email to