<div dir="ltr">Hi All,<div><br></div><div>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. </div><div><br></div><div>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 enviroments)</div><div><br></div><div>However the macros get different definitions when using Clang on Windows.</div><div><br></div><div><div>#define _LIBCPP_INLINE_VISIBILITY __attribute__((__always_inline__))</div><div>#define _LIBCPP_ALWAYS_INLINE  __attribute__((__visibility__("hidden"), __always_inline__))</div><div><br></div><div>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.</div></div><div><br></div><div>I would like to find out if:</div><div><br></div><div>1.Do visibility attributes have any effect on windows? If not the two definitions are already functionally identical.</div><div>2. Is there any other reason we might need two different macros on windows?</div><div><br></div><div>Any input would be appreciated. I want to make sure I'm on the right path before making such a large change.</div><div><br></div><div>/Eric</div><div><br></div><div><br></div><div><br></div><div><br></div></div>