Admin message

Due to a large amount of spam we do not allow new users to create repositories, they are "external" users. If you are a new user and want to create a repository, for example for forking GHC, open a new issue on ghc/ghc using the "get-verified" issue template

aarch64 NCG miscompiles subword across C FFI boundary
```c #include <stdint.h> uint8_t u64_to_u8(uint64_t v) { return (uint8_t)v; } ``` ```haskell {-# LANGUAGE MagicHash #-} import GHC.Exts import Data.Word (Word64) import GHC.Word (Word8(..)) import System.Environment (getArgs) foreign import ccall unsafe "u64_to_u8" u64_to_u8 :: Word64 -> Word8 {-# NOINLINE eq8 #-} eq8 :: Word8 -> Word8 -> Int eq8 (W8# a) (W8# b) = I# (eqWord8# a b) main :: IO () main = do [x, y] <- getArgs -- 5 = 0x05, 65541 = 0x10005 (both have low byte 5 -> equal as Word8) print (eq8 (u64_to_u8 (read x)) (u64_to_u8 (read y))) ``` on aarch64, compile with `ghc-head test.hs test_c.c -o test && ./test 5 65541`, it produces the right result `1`. but when `-O` is added, it produces the wrong result `0`. compilation with `-fllvm` doesn't have the same issue. this is reproducible on aarch64-linux with current head commit 44309cd377f115d3e6b788097750bd534b47f3e4.
issue