summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-decl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-decl.cpp')
-rw-r--r--source/slang/slang-check-decl.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp
index f8f6d2dcb..74d08f8e5 100644
--- a/source/slang/slang-check-decl.cpp
+++ b/source/slang/slang-check-decl.cpp
@@ -10123,9 +10123,10 @@ namespace Slang
// then the decl is using things that require conflicting set of capabilities, and we should diagnose an error.
if (referencedDecl && decl)
{
- diagnoseCapabilityErrors(
+ maybeDiagnose(
visitor->getSink(),
visitor->getOptionSet(),
+ DiagnosticCategory::Capability,
referenceLoc,
Diagnostics::conflictingCapabilityDueToUseOfDecl,
referencedDecl,
@@ -10135,9 +10136,10 @@ namespace Slang
}
else if (decl)
{
- diagnoseCapabilityErrors(
+ maybeDiagnose(
visitor->getSink(),
visitor->getOptionSet(),
+ DiagnosticCategory::Capability,
referenceLoc,
Diagnostics::conflictingCapabilityDueToStatement,
nodeCaps,
@@ -10146,9 +10148,10 @@ namespace Slang
}
else
{
- diagnoseCapabilityErrors(
+ maybeDiagnose(
visitor->getSink(),
visitor->getOptionSet(),
+ DiagnosticCategory::Capability,
referenceLoc,
Diagnostics::conflictingCapabilityDueToStatementEnclosingFunc,
nodeCaps,
@@ -10251,7 +10254,7 @@ namespace Slang
targetCap.join(bodyCap);
if (targetCap.isInvalid())
{
- diagnoseCapabilityErrors(Base::getSink(), outerContext.getOptionSet(), targetCase->body->loc, Diagnostics::conflictingCapabilityDueToStatement, bodyCap, "target_switch", oldCap);
+ maybeDiagnose(Base::getSink(), outerContext.getOptionSet(), DiagnosticCategory::Capability, targetCase->body->loc, Diagnostics::conflictingCapabilityDueToStatement, bodyCap, "target_switch", oldCap);
}
set.unionWith(targetCap);
}
@@ -10390,7 +10393,7 @@ namespace Slang
auto stageCaps = CapabilitySet(Profile(entryPointAttr->stage).getCapabilityName());
if (declaredCaps.isIncompatibleWith(stageCaps))
{
- diagnoseCapabilityErrors(getSink(), this->getOptionSet(), funcDecl->loc, Diagnostics::stageIsInCompatibleWithCapabilityDefinition, funcDecl, stageCaps, declaredCaps);
+ maybeDiagnose(getSink(), this->getOptionSet(), DiagnosticCategory::Capability, funcDecl->loc, Diagnostics::stageIsInCompatibleWithCapabilityDefinition, funcDecl, stageCaps, declaredCaps);
}
else
{
@@ -10604,7 +10607,7 @@ namespace Slang
printedDecls.add(declToPrint);
if (auto provenance = declToPrint->capabilityRequirementProvenance.tryGetValue(atomToFind))
{
- diagnoseCapabilityErrors(sink, optionSet, provenance->referenceLoc, Diagnostics::seeUsingOf, provenance->referencedDecl);
+ maybeDiagnose(sink, optionSet, DiagnosticCategory::Capability, provenance->referenceLoc, Diagnostics::seeUsingOf, provenance->referencedDecl);
declToPrint = provenance->referencedDecl;
if (printedDecls.contains(declToPrint))
break;
@@ -10625,7 +10628,7 @@ namespace Slang
}
if (declToPrint && !optionallyNeverPrintDecl)
{
- diagnoseCapabilityErrors(sink, optionSet, declToPrint->loc, Diagnostics::seeDefinitionOf, declToPrint);
+ maybeDiagnose(sink, optionSet, DiagnosticCategory::Capability, declToPrint->loc, Diagnostics::seeDefinitionOf, declToPrint);
}
}
@@ -10654,7 +10657,7 @@ namespace Slang
CapabilityAtom outFailedAtom{};
if (hasTargetAtom(failedAtomsInsideAvailableSet, outFailedAtom))
{
- diagnoseCapabilityErrors(getSink(), this->getOptionSet(), decl->loc, Diagnostics::declHasDependenciesNotCompatibleOnTarget, decl, outFailedAtom);
+ maybeDiagnose(getSink(), this->getOptionSet(), DiagnosticCategory::Capability, decl->loc, Diagnostics::declHasDependenciesNotCompatibleOnTarget, decl, outFailedAtom);
// Anything defined on a non-failed target atom may be the culprit to why we fail having a target capability.
// Print out all possible culprits.
@@ -10665,7 +10668,7 @@ namespace Slang
for (auto atom : targetsNotUsedSet)
{
- CapabilityAtom formattedAtom = (CapabilityAtom)atom;
+ CapabilityAtom formattedAtom = asAtom(atom);
diagnoseCapabilityProvenance(this->getOptionSet(), getSink(), decl, formattedAtom, true);
}
return;
@@ -10688,8 +10691,8 @@ namespace Slang
// can come from multiple referenced items in a function body.
for (auto i : failedAtomsInsideAvailableSet)
{
- CapabilityAtom formattedAtom = (CapabilityAtom)i;
- diagnoseCapabilityErrors(getSink(), this->getOptionSet(), decl->loc, diagnosticInfo, decl, formattedAtom);
+ CapabilityAtom formattedAtom = asAtom(i);
+ maybeDiagnose(getSink(), this->getOptionSet(), DiagnosticCategory::Capability, decl->loc, diagnosticInfo, decl, formattedAtom);
// Print provenances.
diagnoseCapabilityProvenance(this->getOptionSet(), getSink(), decl, formattedAtom);
}