[cfe-dev] Building Wine with clang on Mac OS X 10.6

Douglas Gregor dgregor at apple.com
Mon Oct 26 16:13:49 PDT 2009


On Oct 19, 2009, at 9:22 AM, Charles Davis wrote:

> Douglas Gregor wrote:
>>
>> On Oct 19, 2009, at 8:33 AM, Charles Davis wrote:
>>> As I said earlier (in an email some of you may not have gotten, I  
>>> got a
>>> bunch of warning diagnostics about
>>> __attribute__((__force_align_arg_pointer__)), which, according to a
>>> comment in include/windef.h, is supposed to ensure the stack remains
>>> 16-byte aligned. Is this needed under clang for __stdcall  
>>> functions on
>>> Mac OS X? It's apparently needed under gcc.
>>
>> We don't have support for this attribute in Clang, and I don't know
>> whether it is necessary for what you're doing. Please file an  
>> extension
>> request at
>>
>>    http://llvm.org/bugs/
> You don't? Well then, I guess, to be on the safe side, I should file a
> request.

Thanks, I see it at http://llvm.org/bugs/show_bug.cgi?id=5254

>>> Speaking of __stdcall, I got some diagnostics related to
>>> __attribute__((__stdcall__)) being used on function pointers. gcc  
>>> does
>>> not complain about this. Is this a known issue?
>>
>> Not one I know about. What diagnostics on what code?
> Basically, any code that defines a __stdcall function pointer typedef,
> like this one for example:
>
> ../../include/winnt.h:5034:15: warning: '__stdcall__' attribute only
> applies to
> function types
> typedef VOID (NTAPI * PFLS_CALLBACK_FUNCTION) ( PVOID );
>              ^
> ../../include/winnt.h:44:15: note: instantiated from:
> #define NTAPI __stdcall
>              ^../../include/windef.h:57:38: note: instantiated from:
> #    define __stdcall __attribute__((__stdcall__))
> __attribute__((__force_align_
> arg_pointer__))                                     ^


This boils down to, e.g.,

	typedef void (__attribute__((stdcall)) * callback)(int, int);

which we complain about:

stdcall.c:1:30: warning: 'stdcall' attribute only applies to function  
types
typedef void (__attribute__((stdcall)) * callback)(int, int);
                              ^

Basically, we don't yet have a way to encode the stdcall attribute in  
the type system, so we can't form a function pointer to a stdcall  
function. I've filed a PR for this, here:

	http://llvm.org/bugs/show_bug.cgi?id=5310

	- Doug



More information about the cfe-dev mailing list