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

Andrew munin at mimisbrunnr.net
Wed May 18 06:46:40 PDT 2011


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?

Thank you,

Andrew



More information about the cfe-dev mailing list