summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/utilities/clblast_exceptions.cpp29
-rw-r--r--src/utilities/clblast_exceptions.hpp1
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();