Greetings,

the definitions for NOP_EXPR and CONVERT_EXPR in tree.def, having survived
all the way from 1992, currently say:

    /* Represents a conversion of type of a value.
       All conversions, including implicit ones, must be
       represented by CONVERT_EXPR or NOP_EXPR nodes.  */
    DEFTREECODE (CONVERT_EXPR, "convert_expr", tcc_unary, 1)

    /* Represents a conversion expected to require no code to be generated.  */
    DEFTREECODE (NOP_EXPR, "nop_expr", tcc_unary, 1)

Unfortunately, they are confusing, as in

    float f(double d)
    {
        return d;
    }

the narrowing conversion is represented with NOP_EXPR, and it is definitely
not a no-op.

Does some clear distinction remain, and is it possible to clarify the
definitions?

Thanks.
Alexander

Reply via email to