> This reduces duplication in the semantic patch, which is nice. I think > I tried something like that at the time, but found that it failed to > produce some of the cases in 921d49be86 ("use COPY_ARRAY for copying > arrays", 2019-06-15) for some reason. I propose to integrate an other solution variant. * How do you think about to delete questionable transformation rules together with increasing the usage of nested disjunctions in this script for the semantic patch language? * Can a single transformation rule become sufficient for the discussed change pattern? @@ type T; T* dst_ptr, src_ptr, ptr; T[] dst_arr, src_arr; expression n, x; @@ ( -memcpy +COPY_ARRAY ( ( dst_ptr | dst_arr ) , ( src_ptr | src_arr ) - , (n) * \( sizeof(T) \| sizeof( \( *(x) \| x[...] \) ) \) + , n ) | -memmove +MOVE_ARRAY (dst_ptr, src_ptr - , (n) * \( sizeof(* \( dst_ptr \| src_ptr \) ) \| sizeof(T) \) + , n ) | -ptr = xmalloc((n) * \( sizeof(*ptr) \| sizeof(T) \)) +ALLOC_ARRAY(ptr, n) ) Would you like to clarify remaining challenges for pretty-printing in such use cases? Regards, Markus