[FFmpeg-cvslog] compat/atomics: add typecasts in atomic_compare_exchange_strong()
Wan-Teh Chang
git at videolan.org
Fri Apr 14 00:28:02 EEST 2017
ffmpeg | branch: master | Wan-Teh Chang <wtc at google.com> | Fri Dec 2 16:56:16 2016 -0800| [6a93b596c5c3af31b843d63013a7985ffeea354d] | committer: Vittorio Giovara
compat/atomics: add typecasts in atomic_compare_exchange_strong()
The Solaris and Windows emulations of atomic_compare_exchange_strong()
need typecasts to avoid compiler warnings, because the functions they
call expect a void* pointer but an intptr_t integer is passed.
Note that the emulations of atomic_compare_exchange_strong() (except
the gcc version) only work for atomic_intptr_t because of the type of
the second argument (|expected|). See
http://en.cppreference.com/w/c/atomic:
_Bool atomic_compare_exchange_strong( volatile A* obj,
C* expected, C desired );
The types of the first argument and second argument are different
(|A| and |C|, respectively). |C| is the non-atomic type corresponding
to |A|. In the emulations of atomic_compare_exchange_strong(), |C| is
intptr_t. This implies |A| can only be sig_intptr_t.
Signed-off-by: Wan-Teh Chang <wtc at google.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6a93b596c5c3af31b843d63013a7985ffeea354d
---
compat/atomics/suncc/stdatomic.h | 2 +-
compat/atomics/win32/stdatomic.h | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/compat/atomics/suncc/stdatomic.h b/compat/atomics/suncc/stdatomic.h
index 32129aae53..aef498d022 100644
--- a/compat/atomics/suncc/stdatomic.h
+++ b/compat/atomics/suncc/stdatomic.h
@@ -108,7 +108,7 @@ static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *exp
intptr_t desired)
{
intptr_t old = *expected;
- *expected = atomic_cas_ptr(object, old, desired);
+ *expected = (intptr_t)atomic_cas_ptr(object, (void *)old, (void *)desired);
return *expected == old;
}
diff --git a/compat/atomics/win32/stdatomic.h b/compat/atomics/win32/stdatomic.h
index bdd39337a3..9cfdaa523f 100644
--- a/compat/atomics/win32/stdatomic.h
+++ b/compat/atomics/win32/stdatomic.h
@@ -104,7 +104,8 @@ static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *exp
intptr_t desired)
{
intptr_t old = *expected;
- *expected = InterlockedCompareExchangePointer(object, desired, old);
+ *expected = (intptr_t)InterlockedCompareExchangePointer(
+ (PVOID *)object, (PVOID)desired, (PVOID)old);
return *expected == old;
}
More information about the ffmpeg-cvslog
mailing list