nir/lower_clip_disable: Segfault if deref_type != array
deref_type
can be variable, causing the code (assuming an array) to segfault. Offending shader from KHR-GL30.clip_distance.functional
:
shader: MESA_SHADER_VERTEX
name: GLSL3
inputs: 1
outputs: 0
uniforms: 0
shared: 0
decl_var shader_in INTERP_MODE_NONE vec4 position (VERT_ATTRIB_GENERIC0.xyzw, 0, 0)
decl_var shader_out INTERP_MODE_NONE vec4 gl_Position (VARYING_SLOT_POS.xyzw, 0, 0)
decl_var shader_out INTERP_MODE_NONE vec4 gl_ClipDistanceMESA (VARYING_SLOT_CLIP_DIST0.xyzw, 0, 0)
decl_function main (0 params)
impl main {
decl_var INTERP_MODE_NONE vec4 out@gl_Position-temp
decl_var INTERP_MODE_NONE vec4[1] out@gl_ClipDistanceMESA-temp
block block_0:
/* preds: */
vec4 32 ssa_51 = undefined
vec1 32 ssa_23 = deref_var &position (shader_in vec4)
vec4 32 ssa_30 = intrinsic load_deref (ssa_23) (0) /* access=0 */
vec1 32 ssa_17 = load_const (0x00000000 /* 0.000000 */)
vec4 32 ssa_46 = vec4 ssa_17, ssa_51.y, ssa_51.z, ssa_51.w
vec1 32 ssa_24 = deref_var &out@gl_Position-temp (function_temp vec4)
intrinsic store_deref (ssa_24, ssa_30) (15, 0) /* wrmask=xyzw */ /* access=0 */
vec1 32 ssa_26 = deref_var &out@gl_ClipDistanceMESA-temp (function_temp vec4[1])
vec1 32 ssa_36 = deref_array &(*ssa_26)[0] (function_temp vec4) /* &out@gl_ClipDistanceMESA-temp[0] */
intrinsic store_deref (ssa_36, ssa_46) (1, 0) /* wrmask=x */ /* access=0 */
vec1 32 ssa_54 = deref_var &gl_Position (shader_out vec4)
vec1 32 ssa_55 = deref_var &out@gl_Position-temp (function_temp vec4)
vec4 32 ssa_60 = intrinsic load_deref (ssa_55) (0) /* access=0 */
intrinsic store_deref (ssa_54, ssa_60) (15, 0) /* wrmask=xyzw */ /* access=0 */
vec1 32 ssa_57 = deref_var &out@gl_ClipDistanceMESA-temp (function_temp vec4[1])
vec1 32 ssa_61 = load_const (0x00000000 /* 0.000000 */)
vec1 32 ssa_63 = load_const (0x00000000 /* 0.000000 */)
vec1 32 ssa_64 = deref_array &(*ssa_57)[0] (function_temp vec4) /* &out@gl_ClipDistanceMESA-temp[0] */
vec4 32 ssa_65 = intrinsic load_deref (ssa_64) (0) /* access=0 */
vec1 32 ssa_66 = deref_var &gl_ClipDistanceMESA (shader_out vec4)
intrinsic store_deref (ssa_66, ssa_65) (15, 0) /* wrmask=xyzw */ /* access=0 */
/* succs: block_1 */
block block_1:
}