diff options
author | Jeff King <peff@peff.net> | 2020-06-25 15:48:37 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-06-25 14:19:23 -0700 |
commit | f39ad38410da554af54966bf74fa0402355852ac (patch) | |
tree | 77a7d07f1287021f060f250cfdff7d4baadf30f3 /pkt-line.h | |
parent | fast-export: anonymize "master" refname (diff) | |
download | tgif-f39ad38410da554af54966bf74fa0402355852ac.tar.xz |
fast-export: use local array to store anonymized oid
Some older versions of gcc complain about this line:
builtin/fast-export.c:412:2: error: dereferencing type-punned pointer
will break strict-aliasing rules [-Werror=strict-aliasing]
put_be32(oid.hash + hashsz - 4, counter++);
^
This seems to be a false positive, as there's no type-punning at all
here. oid.hash is an array of unsigned char; when we pass it to a
function it decays to a pointer to unsigned char. We do take a void
pointer in put_be32(), but it's immediately aliased with another pointer
to unsigned char (and clearly the compiler is looking inside the inlined
put_be32(), since the warning doesn't happen with -O0).
This happens on gcc 4.8 and 4.9, but not later versions (I tested gcc 6,
7, 8, and 9).
We can work around it by using a local array instead of an object_id
struct. This is a little more intimate with the details of object_id,
but for whatever reason doesn't seem to trigger the compiler warning.
We can revert this patch once we decide that those gcc versions are too
old to care about for a warning like this (gcc 4.8 is the default
compiler for Ubuntu Trusty, which is out-of-support but not fully
end-of-life'd until April 2022).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pkt-line.h')
0 files changed, 0 insertions, 0 deletions