On 01/27/2016 03:41 PM, Andrew MacLeod wrote:
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..
That would be my suspicion as well.
Good to see this work exposing this kind of issue at compile time --
that was definitely one of the things I want to get out of this class of
infrastructure changes.
jeff