http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58950
--- Comment #6 from Marc Glisse <glisse at gcc dot gnu.org> --- For: void f(){ int i = 2; (i+i); } we always set TREE_NOWARNING in finish_parenthesized_expr. The comment next to it says this is to avoid warning in c_common_truthvalue_conversion. If that's the only reason, the hammer seems a bit heavy, in C we only set the bit for MODIFY_EXPR.