summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-check-expr.cpp12
-rw-r--r--tests/diagnostics/array-zero-size.slang6
2 files changed, 15 insertions, 3 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index 7d4fbdf4c..1fb2b336f 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -2378,6 +2378,18 @@ Expr* SemanticsExprVisitor::visitIndexExpr(IndexExpr* subscriptExpr)
IntegerConstantExpressionCoercionType::AnyInteger,
nullptr,
ConstantFoldingKind::LinkTime);
+
+ // Validate that array size is greater than zero
+ if (auto constElementCount = as<ConstantIntVal>(elementCount))
+ {
+ if (constElementCount->getValue() <= 0)
+ {
+ getSink()->diagnose(
+ subscriptExpr->indexExprs[0],
+ Diagnostics::invalidArraySize);
+ return CreateErrorExpr(subscriptExpr);
+ }
+ }
}
else if (subscriptExpr->indexExprs.getCount() != 0)
{
diff --git a/tests/diagnostics/array-zero-size.slang b/tests/diagnostics/array-zero-size.slang
index 5c62610ba..f67f163fd 100644
--- a/tests/diagnostics/array-zero-size.slang
+++ b/tests/diagnostics/array-zero-size.slang
@@ -2,12 +2,12 @@
// Test that array size cannot be zero
-//TEST:SIMPLE:
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK):
[numthreads(4, 1, 1)]
void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
{
bar();
}
-
-func bar() -> int[0]; // expected-error 30025 "array size must be larger than zero." \ No newline at end of file
+//CHECK: ([[# @LINE+1]]): error 30025
+func bar() -> int[0];