summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>2021-11-16 14:25:08 +0200
committerMarge Bot <emma+marge@anholt.net>2021-12-01 08:24:39 +0000
commit8e568d3f00b31344bc86a7ee1d8e57eb430314a5 (patch)
tree08e604f1f0d05a027a1585f788f3b44b9021016c
parent69ec384bbaddc225404943607e12c2be6fe0199f (diff)
nir/opt_deref: don't try to cast empty structures
Found while running valgrind : ==3583454== Invalid read of size 4 ==3583454== at 0xF48336: glsl_get_struct_field_offset (nir_types.cpp:84) ==3583454== by 0xC7CD0D: opt_replace_struct_wrapper_cast (nir_deref.c:1068) ==3583454== by 0xC7CDD9: opt_deref_cast (nir_deref.c:1087) ==3583454== by 0xC7DD8E: nir_opt_deref_impl (nir_deref.c:1369) ==3583454== by 0xC7DF4E: nir_opt_deref (nir_deref.c:1428) ==3583454== by 0xA63F3C: brw_kernel_from_spirv (brw_kernel.c:325) ==3583454== by 0xA3BC2C: main (intel_clc.c:481) ==3583454== Address 0xe4f7e88 is 24 bytes after a block of size 48 in arena "client" Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Cc: mesa-stable Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13952>
-rw-r--r--src/compiler/nir/nir_deref.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_deref.c b/src/compiler/nir/nir_deref.c
index 39d7b71ca41..cb6847ac9b8 100644
--- a/src/compiler/nir/nir_deref.c
+++ b/src/compiler/nir/nir_deref.c
@@ -1055,6 +1055,10 @@ opt_replace_struct_wrapper_cast(nir_builder *b, nir_deref_instr *cast)
if (!glsl_type_is_struct(parent->type))
return false;
+ /* Empty struct */
+ if (glsl_get_length(parent->type) < 1)
+ return false;
+
if (glsl_get_struct_field_offset(parent->type, 0) != 0)
return false;