summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-modifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-modifier.cpp')
-rw-r--r--source/slang/slang-check-modifier.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/source/slang/slang-check-modifier.cpp b/source/slang/slang-check-modifier.cpp
index f3623f19f..e73f04301 100644
--- a/source/slang/slang-check-modifier.cpp
+++ b/source/slang/slang-check-modifier.cpp
@@ -438,8 +438,24 @@ namespace Slang
getSink()->diagnose(attr, Diagnostics::expectedSingleStringArg, attr->keywordName);
}
}
- else if (as<OutputControlPointsAttribute>(attr) ||
- as<SPIRVInstructionOpAttribute>(attr))
+ else if (auto opAttr = as<SPIRVInstructionOpAttribute>(attr))
+ {
+ auto sink = getSink();
+ const auto argsCount = opAttr->args.getCount();
+ if (argsCount < 1 || argsCount > 2)
+ {
+ sink->diagnose(attr, Diagnostics::attributeArgumentCountMismatch, attr->keywordName, "1...2", argsCount);
+ }
+ else if (!as<IntegerLiteralExpr>(opAttr->args[0]))
+ {
+ sink->diagnose(attr, Diagnostics::attributeExpectedIntArg, attr->keywordName, 0);
+ }
+ else if (argsCount > 1 && !as<StringLiteralExpr>(opAttr->args[1]))
+ {
+ sink->diagnose(attr, Diagnostics::attributeExpectedStringArg, attr->keywordName, 1);
+ }
+ }
+ else if (as<OutputControlPointsAttribute>(attr))
{
// Let it go thru iff single integral attribute
if (!hasIntArgs(attr, 1))