diff options
| -rw-r--r-- | source/slang/check.cpp | 11 | ||||
| -rw-r--r-- | tests/bugs/gh-463.slang | 11 | ||||
| -rw-r--r-- | tests/bugs/gh-463.slang.expected | 6 |
3 files changed, 28 insertions, 0 deletions
diff --git a/source/slang/check.cpp b/source/slang/check.cpp index e06578c86..b1df71428 100644 --- a/source/slang/check.cpp +++ b/source/slang/check.cpp @@ -1530,6 +1530,8 @@ namespace Slang SLANG_ASSERT(attr->args.Count() == 1); auto val = checkConstantIntVal(attr->args[0]); + if(!val) return false; + maxVertexCountAttr->value = (int32_t)val->value; } else if(auto instanceAttr = attr.As<InstanceAttribute>()) @@ -1537,6 +1539,8 @@ namespace Slang SLANG_ASSERT(attr->args.Count() == 1); auto val = checkConstantIntVal(attr->args[0]); + if(!val) return false; + instanceAttr->value = (int32_t)val->value; } else if(auto entryPointAttr = attr.As<EntryPointAttribute>()) @@ -3555,8 +3559,15 @@ namespace Slang // Enforce that an expression resolves to an integer constant, and get its value RefPtr<IntVal> CheckIntegerConstantExpression(Expr* inExpr) { + // No need to issue further errors if the expression didn't even type-check. + if(IsErrorExpr(inExpr)) return nullptr; + // First coerce the expression to the expected type auto expr = Coerce(getSession()->getIntType(),inExpr); + + // No need to issue further errors if the type coercion failed. + if(IsErrorExpr(expr)) return nullptr; + auto result = TryCheckIntegerConstantExpression(expr.Ptr()); if (!result) { diff --git a/tests/bugs/gh-463.slang b/tests/bugs/gh-463.slang new file mode 100644 index 000000000..95890eba5 --- /dev/null +++ b/tests/bugs/gh-463.slang @@ -0,0 +1,11 @@ +//TEST:SIMPLE: + +// undefined identifier used in `[instance(...)]` attribute + +struct V { float4 u : U; }; + +[instance(COUNT)] +void myGS(triangle V input[3], TriangleStream<V> output) +{ + +} diff --git a/tests/bugs/gh-463.slang.expected b/tests/bugs/gh-463.slang.expected new file mode 100644 index 000000000..d40a845a3 --- /dev/null +++ b/tests/bugs/gh-463.slang.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +tests/bugs/gh-463.slang(7): error 30015: undefined identifier 'COUNT'. +} +standard output = { +} |
