This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/33514] New: Inconsistent warning for compile-time integer overflow
- From: "mec at google dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 21 Sep 2007 05:27:19 -0000
- Subject: [Bug c++/33514] New: Inconsistent warning for compile-time integer overflow
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
This is with gcc 4.3-20070914 snapshot.
The attached program has four sites with compile-time integer overflow: the
initializations of h4, h8, bp_i:h, and bp_lli:h. Only the last of these draws
a warning.
mec@hollerith:~/exp-integer-overflow$ cat z5.cc
#include <stdio.h>
int l4 = 0x01010101;
int h4 = l4 * 0x80;
long long int l8 = 0x0101010101010101ll;
long long int h8 = l8 * 0x80;
template <class T> struct BitPattern {
// For int32:
// half_ones = 0x00001111
// l = 0x01010101
// h = 0x80808080
static const T half_ones = (static_cast<T>(1) << (sizeof(T)*4)) - 1;
static const T l = (sizeof(T) == 1) ? 1 : (half_ones / 0xff * (half_ones +
2));
static const T h = l * 0x80;
};
BitPattern<int> bp_i;
BitPattern<long long int> bp_lli;
int main() {
printf("%16.16llx\n", bp_lli.half_ones);
printf("%16.16llx\n", bp_lli.l);
printf("%16.16llx\n", bp_lli.h);
return 0;
}
mec@hollerith:~/exp-integer-overflow$
/home/mec/gcc-4.3-20070914/install/bin/g++ -Wall -S z5.cc
z5.cc: In instantiation of 'const long long int BitPattern<long long int>::h':
z5.cc:25: instantiated from here
z5.cc:16: warning: integer overflow in expression
--
Summary: Inconsistent warning for compile-time integer overflow
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mec at google dot com
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33514