summaryrefslogtreecommitdiffstats
path: root/source/compiler-core/slang-diagnostic-sink.cpp
diff options
context:
space:
mode:
authorAlexey Panteleev <alpanteleev@nvidia.com>2022-05-17 15:05:44 -0700
committerGitHub <noreply@github.com>2022-05-17 15:05:44 -0700
commitd9fd0ff3f0fc7b775de1e05570f01798fbc8baa3 (patch)
tree87943f11f924e3ae3713dc034312b925250ee5bb /source/compiler-core/slang-diagnostic-sink.cpp
parent05c4c2679ae979cfcb61e4c2acdb432c34384ddb (diff)
Configuration for warnings (#2241)
* Added support for disabling specific warnings or turning them into errors. * Added API entry points for adding diagnostic severity overrides and manipulating some sink flags.
Diffstat (limited to 'source/compiler-core/slang-diagnostic-sink.cpp')
-rw-r--r--source/compiler-core/slang-diagnostic-sink.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/source/compiler-core/slang-diagnostic-sink.cpp b/source/compiler-core/slang-diagnostic-sink.cpp
index db2885f05..314ec1c2c 100644
--- a/source/compiler-core/slang-diagnostic-sink.cpp
+++ b/source/compiler-core/slang-diagnostic-sink.cpp
@@ -525,8 +525,34 @@ void DiagnosticSink::diagnoseImpl(DiagnosticInfo const& info, const UnownedStrin
}
}
-void DiagnosticSink::diagnoseImpl(SourceLoc const& pos, DiagnosticInfo const& info, int argCount, DiagnosticArg const* const* args)
+Severity DiagnosticSink::getEffectiveMessageSeverity(DiagnosticInfo const& info)
{
+ Severity effectiveSeverity = info.severity;
+
+ Severity* pSeverityOverride = m_severityOverrides.TryGetValue(info.id);
+
+ // See if there is an override
+ if (pSeverityOverride)
+ {
+ // Override the current severity, but don't allow lowering it if it's Error or Fatal
+ if (effectiveSeverity < Severity::Error || *pSeverityOverride >= effectiveSeverity)
+ effectiveSeverity = *pSeverityOverride;
+ }
+
+ if (isFlagSet(Flag::TreatWarningsAsErrors) && info.severity == Severity::Warning)
+ effectiveSeverity = Severity::Error;
+
+ return effectiveSeverity;
+}
+
+void DiagnosticSink::diagnoseImpl(SourceLoc const& pos, DiagnosticInfo info, int argCount, DiagnosticArg const* const* args)
+{
+ // Override the severity in the 'info' structure to pass it further into formatDiagnostics
+ info.severity = getEffectiveMessageSeverity(info);
+
+ if (info.severity == Severity::Disable)
+ return;
+
StringBuilder messageBuilder;
{
StringBuilder sb;