http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57586
--- Comment #5 from rguenther at suse dot de <rguenther at suse dot de> --- On Tue, 11 Jun 2013, jgreenhalgh at gcc dot gnu.org wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57586 > > --- Comment #4 from jgreenhalgh at gcc dot gnu.org --- > Created attachment 30293 > --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30293&action=edit > Less reduced failing testcase > > Yes, the same thing happens for packed versions of those structs. Perhaps the > attached, less-reduced, version of the testcase will make the issue more > clear. > This expanded testcase fails with the same error and ICE: > > ../build-arm-none-eabi/install/bin/arm-none-eabi-gcc > ../testcases/pr-less-reduced.c -O1 -Wall > ../testcases/pr-less-reduced.c: In function 'inet_rtm_getroute': > ../testcases/pr-less-reduced.c:22:3: error: output number 0 not directly > addressable > __asm__ __volatile__("" > ^ > ../testcases/pr-less-reduced.c:22:3: internal compiler error: in > expand_asm_operands, at stmt.c:910 > 0x8c1be8 expand_asm_operands > /work/oban-dev/src/gcc/gcc/stmt.c:910 > 0x8c28a7 expand_asm_stmt(gimple_statement_d*) > /work/oban-dev/src/gcc/gcc/stmt.c:1151 > 0x5dfe5f expand_gimple_stmt_1 > /work/oban-dev/src/gcc/gcc/cfgexpand.c:2154 > 0x5dfe5f expand_gimple_stmt > /work/oban-dev/src/gcc/gcc/cfgexpand.c:2309 > 0x5e1b69 expand_gimple_basic_block > /work/oban-dev/src/gcc/gcc/cfgexpand.c:4143 > 0x5e4a33 gimple_expand_cfg > /work/oban-dev/src/gcc/gcc/cfgexpand.c:4662 > Please submit a full bug report, > with preprocessed source if appropriate. > Please include the complete backtrace with any bug report. > See <http://gcc.gnu.org/bugs.html> for instructions. I suppose the question is why /* EXPAND_INITIALIZER will not generate code for valid initializer constants, but will still generate code for other types of operand. This is the behavior we want for constant constraints. */ op = expand_expr (val, NULL_RTX, VOIDmode, allows_reg ? EXPAND_NORMAL : allows_mem ? EXPAND_MEMORY : EXPAND_INITIALIZER); thus, EXPAND_MEMORY returns a non-MEM_P (does it?).