FreeBSD uses libcxxrt (via libc++) instead of GNU libiberty (via libstdc++) for __cxa_demangle(). When *output_buffer* and *length* both are NULL it doesn't modify *status* on success. Rather than rely on maybe uninitialized variable check the function doesn't return NULL.
Fixes: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=213732 Reviewed-by: Pan Xiuli <[email protected]> --- backend/src/llvm/llvm_gen_backend.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/llvm/llvm_gen_backend.hpp b/backend/src/llvm/llvm_gen_backend.hpp index 1ab77c9d..ae486c5e 100644 --- a/backend/src/llvm/llvm_gen_backend.hpp +++ b/backend/src/llvm/llvm_gen_backend.hpp @@ -82,9 +82,9 @@ namespace gbe auto it = map.find(symbol); if (it == map.end()) { - int status; + int status = 0; /* set for libcxxrt */ char *realName = abi::__cxa_demangle(symbol.c_str(), NULL, NULL, &status); - if (status == 0) { + if (realName) { std::string realFnName(realName), stripName; stripName = realFnName.substr(0, realFnName.find("(")); it = map.find(stripName); _______________________________________________ Beignet mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/beignet
