Fix the return type of demangle function so that its compatible across ABIs (#1744)

Этот коммит содержится в:
saleelk
2019-12-23 05:41:40 -08:00
коммит произвёл Maneesh Gupta
родитель 150e690a3a
Коммит 1ca75e5f6d
2 изменённых файлов: 14 добавлений и 13 удалений
+5 -4
Просмотреть файл
@@ -84,7 +84,7 @@ hiprtcResult hiprtcGetCodeSize(hiprtcProgram prog, std::size_t* codeSizeRet);
namespace hip_impl
{
std::string demangle(const char* mangled_expression);
char* demangle(const char* mangled_expression);
}
#if defined(HIPRTC_GET_TYPE_NAME)
@@ -102,10 +102,11 @@ namespace hip_impl
{
if (!result) return HIPRTC_ERROR_INVALID_INPUT;
*result = hip_impl::demangle(typeid(T).name());
char * res= hip_impl::demangle(typeid(T).name());
result->assign(res == nullptr ? "" : res);
std::free(res);
return (result->empty()) ? HIPRTC_ERROR_INTERNAL_ERROR :
HIPRTC_SUCCESS;
}
#endif
#endif
#endif
+9 -9
Просмотреть файл
@@ -143,7 +143,9 @@ struct _hiprtcProgram {
{
using namespace std;
name = hip_impl::demangle(name.c_str());
char* demangled = hip_impl::demangle(name.c_str());
name.assign(demangled == nullptr ? "" : demangled);
free(demangled);
if (name.empty()) return name;
@@ -392,18 +394,16 @@ namespace
namespace hip_impl
{
inline
std::string demangle(const char* x)
char* demangle(const char* x)
{
if (!x) return {};
if (!x) return nullptr;
int s{};
std::unique_ptr<char, decltype(std::free)*> tmp{
abi::__cxa_demangle(x, nullptr, nullptr, &s), std::free};
char* tmp = abi::__cxa_demangle(x, nullptr, nullptr, &s);
if (s != 0) return {};
if (s != 0) return nullptr;
return tmp.get();
return tmp;
}
} // Namespace hip_impl.
@@ -598,4 +598,4 @@ hiprtcResult hiprtcGetCodeSize(hiprtcProgram p, std::size_t* sz)
*sz = p->elf.size();
return HIPRTC_SUCCESS;
}
}