Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
1134 commits behind the upstream repository.
  • Cheng Shao's avatar
    8dd8a076
    compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs · 8dd8a076
    Cheng Shao authored and Marge Bot's avatar Marge Bot committed
    This patch makes the STG->Cmm backend avoid saving foreign call target
    to local when there are no caller-save GlobalRegs.
    
    Since 321941a8, when we lower a
    foreign call, we unconditionally save the foreign call target to a
    temporary local first, then rely on cmmSink to clean it up later,
    which only happens with -fcmm-sink (implied by -O) and not in
    unoptimized code.
    
    And this is troublesome for the wasm backend NCG, which needs to infer
    a foreign call target symbol's type signature from the Cmm call site.
    Previously, the NCG has been emitting incorrect type signatures for
    unoptimized code, which happens to work with `wasm-ld` most of the
    time, but this is never future-proof against upstream toolchain
    updates, and it causes horrible breakages when LTO objects are
    included in linker input. Hence this patch.
    8dd8a076
    History
    compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs
    Cheng Shao authored and Marge Bot's avatar Marge Bot committed
    This patch makes the STG->Cmm backend avoid saving foreign call target
    to local when there are no caller-save GlobalRegs.
    
    Since 321941a8, when we lower a
    foreign call, we unconditionally save the foreign call target to a
    temporary local first, then rely on cmmSink to clean it up later,
    which only happens with -fcmm-sink (implied by -O) and not in
    unoptimized code.
    
    And this is troublesome for the wasm backend NCG, which needs to infer
    a foreign call target symbol's type signature from the Cmm call site.
    Previously, the NCG has been emitting incorrect type signatures for
    unoptimized code, which happens to work with `wasm-ld` most of the
    time, but this is never future-proof against upstream toolchain
    updates, and it causes horrible breakages when LTO objects are
    included in linker input. Hence this patch.
Code owners