Skip to content

CmmToC: fix CmmRegOff for 64-bit register on a 32-bit target

Cheng Shao requested to merge type-dance/ghc:fix-unreg-cmmregoff into master

We used to print the offset value to a platform word sized integer. This is incorrect when the offset is negative (e.g. output of cmm constant folding) and the register is 64-bit but on a 32-bit target, and may lead to incorrect runtime result (e.g. #22607 (closed)).

The fix is simple: just treat it as a proper MO_Add, with the correct width info inferred from the register itself.

Edited by Cheng Shao

Merge request reports