[llvm] 1a3709c - [SPIRV] Error for zero-length arrays if not a shader (#169732)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 2 10:25:04 PST 2025
Author: Nick Sarnie
Date: 2025-12-02T18:24:59Z
New Revision: 1a3709cc7e88cbd354b6b102e87d02f379bce3b9
URL: https://github.com/llvm/llvm-project/commit/1a3709cc7e88cbd354b6b102e87d02f379bce3b9
DIFF: https://github.com/llvm/llvm-project/commit/1a3709cc7e88cbd354b6b102e87d02f379bce3b9.diff
LOG: [SPIRV] Error for zero-length arrays if not a shader (#169732)
I had a case where the frontend was generating a zero elem array in
non-shader code so it was just crashing in a release build.
Add a real error and make it not crash.
---------
Signed-off-by: Nick Sarnie <nick.sarnie at intel.com>
Added:
Modified:
llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp
llvm/test/CodeGen/SPIRV/zero-length-array.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp b/llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp
index ae81d38579c18..0fb44052527f0 100644
--- a/llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp
@@ -883,10 +883,12 @@ SPIRVType *SPIRVGlobalRegistry::getOpTypeArray(uint32_t NumElems,
.addUse(NumElementsVReg);
});
} else {
- assert(ST.isShader() && "Runtime arrays are not allowed in non-shader "
- "SPIR-V modules.");
- if (!ST.isShader())
+ if (!ST.isShader()) {
+ llvm::reportFatalUsageError(
+ "Runtime arrays are not allowed in non-shader "
+ "SPIR-V modules");
return nullptr;
+ }
ArrayType = createOpType(MIRBuilder, [&](MachineIRBuilder &MIRBuilder) {
return MIRBuilder.buildInstr(SPIRV::OpTypeRuntimeArray)
.addDef(createTypeVReg(MIRBuilder))
diff --git a/llvm/test/CodeGen/SPIRV/zero-length-array.ll b/llvm/test/CodeGen/SPIRV/zero-length-array.ll
index 5fd94d25dfd87..cb34529ebfecd 100644
--- a/llvm/test/CodeGen/SPIRV/zero-length-array.ll
+++ b/llvm/test/CodeGen/SPIRV/zero-length-array.ll
@@ -1,7 +1,9 @@
-; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv-unknown-vulkan-compute %s -o - | FileCheck %s
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv-unknown-vulkan-compute < %s | FileCheck %s
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan-compute %s -o - -filetype=obj | spirv-val %}
-; Nothing is generated, but compilation doesn't crash.
+; RUN: not llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown < %s 2>&1 | FileCheck -check-prefix=CHECK-ERR %s
+
+; For compute, nothing is generated, but compilation doesn't crash.
; CHECK: OpName %[[#FOO:]] "foo"
; CHECK: OpName %[[#RTM:]] "reg2mem alloca point"
; CHECK: %[[#INT:]] = OpTypeInt 32 0
@@ -11,6 +13,10 @@
; CHECK-NEXT: OpReturn
; CHECK-NEXT: OpFunctionEnd
+
+; For non-compute, error.
+; CHECK-ERR: LLVM ERROR: Runtime arrays are not allowed in non-shader SPIR-V modules
+
define spir_func void @foo() {
entry:
%i = alloca [0 x i32], align 4
More information about the llvm-commits
mailing list