diff options
author | nineonine <mail4chemik@gmail.com> | 2022-11-10 21:03:11 -0800 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-11-23 12:47:11 -0500 |
commit | 99aca26b652603bc62953157a48e419f737d352d (patch) | |
tree | e50cb238a39bbbd7fe4d9d32b1af8ed290236433 /docs | |
parent | b5c714545abc5f75a1ffdcc39b4bfdc7cd5e64b4 (diff) | |
download | haskell-99aca26b652603bc62953157a48e419f737d352d.tar.gz |
CApiFFI: add ConstPtr for encoding const-qualified pointer return types (#22043)
Previously, when using `capi` calling convention in foreign declarations,
code generator failed to handle const-cualified pointer return types.
This resulted in CC toolchain throwing `-Wincompatible-pointer-types-discards-qualifiers`
warning.
`Foreign.C.Types.ConstPtr` newtype was introduced to handle these cases -
special treatment was put in place to generate appropritetly qualified C
wrapper that no longer triggers the above mentioned warning.
Fixes #22043
Diffstat (limited to 'docs')
-rw-r--r-- | docs/users_guide/9.6.1-notes.rst | 3 | ||||
-rw-r--r-- | docs/users_guide/exts/ffi.rst | 12 |
2 files changed, 15 insertions, 0 deletions
diff --git a/docs/users_guide/9.6.1-notes.rst b/docs/users_guide/9.6.1-notes.rst index dfd800d11b..ef3078bbfa 100644 --- a/docs/users_guide/9.6.1-notes.rst +++ b/docs/users_guide/9.6.1-notes.rst @@ -157,6 +157,9 @@ Runtime system ``ghc`` library ~~~~~~~~~~~~~~~ +- Add `Foreign.C.Types.ConstPtr` was added to encode ``const``-qualified pointer return + types in foreign declarations when using ``CApiFFI`` extension. + ``ghc-heap`` library ~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/users_guide/exts/ffi.rst b/docs/users_guide/exts/ffi.rst index b490ac662d..f23c223279 100644 --- a/docs/users_guide/exts/ffi.rst +++ b/docs/users_guide/exts/ffi.rst @@ -437,6 +437,18 @@ specified. The syntax looks like: :: data {-# CTYPE "unistd.h" "useconds_t" #-} T = ... newtype {-# CTYPE "useconds_t" #-} T = ... +In case foreign declarations contain ``const``-qualified pointer return +type, `ConstPtr` from :base-ref:`Foreign.C.Types` may be used to +encode this, e.g. :: + + foreign import capi "header.h f" f :: CInt -> ConstPtr CInt + +which corresponds to + +.. code-block:: c + + const *int f(int); + ``hs_thread_done()`` ~~~~~~~~~~~~~~~~~~~~ |