diff --git a/sycl/source/detail/device_image_impl.hpp b/sycl/source/detail/device_image_impl.hpp index e54fc0b2976c0..0786457d3a7c9 100644 --- a/sycl/source/detail/device_image_impl.hpp +++ b/sycl/source/detail/device_image_impl.hpp @@ -95,10 +95,14 @@ class device_image_impl { // Otherwise, if the device candidate is a sub-device it is also valid if // its parent is valid. - if (!getSyclObjImpl(DeviceCand)->isRootDevice()) - return has_kernel(KernelIDCand, - DeviceCand.get_info()); - + if (!getSyclObjImpl(DeviceCand)->isRootDevice()) { + try { + return has_kernel(KernelIDCand, + DeviceCand.get_info()); + } catch (std::exception &e) { + __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in has_kernel", e); + } + } return false; } @@ -270,10 +274,15 @@ class device_image_impl { // TODO consider changing the lifetime of device_image_impl instead ur_buffer_properties_t Properties = {UR_STRUCTURE_TYPE_BUFFER_PROPERTIES, nullptr, MSpecConstsBlob.data()}; - memBufferCreateHelper( - Plugin, detail::getSyclObjImpl(MContext)->getHandleRef(), - UR_MEM_FLAG_READ_WRITE | UR_MEM_FLAG_ALLOC_COPY_HOST_POINTER, - MSpecConstsBlob.size(), &MSpecConstsBuffer, &Properties); + try { + memBufferCreateHelper( + Plugin, detail::getSyclObjImpl(MContext)->getHandleRef(), + UR_MEM_FLAG_READ_WRITE | UR_MEM_FLAG_ALLOC_COPY_HOST_POINTER, + MSpecConstsBlob.size(), &MSpecConstsBuffer, &Properties); + } catch (std::exception &e) { + __SYCL_REPORT_EXCEPTION_TO_STREAM( + "exception in get_spec_const_buffer_ref", e); + } } return MSpecConstsBuffer; } diff --git a/sycl/source/detail/global_handler.cpp b/sycl/source/detail/global_handler.cpp index 93979c33feb42..8376212984d76 100644 --- a/sycl/source/detail/global_handler.cpp +++ b/sycl/source/detail/global_handler.cpp @@ -355,8 +355,14 @@ void shutdown_late() { extern "C" __SYCL_EXPORT BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { - bool PrintUrTrace = - sycl::detail::ur::trace(sycl::detail::ur::TraceLevel::TRACE_CALLS); + bool PrintUrTrace = false; + try { + PrintUrTrace = + sycl::detail::ur::trace(sycl::detail::ur::TraceLevel::TRACE_CALLS); + } catch (std::exception &e) { + __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in DllMain", e); + return FALSE; + } // Perform actions based on the reason for calling. switch (fdwReason) { @@ -367,7 +373,8 @@ extern "C" __SYCL_EXPORT BOOL WINAPI DllMain(HINSTANCE hinstDLL, #ifdef XPTI_ENABLE_INSTRUMENTATION if (xptiTraceEnabled()) return TRUE; // When doing xpti tracing, we can't safely call shutdown. - // TODO: figure out what XPTI is doing that prevents release. + // TODO: figure out what XPTI is doing that prevents + // release. #endif shutdown_win(); diff --git a/sycl/source/detail/graph_impl.cpp b/sycl/source/detail/graph_impl.cpp index 02ce8bb8a485b..b9d6ed00cc659 100644 --- a/sycl/source/detail/graph_impl.cpp +++ b/sycl/source/detail/graph_impl.cpp @@ -1618,16 +1618,17 @@ void modifiable_command_graph::end_recording() { void modifiable_command_graph::end_recording(queue &RecordingQueue) { auto QueueImpl = sycl::detail::getSyclObjImpl(RecordingQueue); - if (QueueImpl && QueueImpl->getCommandGraph() == impl) { + if (!QueueImpl) + return; + if (QueueImpl->getCommandGraph() == impl) { QueueImpl->setCommandGraph(nullptr); graph_impl::WriteLock Lock(impl->MMutex); impl->removeQueue(QueueImpl); } - if (QueueImpl->getCommandGraph() != nullptr) { + if (QueueImpl->getCommandGraph() != nullptr) throw sycl::exception(sycl::make_error_code(errc::invalid), "end_recording called for a queue which is recording " "to a different graph."); - } } void modifiable_command_graph::end_recording( diff --git a/sycl/source/detail/image_impl.hpp b/sycl/source/detail/image_impl.hpp index 008d86df2799e..5ee3b473aac8b 100644 --- a/sycl/source/detail/image_impl.hpp +++ b/sycl/source/detail/image_impl.hpp @@ -238,7 +238,12 @@ class image_impl final : public SYCLMemObjT { // Returns the total number of elements in the image size_t get_count() const { return size(); } - size_t size() const noexcept { return MRange.size(); } + size_t size() const noexcept try { + return MRange.size(); + } catch (std::exception &e) { + __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in size", e); + std::abort(); + } void *allocateMem(ContextImplPtr Context, bool InitFromUserData, void *HostPtr, ur_event_handle_t &OutEventToWait) override; diff --git a/sycl/source/event.cpp b/sycl/source/event.cpp index 3f9048284abac..1698298014608 100644 --- a/sycl/source/event.cpp +++ b/sycl/source/event.cpp @@ -117,7 +117,12 @@ event::get_profiling_info() const { #undef __SYCL_PARAM_TRAITS_SPEC -backend event::get_backend() const noexcept { return getImplBackend(impl); } +backend event::get_backend() const noexcept try { + return getImplBackend(impl); +} catch (std::exception &e) { + __SYCL_REPORT_EXCEPTION_TO_STREAM("exception in get_backend", e); + std::abort(); +} ur_native_handle_t event::getNative() const { return impl->getNative(); }