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?