[libcxx-commits] [libcxx] [libc++] Make ABI annotations explicit for windows-specific code (PR #140507)

Martin Storsjö via libcxx-commits libcxx-commits at lists.llvm.org
Mon May 19 07:16:25 PDT 2025


mstorsjo wrote:


> I guess so. Is there a tool like `nm` we can use to extract that information on windows? I guess mingw has something very similar, probably even `nm` itself, but I'm not aware of an equivalent for MSVC.

Yeah mingw has got `nm` or `llvm-nm`. For msvc style environments, clang-cl probably ships with `llvm-nm` as well. If not, and for pure MSVC environments (which libc++ don’t support now) you’d maybe use `dumpbin.exe` which would indeed be a more involved matter.

> I've uploaded a new version which should hopefully fix the issue.

Thanks! Libc++ builds now, but building user code now fails
```
/home/martin/clang-nightly-mon/aarch64-w64-mingw32/include/c++/v1/__locale_dir/support/windows.h:186:1: error: cannot add 'abi_tag' attribute in a redeclaration
  186 | _LIBCPP_END_EXPLICIT_ABI_ANNOTATIONS
      | ^
/home/martin/clang-nightly-mon/aarch64-w64-mingw32/include/c++/v1/__config:566:5: note: expanded from macro '_LIBCPP_END_EXPLICIT_ABI_ANNOTATIONS'
  566 |     _Pragma(_LIBCPP_TOSTRING(clang attribute _LibcxxExplicitABIAnnotations.push(__attribute__((                        \
      |     ^
<scratch space>:126:110: note: expanded from here
  126 |  clang attribute _LibcxxExplicitABIAnnotations.push(__attribute__(( __exclude_from_explicit_instantiation__, __abi_tag__("fe210000"))), apply_to = function)
      |                                                                                                              ^
/home/martin/clang-nightly-mon/aarch64-w64-mingw32/include/stdlib.h:606:24: note: previous declaration is here
  606 |   unsigned int __cdecl _rotl(unsigned int _Val,int _Shift);
      |                        ^
/home/martin/clang-nightly-mon/aarch64-w64-mingw32/include/c++/v1/__locale_dir/support/windows.h:186:1: error: unterminated '#pragma clang attribute push' at end of file
  186 | _LIBCPP_END_EXPLICIT_ABI_ANNOTATIONS
      | ^
/home/martin/clang-nightly-mon/aarch64-w64-mingw32/include/c++/v1/__config:566:5: note: expanded from macro '_LIBCPP_END_EXPLICIT_ABI_ANNOTATIONS'
  566 |     _Pragma(_LIBCPP_TOSTRING(clang attribute _LibcxxExplicitABIAnnotations.push(__attribute__((                        \
      |     ^
<scratch space>:126:8: note: expanded from here
  126 |  clang attribute _LibcxxExplicitABIAnnotations.push(__attribute__(( __exclude_from_explicit_instantiation__, __abi_tag__("fe210000"))), apply_to = function)
      |        ^
```

> I don't have a windows environment available, so it's not easy to test for me.

FWIW, I do all this build testing on Linux; a cross compiling llvm-mingw environment is available by just untarring a package from https://github.com/mstorsjo/llvm-mingw/releases. 


https://github.com/llvm/llvm-project/pull/140507


More information about the libcxx-commits mailing list