This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: [Bug c/33192] New: __imag operator drops side effects in subexpr
- From: "Andrew Pinski" <pinskia at gmail dot com>
- To: gcc-bugzilla at gcc dot gnu dot org
- Cc: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 26 Aug 2007 02:00:21 -0700
- Subject: Re: [Bug c/33192] New: __imag operator drops side effects in subexpr
- References: <bug-33192-6809@http.gcc.gnu.org/bugzilla/>
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