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?).

Reply via email to