Re: [PATCH v1] Travis: also test on 32-bit Linux
- From
Jeff King <peff@peff.net>
- Date
- Mar 10, 2017, 20:18 UTC
- Message-ID
- <20170310201840.fubshjp2bjg4bjxq@sigill.intra.peff.net>
- In-Reply-To
- <xmqqfuikyjoo.fsf@gitster.mtv.corp.google.com>
On Fri, Mar 10, 2017 at 12:13:11PM -0800, Junio C Hamano wrote:
Show 13 quoted lines
> René Scharfe <l.s.r@web.de> writes: > > >> 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 haven't followed this discussion to the end, but the omission of 2 > out of obvious 4 did pique my curiosity when I saw it, too, and made > me wonder if the omission was deliberate. If so, it would be nice > to state why in the log message (or in copy.cocci file itself as a > comment).
Yeah, it definitely would be worth mentioning. I'm still undecided on whether we want to be endorsing struct assignment more fully.
Show 6 quoted lines
> It also made me wonder if we would be helped with a further > combinatorial explosion from "T **dstp, **srcp" and somesuch (in > other words, I am wondering why a rule for 'T *src' that uses '*src' > need to be spelled out separately when there already is a good rule > for 'T src' that uses 'src'---is that an inherent restriction of the > tool?).
I had that thought, too, but I think the 4-way rules are necessary, because the transformations aren't the same in each case. E.g., for the four cases, the resulting assignments are:
(dst, src): dst = src; (dst, *src): dst = *src; (*dst, src): *dst = src; (*dst, *src): *dst = *src;
For pointer-to-pointer, I assumed the tool would handle that automatically by matching "T" as "T*". Though if that is the case, I think "(dst, src)" and "(*dst, *src)" would be equivalent (though of course our rule matches are different, as you do not memcpy the raw structs).
-Peff