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