Bug#808861: clang: Recommends bad format specifier for USHRT_MAX constant
contact at mcmackins.org
Wed Dec 23 21:11:54 UTC 2015
Consider the following program:
printf ("%hu\n", USHRT_MAX);
If I compile this with clang (tested with -std=c11 but might be present
with other standards), I will get a warning about using the %hu format
specifier, since the definition of USHRT_MAX is identified as an int
(from a quick check of the header file, it uses arithmetic to determine it).
However, the minimum size of an int is 16 bits, as is an unsigned short.
That being the case, using a %d specifier as the warning recommends
could cause bad output. If both int and unsigned short are of the same
length on an implementation, then that format specifier would read an
unsigned 16-bit integer value as a signed 16-bit integer value,
resulting in incorrect output.
On implementations like mine where int is 32 bits wide, this wouldn't be
harmful, but the standard says that this could technically be a problem.
-- System Information:
Debian Release: stretch/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Kernel: Linux 4.3.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages clang depends on:
ii clang-3.6 1:3.6.2-3
clang recommends no packages.
clang suggests no packages.
-- no debconf information
David E. McMackins II
Associate, Free Software Foundation (#12889)
More information about the Pkg-llvm-team