I think useless expressions must be evaluated, simply because there is no syntactic criterion to determine the uselessness of any expression. For example, (i=j)+something()+k++; is not syntactically different from (i=j)+1+k++; but something() probably has side effects.