This patch removes what I believe is a redundant check in store_bit_field_1 for whether the value to insert (i.e. the rhs) has BLKmode. We shouldn't see BLKmode values here, and even if we did, the only effect of the test is to fall through to store_fixed_bit_field, which can't handle BLKmode either. Specifically, store_fixed_bit_field would call:
if (GET_MODE (value) != mode) value = convert_to_mode (mode, value, 1); and convert_to_mode ICEs on BLKmode values. Tested as described in the covering note. OK to install? Richard gcc/ * expmed.c (store_bit_field_1): Remove test for BLKmode values. Index: gcc/expmed.c =================================================================== --- gcc/expmed.c 2012-10-28 10:40:22.533352589 +0000 +++ gcc/expmed.c 2012-10-28 10:40:23.119352588 +0000 @@ -670,7 +670,6 @@ store_bit_field_1 (rtx str_rtx, unsigned enum machine_mode op_mode = mode_for_extraction (EP_insv, 3); if (HAVE_insv - && GET_MODE (value) != BLKmode && bitsize > 0 && GET_MODE_BITSIZE (op_mode) >= bitsize /* Do not use insv for volatile bitfields when