[PATCH 1/5] avicap32: Define NONAMELESSUNION in files that include objidl.h.

Zebediah Figura z.figura12 at gmail.com
Tue Dec 17 13:08:44 CST 2019


On 12/17/19 12:42 PM, Alexandre Julliard wrote:
> Zebediah Figura <zfigura at codeweavers.com> writes:
> 
>> On 12/17/19 11:37 AM, Alexandre Julliard wrote:
>>> Zebediah Figura <z.figura12 at gmail.com> writes:
>>>
>>>> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47710
>>>> Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
>>>> ---
>>>> This is not currently necessary, but will be with the prescribed solution for
>>>> bug 47710, viz. defining the type _STGMEDIUM_UNION.
>>>
>>> I'm not sure I understand what fix you are proposing, but if it requires
>>> Winelib users to also define NONAMELESSUNION I don't think it's a viable
>>> solution.
>>>
>>
>> Essentially, this:
>>
>> ---
>> diff --git a/include/objidl.idl b/include/objidl.idl
>> index a0ad1f6e01f..4c56c422747 100644
>> --- a/include/objidl.idl
>> +++ b/include/objidl.idl
>> @@ -1427,7 +1427,7 @@ interface IAdviseSink : IUnknown
>>    } GDI_OBJECT;
>>
>>    typedef struct _userSTGMEDIUM {
>> -    union switch(DWORD tymed) u {
>> +    union _STGMEDIUM_UNION switch(DWORD tymed) u {
>>      case TYMED_NULL:     ;
>>      case TYMED_MFPICT:   wireHMETAFILEPICT hMetaFilePict;
>>      case TYMED_ENHMF:    wireHENHMETAFILE hHEnhMetaFile;
>> ---
>>
>> Which causes warnings anywhere that nameless unions are used:
>>
>> ---
>> In file included from ../../../wine/include/objbase.h:258,
>>                  from ../../../wine/include/ole2.h:25,
>>                  from ../../include/strmif.h:13,
>>                  from ../../../wine/dlls/wmcodecdspuuid/wmcodecdspuuid.c:22:
>> ../../include/objidl.h:6109:21: warning: declaration does not declare
>> anything
>>  6109 |     } DUMMYUNIONNAME;
> 
> I'm afraid we'll have to find a different fix then.
> 

I understand the difficulty, but I'm not sure what else we can
reasonably do here. As far as I can see either we have to throw C++
under the bus (i.e. close that bug as WONTFIX), or we have to add
specific differences into widl (or objidl.idl) for winelib, to avoid
violating the C spec. That either means making the structure type
anonymous (i.e. not defining _STGMEDIUM_UNION), which is not
particularly great (not that it's particularly likely anyone would want
to use the _STGMEDIUM_UNION type), or forcibly giving the union member a
name (which would also potentially require changes in winelib user code).

But maybe I'm missing another, more perfect option.



More information about the wine-devel mailing list