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

--- Comment #5 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> I guess the first question is if it is valid for expand_expr that requests
> some mode to return a rtx with some completely different mode.  If not, then
> the bug is somewhere in normal_inner_ref: code:
>         if (GET_CODE (op0) == CONCAT && !must_force_mem)
>           {
>             if (bitpos == 0
>                 && bitsize == GET_MODE_BITSIZE (GET_MODE (op0)))
>               { 
>                 if (reversep)
>                   op0 = flip_storage_order (GET_MODE (op0), op0);
>                 return op0;
>               }
> If bitpos/bitsize indicate the real or imaginary part of the CONCAT, then we
> don't return and let the later code handle the mode changes, but for this
> early out we don't really consider what the mode is.

I agree that the early return is awkward here.  What happens if you just fall
through in this case?

Reply via email to