[cfe-dev] Does libc++ really need both _LIBCPP_INLINE_VISIBILITY and _LIBCPP_ALWAYS_INLINE?

Eric Fiselier via cfe-dev cfe-dev at lists.llvm.org
Wed Dec 9 16:44:52 PST 2015

Hi All,

Recently there has been a lot of work done on cleaning up libc++'s
visibility annotations. To continue this work I would like to figure out
why libc++ has two different macros, '_LIBCPP_INLINE_VISIBILITY` and
`_LIBCPP_ALWAYS_INLINE`, for expressing function visibility. If there is no
need for both macros I would like to remove one of them entirely.

On every platform and configuration except for Clang on Windows these
macros have identical definitions. The definition is
`__attribute__((__visibility__("hidden"), __always_inline__))`. (Note:
libc++ detects "Windows" using _WIN32, so this affects mingw and other

However the macros get different definitions when using Clang on Windows.

#define _LIBCPP_INLINE_VISIBILITY __attribute__((__always_inline__))
#define _LIBCPP_ALWAYS_INLINE  __attribute__((__visibility__("hidden"),

I'm almost certain this difference is unintentional. However before I
remove one in favor of the other I would like to be sure this is the
correct thing to do.

I would like to find out if:

1.Do visibility attributes have any effect on windows? If not the two
definitions are already functionally identical.
2. Is there any other reason we might need two different macros on windows?

Any input would be appreciated. I want to make sure I'm on the right path
before making such a large change.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20151209/7ee6f3ad/attachment.html>

More information about the cfe-dev mailing list