Cmm lint error: Shift operation MO_Shl W64 has out-of-range offset 64
Summary
Lint error Cmm lint error: Shift operation MO_Shl W64 has out-of-range offset 64
Steps to reproduce
Building ghc at 43b66a13 (a few irrelevant patches on top are pushed to https://gitlab.haskell.org/blackgnezdo/ghc/-/commits/shift-out-of-range) with this script results in a failure:
Command line: _build/stage0/bin/ghc -Wall -Wcompat -fdiagnostics-color=never -dynamic-too -hisuf hi -osuf o -hcsuf hc -static -hide-all-packages -no-user-package-db '-package-env -' '-package-db _build/stage1/inplace/package.conf.d' '-this-unit-id ghc-bignum-1.3-inplace' '-package-id ghc-prim-0.10.0-inplace' -i -i/home/greg/s/ghc/_build/stage1/libraries/ghc-bignum/build -i/home/greg/s/ghc/_build/stage1/libraries/ghc-bignum/build/autogen -i/home/greg/s/ghc/libraries/ghc-bignum/src/ -Irts/include -I_build/stage1/libraries/ghc-bignum/build -I/usr/local/include -I_build/stage1/libraries/ghc-bignum/build/include/ -I/usr/local/include -Ilibraries/ghc-bignum/include/ -I/usr/local/include -I/home/greg/s/ghc/rts/include -I/home/greg/s/ghc/_build/stage1/rts/build/include -optP-include -optP_build/stage1/libraries/ghc-bignum/build/autogen/cabal_macros.h -optc--target=x86_64-unknown-openbsd -optc-Qunused-arguments -optP-DBIGNUM_GMP -outputdir _build/stage1/libraries/ghc-bignum/build -Wall -this-unit-id ghc-bignum -XHaskell2010 -no-global-package-db -package-db=/home/greg/s/ghc/_build/stage1/inplace/package.conf.d -ghcversion-file=rts/include/ghcversion.h -ghcversion-file=rts/include/ghcversion.h -Wnoncanonical-monad-instances -optc-Wno-unknown-pragmas -optP-Wno-nonportable-include-path -c libraries/ghc-bignum/src/GHC/Num/Backend/Native.hs -o _build/stage1/libraries/ghc-bignum/build/GHC/Num/Backend/Native.o -fllvm-fill-undef-with-garbage -dno-debug-output -O -Werror -dlint -Wno-deprecated-flags
===> Command failed with error code: 1
Cmm lint error:
in basic block c2m6
Shift operation MO_Shl W64 has out-of-range offset 64. This will result in undefined behavior
Program was:
...
c2m6: // global
_c2mv::I64 = _s1ZS::I64 + _s1Zo::I64; // CmmAssign
_s1ZW::I64 = _c2mv::I64; // CmmAssign
_c2mZ::I64 = I64[(_s1Zl::P64 + 16) + (_s1ZW::I64 << 3)]; // CmmAssign
_s1ZX::I64 = _c2mZ::I64; // CmmAssign
_c2n2::I64 = _s1ZT::I64 | _s1ZX::I64; // CmmAssign
_s1ZY::I64 = _c2n2::I64; // CmmAssign
I64^[(_s1Zk::P64 + 16) + (_s1ZS::I64 << 3)] = _s1ZY::I64; // CmmStore
_c2n5::I64 = _s1ZX::I64 << 64; // CmmAssign
_s201::I64 = _c2n5::I64; // CmmAssign
_c2n8::I64 = _s1ZS::I64 - _s1ZQ::I64; // CmmAssign
_s200::I64 = _c2n8::I64; // CmmAssign
_s1ZT::I64 = _s201::I64; // CmmAssign
_s1ZS::I64 = _s200::I64; // CmmAssign
goto c2lZ; // CmmBranch
There's indeed a << 64
in the block above.
Expected behavior
Successful build.
Environment
- GHC version used: 43b66a13, at this point it's using stage0, so the bootstrap compiler 9.2.8 should be irrelevant.
Optional:
- Operating System: OpenBSD
- System Architecture: amd64