Querying the storage class in the verifier will assume the result
type is of pointer types. We need to check that's true first to
make sure it won't crash.
Reviewed By: kuhar
Differential Revision: https://reviews.llvm.org/D139053
}
LogicalResult spirv::GlobalVariableOp::verify() {
+ if (!getType().isa<spirv::PointerType>())
+ return emitOpError("result must be of a !spv.ptr type");
+
// SPIR-V spec: "Storage Class is the Storage Class of the memory holding the
// object. It cannot be Generic. It must be the same as the Storage Class
// operand of the Result Type."
// -----
spirv.module Logical GLSL450 {
+ // expected-error @+1 {{result must be of a !spv.ptr type}}
+ "spirv.GlobalVariable"() {sym_name = "var0", type = none} : () -> ()
+}
+
+// -----
+
+spirv.module Logical GLSL450 {
// expected-error @+1 {{op initializer must be result of a spirv.SpecConstant or spirv.GlobalVariable op}}
spirv.GlobalVariable @var0 initializer(@var1) : !spirv.ptr<f32, Private>
}