On Fri, Mar 10, 2017 at 05:20:13PM +0100, René Scharfe wrote: > > I think this misses the other two cases: (*dst, src) and (*dst, *src). > > ... and that's why I left them out. You can't get dst vs. *dst wrong with > structs (at least not without the compiler complaining); only safe > transformations are included in this round. I don't think the transformation could be wrong without the original code being wrong. I'm also not sure why mine would be unsafe and yours would be safe. It seems like the other way around, because mine will do: *dst = ... which would fail unless "dst" is a pointer. Whereas in yours, we end up with: dst = ... and somebody mistaking pointer assignment for a struct copy would not notice. But either way, I don't think we can have a rule like "you can use struct assignment only if you don't have a pointer for the destination". That's too arcane to expect developers and reviewers to follow. We should either allow struct assignment or not. Or have I totally misunderstood your point? -Peff