This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Compiler warning
- From: Ricardo Telichevesky <ricardo at teli dot org>
- To: libstdc++ at gcc dot gnu dot org
- Date: Thu, 31 Jul 2014 02:04:14 -0700
- Subject: Compiler warning
- Authentication-results: sourceware.org; auth=none
Hi,
Hope this is the right place to ask this question. Is there any way to set -Wxxxx flags to detect the following situation:
unsigned int x = 1015625426; // a billion
....
size_t numBytes = x * sizeof(double);
... the result is 3830033872 when I should have written instead something like:
unsigned int x = 1015625426; // a billion
.....
size_t numBytes = x;
numBytes *= sizeof(double);
.. that way the result would be the correct 8125003408. I guess that the precision of any particular operation depends exclusively on its operands, not the left hand side result, the most obvious novice mistake is writing double oneThird = 1/3 => oneThird gets 0. The problem is I have this type of
situation all over a large code base, and when compiling for 64 bits would be nice to have a warning like:
warning: potential overflow computing numBytes (64-bit) as a product of two 32-bit unsigned integers... or anything that remotely resembles it, so I could find where it might happen in the code. I found the -ftrapv option, would catch the problem at runtime, but I want to fix the problem before I
run into runtime problems. Also, I guess the same problem might happen (less likely) if you're adding two 32-bit integers or subtracting them... Maybe there is already some option, but I cannot find it.
Thanks very much for your help,
Ricardo