http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55597



Steven Bosscher <steven at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Target|                            |x32

                 CC|steven at gcc dot gnu.org,  |

                   |stevenb.gcc at gmail dot    |

                   |com                         |

            Summary|[4.8 Regression] internal   |internal compiler error: in

                   |compiler error: in          |plus_constant, at

                   |plus_constant, at           |explow.c:88

                   |explow.c:88                 |



--- Comment #4 from Steven Bosscher <steven at gcc dot gnu.org> 2012-12-04 
23:46:01 UTC ---

Yup, target bug.



(gdb) down

#5  0x0000000000d165b2 in ix86_expand_move (mode=SImode,

operands=0x7fffffffc740) at ../../trunk/gcc/config/i386/i386.c:15936

15936           tmp = legitimize_tls_address (symbol, model, true);

(gdb) l

15931         rtx symbol = XEXP (XEXP (op1, 0), 0);

15932         rtx tmp = NULL;

15933

15934         model = SYMBOL_REF_TLS_MODEL (symbol);

15935         if (model)

15936           tmp = legitimize_tls_address (symbol, model, true);

15937         else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES

15938                  && SYMBOL_REF_DLLIMPORT_P (symbol))

15939           tmp = legitimize_dllimport_symbol (symbol, true);

15940

(gdb) p debug_rtx(op0)

(reg:SI 60)

$11 = void

(gdb) p debug_rtx(op1)

(const:SI (plus:SI (symbol_ref:SI ("__morestack_initial_sp") [flags 0x10]

<var_decl 0x7ffff6301720 __morestack_initial_sp>)

        (const_int 4 [0x4])))

$12 = void

(gdb) p debug_rtx(addend)

(const_int 4 [0x4])

$13 = void

(gdb) p debug_rtx(symbol)

(symbol_ref:SI ("__morestack_initial_sp") [flags 0x10] <var_decl 0x7ffff6301720

__morestack_initial_sp>)

$14 = void

(gdb) 





Note how this tries to expand an SImode move.



Breakpoint 2, legitimize_tls_address (x=0x7ffff6401660, model=TLS_MODEL_REAL,

for_mov=true) at ../../trunk/gcc/config/i386/i386.c:12758

12758     rtx pic = NULL_RTX, tp = NULL_RTX;

(gdb) p debug_rtx(x)

(symbol_ref:SI ("__morestack_initial_sp") [flags 0x10] <var_decl 0x7ffff6301720

__morestack_initial_sp>)

$15 = void

(gdb) next

12759     enum machine_mode tp_mode = Pmode;

(gdb) 

12762     switch (model)

(gdb) 

12765         dest = gen_reg_rtx (Pmode);

(gdb) p Pmode

$16 = DImode



So now you're in trouble...



And for the record: This can never be a regression, X32 doesn't exist in

previous GCC releases.

Reply via email to