Skip to content

Instantly share code, notes, and snippets.

@kassane
Last active January 13, 2025 19:54
Show Gist options
  • Save kassane/6c03b4ffcae1ea6c1f3f30d54170acd0 to your computer and use it in GitHub Desktop.
Save kassane/6c03b4ffcae1ea6c1f3f30d54170acd0 to your computer and use it in GitHub Desktop.
C++ Different mangling (Itanium ABI)

Testing

  • C++20 (g++ & clang++)
  • Circle (safe-cpp)
  • D (extern(C++))
  • Rust (legacy)

url: https://godbolt.org/z/P9EMxWveK

based on: llvm/llvm-project#62765

Result

  • gnu: _ZNK1n1S3getIbEENSt9enable_ifIXsrSt11is_integralIT_E5valueEN4llvm8OptionalIS4_EEE4typeENS6_9StringRefE
  • clang: _ZNK1n1S3getIbEENSt9enable_ifIXsr3std11is_integralIT_EE5valueEN4llvm8OptionalIS3_EEE4typeENS4_9StringRefE
  • circle: _ZNK1n1S3getIbEESt11enable_if_tIXEN4llvm8OptionalIT_EEENS3_9StringRefE
  • ldc: _ZNK1n1S3getIbEEN4llvm8OptionalIbEENS2_9StringRefE
  • gdc: _ZNK1n1S3getIbEEN4llvm8OptionalIbEENS2_9StringRefE
  • dmd: _ZNK1n1S3getIbEEN4llvm8OptionalIbEENS2_9StringRefE
  • rustc: _ZN7example1n1S3get17h871c28d6645bba16E
Demangling

Note

Circle use custom-mangling, not working in c++filt or llvm-cxxfilt(upstream).

C++/GNU

$ c++filt _ZNK1n1S3getIbEENSt9enable_ifIXsrSt11is_integralIT_E5valueEN4llvm8OptionalIS4_EEE4typeENS6_9StringRefE
std::enable_if<std::is_integral<bool>::value, llvm::Optional<bool> >::type n::S::get<bool>(llvm::StringRef) const

C++/clang

$ c++filt _ZNK1n1S3getIbEENSt9enable_ifIXsr3std11is_integralIT_EE5valueEN4llvm8OptionalIS3_EEE4typeENS4_9StringRefE
std::enable_if<std::is_integral<bool>::value, llvm::Optional<bool> >::type n::S::get<bool>(llvm::StringRef) const

D

$ c++filt _ZNK1n1S3getIbEEN4llvm8OptionalIbEENS2_9StringRefE
llvm::Optional<bool> n::S::get<bool>(llvm::StringRef) const

Rust

$ c++filt _ZN7example1n1S3get17h871c28d6645bba16E           
example::n::S::get::h871c28d6645bba16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment