Hi,
The problem here is that the gimplifier can produce invalid gimple when
the address is of an non addressable expression like a conditional
expression. When Alexandre fixed PR 20280, he introduced the issue of
building addresses of the two operand of a conditional expression if we
wantted either a lvalue or a rvalue, this introduced this latent bug of
invalid gimple.
Now my patch fixes PR 20280 in the front-end so we never get &(a?b:c), we
always get a?&b:&c instead. This patch also fixes the invalid gimple
issue when needing a temp variable. This patch also reverts part of the
patch for PR 20280 so only when we want lvalue of a conditional, we take
the address inside the conditional.
The middle part of the patch is enough to fix the bug but we get worse
code as we get * (a?&b:&c) which is not optimized currently.