[Bug c/33192] New: __imag operator drops side effects in subexpr

Andrew Pinski pinskia@gmail.com
Sun Aug 26 09:00:00 GMT 2007


On 26 Aug 2007 05:21:22 -0000, sabre at nondot dot org
<gcc-bugzilla@gcc.gnu.org> wrote:
> to not call bar.

The problem is in c-typeck.c (build_unary_op) (around line 2986).
the code looks like:
      if (TREE_CODE (arg) == COMPLEX_CST)
        return TREE_IMAGPART (arg);
      else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
        return fold_build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
      else
        return convert (TREE_TYPE (arg), integer_zero_node);


So there is no check for TREE_SIDE_EFFECTS.  Maybe it should use
omit_one_operand or build a COMPOUND_EXPR.  Either one will fix the
bug.

-- Pinski



More information about the Gcc-bugs mailing list