// -*- C++ -*- //===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef SUPPORT_DEMANGLE_H #define SUPPORT_DEMANGLE_H #include "test_macros.h" #include <string> #include <cstdlib> #if !defined(TEST_HAS_NO_DEMANGLE) # if defined(__GNUC__) || defined(__clang__) # if __has_include("cxxabi.h") && !defined(_LIBCPP_ABI_MICROSOFT) # include "cxxabi.h" # else # define TEST_HAS_NO_DEMANGLE # endif # else # define TEST_HAS_NO_DEMANGLE # endif #endif #if defined(TEST_HAS_NO_DEMANGLE) inline std::string demangle(const char* mangled_name) { return mangled_name; } #else template <size_t N> struct Printer; inline std::string demangle(const char* mangled_name) { int status = 0; char* out = __cxxabiv1::__cxa_demangle(mangled_name, nullptr, nullptr, &status); if (out != nullptr) { std::string res(out); std::free(out); return res; } return mangled_name; } #endif #endif // SUPPORT_DEMANGLE_H