This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Suspicious code in fold-const.c


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]