From ef04e357f440b1d320a694aef7db011c59ac514e Mon Sep 17 00:00:00 2001 From: "Li, Ian" Date: Fri, 26 Jul 2024 09:50:02 -0700 Subject: [PATCH 1/2] Catch errors thrown in destructors --- sycl/source/detail/device_impl.cpp | 13 ++++++----- sycl/source/detail/kernel_program_cache.hpp | 25 ++++++++++++++------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/sycl/source/detail/device_impl.cpp b/sycl/source/detail/device_impl.cpp index df87da17564e1..8fcbc71350016 100644 --- a/sycl/source/detail/device_impl.cpp +++ b/sycl/source/detail/device_impl.cpp @@ -78,11 +78,14 @@ device_impl::device_impl(pi_native_handle InteropDeviceHandle, } device_impl::~device_impl() { - // TODO catch an exception and put it to list of asynchronous exceptions - const PluginPtr &Plugin = getPlugin(); - sycl::detail::pi::PiResult Err = - Plugin->call_nocheck(MDevice); - __SYCL_CHECK_OCL_CODE_NO_EXC(Err); + try { + const PluginPtr &Plugin = getPlugin(); + sycl::detail::pi::PiResult Err = + Plugin->call_nocheck(MDevice); + __SYCL_CHECK_OCL_CODE_NO_EXC(Err); + } catch (std::exception e) { + __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in ~device_impl", e); + } } bool device_impl::is_affinity_supported( diff --git a/sycl/source/detail/kernel_program_cache.hpp b/sycl/source/detail/kernel_program_cache.hpp index fdaf6d6bb5728..06f0dfb920a24 100644 --- a/sycl/source/detail/kernel_program_cache.hpp +++ b/sycl/source/detail/kernel_program_cache.hpp @@ -99,10 +99,15 @@ class KernelProgramCache { this->State.store(InitialState); } ~ProgramBuildResult() { - if (Val) { - sycl::detail::pi::PiResult Err = - Plugin->call_nocheck(Val); - __SYCL_CHECK_OCL_CODE_NO_EXC(Err); + try { + if (Val) { + sycl::detail::pi::PiResult Err = + Plugin->call_nocheck(Val); + __SYCL_CHECK_OCL_CODE_NO_EXC(Err); + } + } catch (std::exception e) { + __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in ~ProgramBuildResult", + e); } } }; @@ -134,10 +139,14 @@ class KernelProgramCache { Val.first = nullptr; } ~KernelBuildResult() { - if (Val.first) { - sycl::detail::pi::PiResult Err = - Plugin->call_nocheck(Val.first); - __SYCL_CHECK_OCL_CODE_NO_EXC(Err); + try { + if (Val.first) { + sycl::detail::pi::PiResult Err = + Plugin->call_nocheck(Val.first); + __SYCL_CHECK_OCL_CODE_NO_EXC(Err); + } + } catch (std::exception &e) { + __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in ~KernelBuildResult", e); } } }; From a9a1af15e7b5fe645e32a3089a47d7eac282b972 Mon Sep 17 00:00:00 2001 From: "Li, Ian" Date: Fri, 26 Jul 2024 11:08:05 -0700 Subject: [PATCH 2/2] Added missing & --- sycl/source/detail/device_impl.cpp | 2 +- sycl/source/detail/kernel_program_cache.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sycl/source/detail/device_impl.cpp b/sycl/source/detail/device_impl.cpp index 8fcbc71350016..1744885ab7ad5 100644 --- a/sycl/source/detail/device_impl.cpp +++ b/sycl/source/detail/device_impl.cpp @@ -83,7 +83,7 @@ device_impl::~device_impl() { sycl::detail::pi::PiResult Err = Plugin->call_nocheck(MDevice); __SYCL_CHECK_OCL_CODE_NO_EXC(Err); - } catch (std::exception e) { + } catch (std::exception &e) { __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in ~device_impl", e); } } diff --git a/sycl/source/detail/kernel_program_cache.hpp b/sycl/source/detail/kernel_program_cache.hpp index 06f0dfb920a24..119534b45b22b 100644 --- a/sycl/source/detail/kernel_program_cache.hpp +++ b/sycl/source/detail/kernel_program_cache.hpp @@ -105,7 +105,7 @@ class KernelProgramCache { Plugin->call_nocheck(Val); __SYCL_CHECK_OCL_CODE_NO_EXC(Err); } - } catch (std::exception e) { + } catch (std::exception &e) { __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in ~ProgramBuildResult", e); }