diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2023-01-18 00:01:58 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-17 21:01:58 -0800 |
| commit | a0994a8da142e54362e9ec1fdb5e5abc708ec3d2 (patch) | |
| tree | 363e75df065338fdb1da29286d932733fdb6b3c4 /source/slang/slang-check-modifier.cpp | |
| parent | 1a486813ef0bc7f7a2eb6eaeec2921fd71a2bd05 (diff) | |
Add `set` to spirv_instruction (#2597)
Diffstat (limited to 'source/slang/slang-check-modifier.cpp')
| -rw-r--r-- | source/slang/slang-check-modifier.cpp | 20 |
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)) |
