From a82f664d0a4968cfc123be03e1608f430a99231b Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 4 Aug 2020 16:15:04 -0700 Subject: [PATCH] nir/opt_copy_prop_vars: Quiet valgrind warning about overlapping memcpy. The warning is kind of silly: Test case 'dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_const_write_static_read_vertex'.. ==1874780== Source and destination overlap in memcpy(0xa261690, 0xa261690, 160) ==1874780== at 0x484D498: __GI_memcpy (vg_replace_strmem.c:1037) ==1874780== by 0x596FC07: copy_entry_remove (nir_opt_copy_prop_vars.c:296) The "memcpy is undefined if they overlap" thing is surely meant to be "memcpy with *partial* overlap is undefined", but let's keep anyone else from having to debug this. Reviewed-by: Rob Clark Reviewed-by: Kristian H. Kristensen Part-of: --- src/compiler/nir/nir_opt_copy_prop_vars.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/nir/nir_opt_copy_prop_vars.c b/src/compiler/nir/nir_opt_copy_prop_vars.c index fddbf88daf9..8b41e0e8832 100644 --- a/src/compiler/nir/nir_opt_copy_prop_vars.c +++ b/src/compiler/nir/nir_opt_copy_prop_vars.c @@ -290,10 +290,10 @@ static void copy_entry_remove(struct util_dynarray *copies, struct copy_entry *entry) { - /* This also works when removing the last element since pop don't shrink - * the memory used by the array, so the swap is useless but not invalid. - */ - *entry = util_dynarray_pop(copies, struct copy_entry); + const struct copy_entry *src = + util_dynarray_pop_ptr(copies, struct copy_entry); + if (src != entry) + *entry = *src; } static bool -- 2.30.2