summaryrefslogtreecommitdiffstats
path: root/source/compiler-core
diff options
context:
space:
mode:
Diffstat (limited to 'source/compiler-core')
-rw-r--r--source/compiler-core/slang-diagnostic-sink.cpp41
-rw-r--r--source/compiler-core/slang-diagnostic-sink.h13
2 files changed, 54 insertions, 0 deletions
diff --git a/source/compiler-core/slang-diagnostic-sink.cpp b/source/compiler-core/slang-diagnostic-sink.cpp
index 28a98266a..de8bdf52c 100644
--- a/source/compiler-core/slang-diagnostic-sink.cpp
+++ b/source/compiler-core/slang-diagnostic-sink.cpp
@@ -828,4 +828,45 @@ DiagnosticsLookup::DiagnosticsLookup(
add(diagnostics, diagnosticsCount);
}
+void outputExceptionDiagnostic(
+ const AbortCompilationException& exception,
+ DiagnosticSink& sink,
+ slang::IBlob** outDiagnostics)
+{
+ sink.diagnoseRaw(Severity::Error, exception.Message.getUnownedSlice());
+ sink.getBlobIfNeeded(outDiagnostics);
+}
+
+void outputExceptionDiagnostic(
+ const Exception& exception,
+ DiagnosticSink& sink,
+ slang::IBlob** outDiagnostics)
+{
+ try
+ {
+ sink.diagnoseRaw(Severity::Internal, exception.Message.getUnownedSlice());
+ }
+ catch (const AbortCompilationException&)
+ {
+ // Catch and ignore the AbortCompilationException that diagnoseRaw throws
+ // for Internal severity to prevent exception leak from loadModule
+ }
+ sink.getBlobIfNeeded(outDiagnostics);
+}
+
+void outputExceptionDiagnostic(DiagnosticSink& sink, slang::IBlob** outDiagnostics)
+{
+ try
+ {
+ sink.diagnoseRaw(Severity::Fatal, "An unknown exception occurred");
+ }
+ catch (const AbortCompilationException&)
+ {
+ // Catch and ignore the AbortCompilationException that diagnoseRaw throws
+ // for Fatal severity to prevent exception leak from loadModule
+ }
+ sink.getBlobIfNeeded(outDiagnostics);
+}
+
+
} // namespace Slang
diff --git a/source/compiler-core/slang-diagnostic-sink.h b/source/compiler-core/slang-diagnostic-sink.h
index 2d60747d9..fe05d953b 100644
--- a/source/compiler-core/slang-diagnostic-sink.h
+++ b/source/compiler-core/slang-diagnostic-sink.h
@@ -393,6 +393,19 @@ protected:
MemoryArena m_arena;
};
+
+void outputExceptionDiagnostic(
+ const AbortCompilationException& exception,
+ DiagnosticSink& sink,
+ slang::IBlob** outDiagnostics);
+
+void outputExceptionDiagnostic(
+ const Exception& exception,
+ DiagnosticSink& sink,
+ slang::IBlob** outDiagnostics);
+
+void outputExceptionDiagnostic(DiagnosticSink& sink, slang::IBlob** outDiagnostics);
+
} // namespace Slang
#endif