git/compat
Junio C Hamano 2105064b10 bswap.h: squelch potential sparse -Wcast-truncate warnings
In put_be32(), we right-shift a uint32_t value various amounts and then
assign the low 8-bits to individual "unsigned char" bytes, throwing away
the high bits. For shifts smaller than 24 bits, those thrown away bits
will be arbitrary bits from the original uint32_t.

This works exactly as we want, but if you feed a constant, then sparse
complains. For example if we write this (which we plan to do in a future
patch):

  put_be32(hdr, PACK_SIGNATURE);

then "make sparse" produces:

  compat/bswap.h:175:22: error: cast truncates bits from constant value (5041 becomes 41)
  compat/bswap.h:176:22: error: cast truncates bits from constant value (504143 becomes 43)
  compat/bswap.h:177:22: error: cast truncates bits from constant value (5041434b becomes 4b)

And the same issue exists in the other put_be*() functions, when used
with a constant.

We can silence this warning by explicitly masking off the truncated
bits. The compiler is smart enough to know the result is the same, and
the asm generated by gcc (with both -O0 and -O2) is identical.

Curiously this line already exists:

	put_be32(&hdr_version, INDEX_EXTENSION_VERSION2);

in the fsmonitor.c file, but it does not get flagged because the CPP
macro expands to a small integer (2).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-01-21 08:42:55 -08:00
..
fsmonitor compat/fsmonitor: fix socket path in networked SHA256 repos 2024-06-14 10:26:34 -07:00
linux treewide: remove unnecessary cache.h inclusion from several sources 2023-03-21 10:56:51 -07:00
nedmalloc nedmalloc: avoid new compile error 2023-03-12 20:31:53 +01:00
poll
regex global: improve const correctness when assigning string constants 2024-06-07 10:30:48 -07:00
simple-ipc treewide: remove unnecessary includes in source files 2023-12-26 12:04:33 -08:00
stub
vcbuild
win32 win32: override `fspathcmp()` with a directory separator-aware version 2024-07-13 16:23:36 -07:00
.gitattributes
access.c
apple-common-crypto.h
basename.c compat/win32: fix const-correctness with string constants 2024-06-07 10:30:52 -07:00
bswap.h bswap.h: squelch potential sparse -Wcast-truncate warnings 2025-01-21 08:42:55 -08:00
compiler.h compat: drop inclusion of <git-compat-util.h> 2024-02-24 14:37:41 -08:00
disk.h compat: drop inclusion of <git-compat-util.h> 2024-02-24 14:37:41 -08:00
fileno.c
fopen.c
hstrerror.c
inet_ntop.c
inet_pton.c
memmem.c
mingw.c mingw(is_msys2_sh): handle forward slashes in the `sh.exe` path, too 2024-07-13 16:23:37 -07:00
mingw.h Win32: detect unix socket support at runtime 2024-04-03 14:54:28 -07:00
mkdir.c
mkdtemp.c
mmap.c
msvc.c
msvc.h
nonblock.c mark unused parameters in trivial compat functions 2022-10-17 21:24:03 -07:00
nonblock.h compat: add function to enable nonblocking pipes 2022-08-17 09:21:40 -07:00
obstack.c
obstack.h
open.c
pread.c treewide: remove double forward declaration of read_in_full 2023-04-11 08:52:11 -07:00
precompose_utf8.c cache.h: remove this no-longer-used header 2023-06-21 13:39:53 -07:00
precompose_utf8.h
qsort_s.c
regcomp_enhanced.c use enhanced basic regular expressions on macOS 2023-01-08 10:06:34 +09:00
setenv.c
sha1-chunked.c hash-ll: merge with "hash.h" 2024-06-14 10:26:33 -07:00
sha1-chunked.h
snprintf.c
stat.c
strcasestr.c
strdup.c
strlcpy.c
strtoimax.c
strtoumax.c
terminal.c compat/terminal: mark parameter of git_terminal_prompt() UNUSED 2024-09-01 08:26:51 -07:00
terminal.h
unsetenv.c
win32.h
win32mmap.c
winansi.c compat/win32: fix const-correctness with string constants 2024-06-07 10:30:52 -07:00
zlib-uncompress2.c