[Mesa-dev] [PATCH 1/2] c11/threads: add missing brackets around _MTX_INITIALIZER_NP

Jose Fonseca jfonseca at vmware.com
Mon Aug 18 07:26:28 PDT 2014


On 04/08/14 18:24, Emil Velikov wrote:
> 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 ?

Yes, it's weird.  "{(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0}" always 
worked well for me, both MSVC and Mingw, without warnings.

Jose


More information about the mesa-dev mailing list