https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64971

Jeffrey A. Law <law at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|2015-02-09 00:00:00         |2016-03-23
                 CC|                            |rth at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #6 from Jeffrey A. Law <law at redhat dot com> ---
I've managed to reproduce this with a native aarch64 toolchain, but haven't
been able to trigger it with a cross.

The SImode address comes from expand_expr_addr_expr

Essentially address_mode is DImode and pointer_mode is SImode.  tmode starts
off as VOIDmode, but is changed to SImode here:

7776      /* Target mode of VOIDmode says "whatever's natural".  */
7777      if (tmode == VOIDmode)
7778        tmode = TYPE_MODE (TREE_TYPE (exp));


We get a DImode SYMBOL_REF back from expand_expr_addr_expr_1:

(symbol_ref/f:DI ("*.LC0") [flags 0x82] <var_decl 0x3ffb7fa1200 *.LC0>)

But we then try to convert that to tmode via:

7802      if (rmode != tmode)
7803        result = convert_memory_address_addr_space (tmode, result, as);

(symbol_ref/f:SI ("*.LC0") [flags 0x82] <var_decl 0x3ffb7fa1200 *.LC0>)

Which can't be recognized, as seen in c#0 -- because we expect the SYMBOL_REF
to have DImode.

Richard, want to take a peek?  I've got an aarch64 native system in beaker. 
Happy to pass along the hostname and passwd..

Reply via email to