On Sat, Jun 09, 2018 at 03:44:30PM +0200, Martin Ågren wrote: > On 9 June 2018 at 11:21, Jeff King <peff@xxxxxxxx> wrote: > > On Sat, Jun 09, 2018 at 10:50:36AM +0200, Martin Ågren wrote: > > > >> On 9 June 2018 at 10:32, Jeff King <peff@xxxxxxxx> wrote: > >> > Except it _does_ do one non-trivial thing, which is call the > >> > report() function, which wants us to pass a pointer to a > >> > "struct object". Which we don't have (we have only a "struct > >> > object_id"). So we erroneously passed the NULL object, which > >> > >> s/passed/dereferenced/? Probably doesn't affect the fix though. > > > > Well, we passed it, and then that function dereferenced it. :) > > > > I'm going to re-roll for the minor bits that Eric pointed out, so I'll > > try to word this better. > > My bad. I somehow thought we get into trouble already before we call > `report()`. Well, we do, since we have undefined behavior. But for all > practical purposes `&blob->object` and `blob` are the same > (NULL-)pointer so we only crash after we call `report()`. > > Anyway, obviously no need to do anything about this in a v3. Ah, yeah, I didn't really think of it that way. But certainly you are right that the moment we look at &blob->object, we are invoking undefined behavior according to the standard. Hopefully the wording tweak I made covers both ways of thinking about it. :) -Peff