[vlc-devel] [PATCH v2] thread: fix compilation with clang 7 or older
Marvin Scholz
epirat07 at gmail.com
Mon Mar 2 10:05:01 CET 2020
On 2 Mar 2020, at 9:28, Steve Lhomme wrote:
> On 2020-03-02 8:53, Marvin Scholz wrote:
>> C11's atomic_load_explicit did not allow a const qualified first
>> argument, even though it never modifies it (see DR459).
>> Clang versions 7 or older did implement this quite strictly and
>> therefore errors when compiling this code:
>>
>> address argument to atomic operation must be a pointer to
>> non-const
>> _Atomic type ('const _Atomic(const void *) *' invalid)
>>
>> See https://reviews.llvm.org/D47618 and
>> https://reviews.llvm.org/D47613
>> ---
>> src/misc/threads.c | 12 +++++++++++-
>> 1 file changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/misc/threads.c b/src/misc/threads.c
>> index ea78e37453..db90a27240 100644
>> --- a/src/misc/threads.c
>> +++ b/src/misc/threads.c
>> @@ -135,11 +135,21 @@ static _Thread_local char thread_self[1];
>> bool vlc_mutex_held(const vlc_mutex_t *mtx)
>> {
>> +#if defined(__clang__) && !defined(__apple_build_version__) &&
>> (__clang_major__ < 8)
>
> The Apple 7- versions don't have this issue ?
>
> IMO it's OK not to add the distinction for this compiler flavor.
> Otherwsise we'd have to check which version from which vendor has the
> issue.
>
> LGTM otherwise.
Apple Clang uses a different versioning compared to the Open Source
releases.
I can’t easily check if whatever versions might correspond to the
affected ones
have this issue.
I tried it with Xcode 10 and it was fine. Given that Xcode 10 is the
oldest Xcode
version we currently support for 4.x, I believe there is no need to
check.
>
>> + /* The explicit cast to non-const is needed to workaround a
>> clang
>> + * error with clang 7 or lower, as atomic_load_explicit in C11
>> did not
>> + * allow its first argument to be const-qualified (see DR459)
>> + */
>> + vlc_mutex_t *tmp_mtx = (vlc_mutex_t *)mtx;
>> +#else
>> + const vlc_mutex_t *tmp_mtx = mtx;
>> +#endif
>> +
>> /* This comparison is thread-safe:
>> * Even though other threads may modify the owner field at any
>> time,
>> * they will never make it compare equal to the calling thread.
>> */
>> - return THREAD_SELF == atomic_load_explicit(&mtx->owner,
>> + return THREAD_SELF == atomic_load_explicit(&tmp_mtx->owner,
>> memory_order_relaxed);
>> }
>> --
>> 2.21.1 (Apple Git-122.3)
>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list