https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105109

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
There isn't really a good way (w/o further analysis) to improve what
update_address_taken does.  While it probably could use a BIT_INSERT_EXPR
instead of reading the other component and using a COMPLEX_EXPR the latter
is what is considered canonical.

There's the opportunity to "simplify"

  _5 = IMAGPART_EXPR <exp$0_12(D)>;
  exp$0_26 = COMPLEX_EXPR <-3.1400001049041748046875e+0, _5>;

to just

  exp$0_26 = COMPLEX_EXPR <-3.1400001049041748046875e+0, _5(D)>;

but that would lose diagnostics.  gimplify_modify_expr_complex_part does

  ocode = code == REALPART_EXPR ? IMAGPART_EXPR : REALPART_EXPR;
  other = build1 (ocode, TREE_TYPE (rhs), lhs);
  suppress_warning (other);

so it suppresses diagnostics on the fake read.  I'm going to do the same
for the rewriting in update_address_taken.

Reply via email to