[vlc-devel] [PATCH 1/2] posix/wait: do not use alignof on expression

Marvin Scholz epirat07 at gmail.com
Fri Aug 7 19:55:45 CEST 2020


Trying to use _Generic to ensure the expression has the expected type.

How would you do the static assertion, it would lead to
the exactly same issue as I am hitting here, no?

On 7 Aug 2020, at 19:52, Rémi Denis-Courmont wrote:

> I don't know what you're trying to do there, and that does not look 
> like a static assertion to me.
>
> Le 7 août 2020 16:37:47 GMT+03:00, Marvin Scholz <epirat07 at gmail.com> 
> a écrit :
>>
>>
>> On 7 Aug 2020, at 14:42, Rémi Denis-Courmont wrote:
>>
>>> Hi,
>>>
>>> You can use _Generic() if you want to match types. No need for
>>> compiler-dependent ifdef'ery.
>>>
>>> Might be overkill here though.
>>
>> I thought about that too but the following does not work:
>>
>> # define VLC_ALIGNOF(t, expr) \
>>   (_Generic(expr, t: _Alignof(t)))
>>
>> atomic_uint *addr;
>> VLC_ALIGNOFT(atomic_uint, *addr);
>>
>> This fails to compile with:
>> error: '_Generic' selector of type 'unsigned int' is not compatible
>> with
>> any association
>>
>>>
>>> Le 7 août 2020 07:55:35 GMT+03:00, Steve Lhomme <robux4 at ycbcr.xyz> 
>>> a
>>> écrit :
>>>> OK for both. Although it would be nice to have a safety check in
>> case
>>>> the underlying type changes and the alignof is not valid anymore.
>>>>
>>>> May a static_assert when compiling with GCC, like
>>>> #if defined(__GNUC__) && !defined(__llvm__) &&
>>>> !defined(__INTEL_COMPILER)
>>>> static_assert(alignof(*addr) == alignof(atomic_uint), "type
>>>> mismatch");
>>>> #endif
>>>>
>>>>
>>>> On 2020-08-07 6:44, Marvin Scholz wrote:
>>>>> Using alignof not on a type but an expression is a GNU extension
>> and
>>>>> causes the following warning:
>>>>>
>>>>>     warning: '_Alignof' applied to an expression is a GNU 
>>>>> extension
>>>>> ---
>>>>>   src/posix/wait.c | 2 +-
>>>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/src/posix/wait.c b/src/posix/wait.c
>>>>> index 584cc493b1a..3fa6890193a 100644
>>>>> --- a/src/posix/wait.c
>>>>> +++ b/src/posix/wait.c
>>>>> @@ -52,7 +52,7 @@ static struct wait_bucket
>>>>>   static struct wait_bucket *wait_bucket_get(atomic_uint *addr)
>>>>>   {
>>>>>       uintptr_t u = (uintptr_t)addr;
>>>>> -    size_t idx = (u / alignof (*addr)) % 
>>>>> ARRAY_SIZE(wait_buckets);
>>>>> +    size_t idx = (u / alignof (atomic_uint)) %
>>>> ARRAY_SIZE(wait_buckets);
>>>>>
>>>>>       return &wait_buckets[idx];
>>>>>   }
>>>>> -- 
>>>>> 2.24.3 (Apple Git-128)
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>
>>> -- 
>>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
>>> excuser ma brièveté.
>>
>>
>>> _______________________________________________
>>> 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
>
> -- 
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez 
> excuser ma brièveté.


> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20200807/33b3d2a8/attachment.html>


More information about the vlc-devel mailing list