Fix the return type of demangle function so that its compatible across ABIs (#1744)
Этот коммит содержится в:
коммит произвёл
Maneesh Gupta
родитель
150e690a3a
Коммит
1ca75e5f6d
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user