Open
Description
Raised from discussion on #137.
LLVM ERROR: Cannot select: t2: i16 = addrspacecast[1 -> 0] undef:i16
t1: i16 = undef
In function: _ZN4core3ptr87_$LT$impl$u20$core..fmt..Debug$u20$for$u20$unsafe$u20$fn$LP$A$RP$$u20$.$GT$$u20$Ret$GT$3fmt17h0fdf8ca7140def9bE
The bug is exposed by the std::fmt::Debug
implementation for functions and function pointers. Rust emits a pointer dereference with a target pointer type of addrspace(0)* i16
, using LLVM routines that will implicitly insert a bitcast (iN -> iM bits) or an address space cast if necessary. In the case of function pointers, Rust should codegen a addrspace(1)* i16
pointer, so that LLVM doesn't have to map (addrspacecast
) PROGMEM pointers to RAM pointers an impossible task because there is no memory mapping and the address spaces do not overlap.
Here is the full LLVM IR for libcore
from the #137 branch libcore.ll.
Metadata
Metadata
Assignees
Labels
No labels