On 01/22/2016 10:21 AM, Bernd Schmidt wrote:
On 01/22/2016 02:37 PM, Andrew MacLeod wrote:/* If the initializer is non-void, then it's a normal expression that will be assigned to the slot. */ (*) if (!VOID_TYPE_P (t)) (*) return RECURSE (t);I suspect this should also be if (!VOID_TYPE_P(TREE_TYPE(t))The terminology in the documentation is somewhat unfortunate: /* For TARGET_EXPR, operand 0 is the target of an initialization, operand 1 is the initializer for the target, which may be void if simply expanding it initializes the target. operand 2 is the cleanup for this node, if any. operand 3 is the saved initializer after this node has been expanded once; this is so we can re-expand the tree later. */ DEFTREECODE (TARGET_EXPR, "target_expr", tcc_expression, 4) I suspect that should read "which may have void type". Code in cp/tree.c also looks at the type of the initializer to see if it is void, so I think you are right with your suspicion. So, I think your proposed change is OK (modulo formatting), but it may cause problems since it'll enable code that was never tested. Maybe best to do it for gcc-7. Ideally you'd also make a change cleaning up the wording in tree.def.
Agreed. jeff
