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