Query about the TREE_TYPE field

Jason Merrill jason@redhat.com
Tue Nov 18 14:52:00 GMT 2014


On 11/18/2014 09:26 AM, Andrew MacLeod wrote:
> I was poking around attribs.c while trial running my tree-type-safety
> stuff, and it triggered something in decl_attributes() that seems fishy
> to me.  It looks like it was part of the fix for
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35315
>
> decl_attributes() can be passed a tree node which is either decl or a
> type, but we get to this little snippet:
>
>        if (spec->type_required && DECL_P (*anode))
>          {
>            anode = &TREE_TYPE (*anode);
>            /* Allow ATTR_FLAG_TYPE_IN_PLACE for the type's naming decl.  */
>            if (!(TREE_CODE (*anode) == TYPE_DECL
>                  && *anode == TYPE_NAME (TYPE_MAIN_VARIANT
>                                          (TREE_TYPE (*anode)))))
>              flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
>          }
>
> anode is changed to point to the TREE_TYPE of the original decl, and
> *then* checks if it is a TYPE_DECL...   That doesnt seem right to me..
> we can't have a TYPE_DECL as a TREE_TYPE can we?

No.

> is that code suppose to be checking is the original DECL is a TYPE_DECL
> rather than the TREE_TYPE?

I think so.

> Maybe the assignment to anode should be after the if instead of in front
> of it?

Probably.

Strange that the 35315 patch fixed the testcase with that change being a 
placebo...

Jason



More information about the Gcc mailing list