On 03/04/2011 03:11 AM, Fabien Chêne wrote:
Hmm, I've implemented what you were suggesting, and I don't understand the following check in supplement_binding:else if (TREE_CODE (bval) == TYPE_DECL&& DECL_ARTIFICIAL (bval)) { /* The old binding was a type name. It was placed in VALUE field because it was thought, at the point it was declared, to be the only entity with such a name. Move the type name into the type slot; it is now hidden by the new binding. */ binding->type = bval; binding->value = decl; binding->value_is_inherited = false; } Why is it usefull ? It prevents the following illegal code from being rejected: struct A { struct type {}; typedef int type; };
That's a bug. I guess the check above needs to make sure that decl is not a TYPE_DECL.
Jason
