[Mesa-dev] [PATCH 1/2] c11/threads: add missing brackets around _MTX_INITIALIZER_NP
Emil Velikov
emil.l.velikov at gmail.com
Mon Aug 4 10:24:58 PDT 2014
On 02/08/14 02:51, Emil Velikov wrote:
> On 02/08/14 00:26, Ian Romanick wrote:
>> On 08/01/2014 09:41 AM, Emil Velikov wrote:
>>> ... for win32 builds. Spotted this warning when I've imported the
>>> library into waffle, and gave mingw-w64-gcc a bash at compiling it.
>>>
>>> src/waffle/core/wcore_display.c:37:5: warning: missing braces around
>>> initializer [-Wmissing-braces]
>>> static mtx_t mutex = _MTX_INITIALIZER_NP;
>>> ^
>>>
>>> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
>>> ---
>>> include/c11/threads_win32.h | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/include/c11/threads_win32.h b/include/c11/threads_win32.h
>>> index 5298a84..35880ba 100644
>>> --- a/include/c11/threads_win32.h
>>> +++ b/include/c11/threads_win32.h
>>> @@ -85,7 +85,7 @@ Configuration macro:
>>> #define TSS_DTOR_ITERATIONS 1
>>>
>>> // FIXME: temporary non-standard hack to ease transition
>>> -#define _MTX_INITIALIZER_NP {(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0}
>>> +#define _MTX_INITIALIZER_NP {{(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0}}
>>
>> This is because CRITICAL_SECTION is actually a typedef of a pointer to
>> some structure type, so it needs to be initialized like an array of
>> strcutres. Yeah?
>>
> I wish I could agree.
>
> CRITICAL_SECTION is a typedef of a typedef'ed struct (no pointers yet) where
> the first member is a struct *, as seen below.
>
> typedef B CRITICAL_SECTION;
> typedef struct A {
> struct *bla;
> ...
> } B;
>
> I remember spending a few hours reading and experimenting with this and every
> way I looked at it current code seems sane. In the end I've smashed the
> brackets not to pollute the build log and carried on with other stuff :) Don't
> think I have checked if MSVC complained about the issue though. Will give it a
> try next time I reboot.
>
>
>> I searched a bit on the net, and I could not find a single example of
>> initializing a win32 CRITICAL_SECTION this way. Is this a good idea?
>> The FIXME comment doesn't inspire confidence...
>>
> Same here. AFAICS one should init the "mutex" via InitializeCriticalSection or
> InitializeCriticalSectionAndSpinCount. Either of which is very Win32 specific
> and not at all portable. Perhaps Jose (the author) can share some more
> insights on the topic ?
>
Fun stuff. MSVC produces _no_ warnings with or without this patch. Not sure
what exactly is happening here, perhaps I'm hitting some obscure mingw-w64
(gcc?) bug ?
-Emil
>
> -Emil
>
>>> /*---------------------------- types ----------------------------*/
>>> typedef struct cnd_t {
>>>
>>
>
More information about the mesa-dev
mailing list