diff options
Diffstat (limited to 'source/compiler-core/slang-diagnostic-sink.cpp')
| -rw-r--r-- | source/compiler-core/slang-diagnostic-sink.cpp | 41 |
1 files changed, 41 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 |
