diff options
-rw-r--r-- | src/utilities/clblast_exceptions.cpp | 29 | ||||
-rw-r--r-- | src/utilities/clblast_exceptions.hpp | 1 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/utilities/clblast_exceptions.cpp b/src/utilities/clblast_exceptions.cpp index 8038805d..25e5f4be 100644 --- a/src/utilities/clblast_exceptions.cpp +++ b/src/utilities/clblast_exceptions.cpp @@ -72,6 +72,35 @@ StatusCode DispatchException(const bool silent) return status; } +StatusCode DispatchExceptionCatchAll(const bool silent) +{ + const char *message = nullptr; + StatusCode status; + + try { + throw; + } catch (BLASError &e) { + // no message is printed for invalid argument errors + status = e.status(); + } catch (CLCudaAPIError &e) { + message = e.what(); + status = static_cast<StatusCode>(e.status()); + } catch (RuntimeErrorCode &e) { + message = e.what(); + status = e.status(); + } catch (Error<std::runtime_error> &e) { + message = e.what(); + status = StatusCode::kUnknownError; + } catch (...) { + message = "unknown exception type"; + status = StatusCode::kUnknownError; + } + + if (message && !silent) { + fprintf(stderr, "CLBlast: %s\n", message); + } + return status; +} // ================================================================================================= StatusCode DispatchExceptionForC() diff --git a/src/utilities/clblast_exceptions.hpp b/src/utilities/clblast_exceptions.hpp index 5f2edbae..9bd38187 100644 --- a/src/utilities/clblast_exceptions.hpp +++ b/src/utilities/clblast_exceptions.hpp @@ -38,6 +38,7 @@ class RuntimeErrorCode : public ErrorCode<RuntimeError, StatusCode> { // Handles (most of the) runtime exceptions and converts them to StatusCode StatusCode DispatchException(const bool silent = false); +StatusCode DispatchExceptionCatchAll(const bool silent = false); // Handles remaining exceptions and converts them to StatusCode::kUnhandledError StatusCode DispatchExceptionForC(); |