[cfe-dev] clang, static/inline, and windows.h

Douglas Gregor dgregor at apple.com
Wed May 18 08:54:47 PDT 2011


On May 18, 2011, at 6:46 AM, Andrew wrote:

> List,
> 
> I am working on having clang parse a recent windows.h header. I am
> encountering great success, however I have one problem with inlined
> functions. In winnt.h, there are a series of definitions for
> Int64ShllMod32 and related functions, these functions are defined as
> __inline. Compiling a multi file project with clang produces errors
> because these functions appear more than once and at link time
> collisions occur.
> 
> The problem seems to stem from the functions not being defined as
> 'static'. If the functions are defined as static, they are inlined and
> removed during compilation. Without the static definition, the
> optimizer doesn't know it is safe to remove the functions after they
> have been inlined.
> 
> It seems that MSVC silently promotes any function declared __inline or
> __forceinline to static (or something equivalent/similar). My thinking
> is adding in a "compatibility" layer to clang so that when dealing
> with windows header files clang also promotes any function defined as
> inline to static storage. What does the list think? Is this a good
> idea? If it is, where would a good place to start in clang be to
> implement it? If it isn't a good idea, what would be?


This is most likely due to Clang defaulting to C99 and its inline semantics, rather than the inline semantics used (e.g.) by GNU C or C++. As a simple experiment, try adding

	-std=gnu89

to your command line.

See

	http://clang.llvm.org/compatibility.html#inline

for more information.

	- Doug



More information about the cfe-dev mailing list