diff options
author | ylavic <ylavic@13f79535-47bb-0310-9956-ffa450edef68> | 2022-06-24 13:19:46 +0000 |
---|---|---|
committer | ylavic <ylavic@13f79535-47bb-0310-9956-ffa450edef68> | 2022-06-24 13:19:46 +0000 |
commit | 2b3f411c8e80d33ee2f4cf1f6c930bb5f1f7d43b (patch) | |
tree | 07b48037e077d22c19c0aa0a055c20f984662b15 | |
parent | 2b0db015c28f37494877d6d5a585342c511393fd (diff) | |
download | libapr-2b3f411c8e80d33ee2f4cf1f6c930bb5f1f7d43b.tar.gz |
atomic: Fix -Wincompatible-pointer-types-discards-qualifiers
atomic/unix/builtins.c:117:38: warning: passing 'void **' to parameter of type 'volatile void **' discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
__atomic_compare_exchange_n(mem, (void **)&cmp, ptr, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
^~~~~~~~~~~~~
This warning is weird, because 'volatile void **' is not a thing usually, it
happens on macos in apr-1.x, where apr_atomic_casptr() is (ill-)defined as:
APR_DECLARE(void*) apr_atomic_casptr(volatile void **mem, void *ptr, const void *cmp);
but not on trunk's:
APR_DECLARE(void*) apr_atomic_casptr(void *volatile *mem, void *ptr, const void *cmp);
The mark clearly indicates that (void **)&cmp is the culprit though (compiler bug?).
Let's see if using the generic (void *) cast helps, the goal of the (void **)
cast was to remove constantness only (__atomic_compare_exchange_n will modify
the pointer on stack, but not the pointed to value), (void *) will do that too
without any volatile qualifier issue possibly.
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1902233 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | atomic/unix/builtins.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/atomic/unix/builtins.c b/atomic/unix/builtins.c index 7aaada2f4..e604a3d26 100644 --- a/atomic/unix/builtins.c +++ b/atomic/unix/builtins.c @@ -114,7 +114,7 @@ APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint APR_DECLARE(void*) apr_atomic_casptr(void *volatile *mem, void *ptr, const void *cmp) { #if HAVE__ATOMIC_BUILTINS - __atomic_compare_exchange_n(mem, (void **)&cmp, ptr, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); + __atomic_compare_exchange_n(mem, (void *)&cmp, ptr, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); return (void *)cmp; #else return (void *)__sync_val_compare_and_swap(mem, (void *)cmp, ptr); |