This is includes !1415 (merged) as 1/3, since otherwise it conflicts with it.
We are currently prone to certain miscompilations since copy_propagation_invalidate_variable_from_deref_recurse() is not always invalidating the right components of arrays. 2/3 introduces a test that miscompiles, 3/3 introduces the fix.