[Bug c/97287] New: Warn for expanding range of an arithmetic type
matthew at wil dot cx
gcc-bugzilla@gcc.gnu.org
Sun Oct 4 17:21:58 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97287
Bug ID: 97287
Summary: Warn for expanding range of an arithmetic type
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: matthew at wil dot cx
Target Milestone: ---
I've just fixed multiple instances of bugs that look a lot like function f()
when they should have been function g(). This affects filesystems in Linux
which have to remember to cast an unsigned long to an off_t before shifting (or
there will be a bug on 32-bit kernels when dealing with files that are larger
than 4GB).
When I looked for a warning option to add, I thought -Warith-conversions might
do the job, but it doesn't. Maybe this functionality should be added there, or
maybe it should have its own warning.
I think what we're looking for is an operation which expands the range of the
type (left shift, multiplication, addition; maybe subtraction?) and the rules
of C require the operation to be done in a narrower type, but the result is
assigned to a wider type.
unsigned long long f(unsigned int i) { return i * 4096; }
unsigned long long g(unsigned int i) { return i * 4096ULL; }
More information about the Gcc-bugs
mailing list