fix-gcc14-ffi_arg
authorDebian Haskell Group <pkg-haskell-maintainers@lists.alioth.debian.org>
Wed, 10 Apr 2024 11:24:01 +0000 (14:24 +0300)
committerIlias Tsitsimpis <iliastsi@debian.org>
Wed, 10 Apr 2024 11:24:01 +0000 (14:24 +0300)
commit 1f534c2e7388273e70534680212c1357614c11ed
Author: Florian Weimer <fweimer@redhat.com>
Date:   Thu Feb 15 15:19:52 2024 +0000

    Fix C output for modern C initiative

    GCC 14 on aarch64 rejects the C code written by GHC with this kind of
    error:

       error: assignment to ‘ffi_arg’ {aka ‘long unsigned int’} from ‘HsPtr’ {aka ‘void *’} makes integer from pointer without a cast [-Wint-conversion]
             68 | *(ffi_arg*)resp = cret;
                |                 ^

    Add the correct cast.

    For more information on this see:
    https://fedoraproject.org/wiki/Changes/PortingToModernC

Tested-by: Richard W.M. Jones <rjones@redhat.com>
Gbp-Pq: Name fix-gcc14-ffi_arg

compiler/GHC/HsToCore/Foreign/Decl.hs

index 68980f5b12d1cf9c0ef50922e7c2275e65ce69e7..4fb1b6f170ee3e16abbf09f7ad0e2f78561cc7bc 100644 (file)
@@ -681,7 +681,7 @@ mkFExportCBits dflags c_nm maybe_target arg_htys res_hty is_IO_res_ty cc
      ,   ppUnless res_hty_is_unit $
          if libffi
                   then char '*' <> parens (ffi_cResType <> char '*') <>
-                       text "resp = cret;"
+                       text "resp = " <> parens ffi_cResType <> text "cret;"
                   else text "return cret;"
      , rbrace
      ]