[Bug c++/54897] [4.8 Regression]: 23_containers/bitset/45713.cc (test for excess errors)

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Oct 11 07:38:00 GMT 2012


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54897

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-10-11 07:38:19 UTC ---
The problem is that IMHO the testcase is just invalid on 32-bit HWI targets.
On 32-bit targets with 64-bit HWI, bitsizetype is 64-bit and thus
std::bitset<0xffffffff> has size 0x20000000, and bitsize 0x100000000.  But
32-bit HWI targets use 32-bit bitsizetype, thereforestd::bitset<0xffffffff> is
larger than the largest supportable type, bitsize of the array is 0 overflow,
and both bitsize and unit size of the bitset are therefore set to 0 overflow.
Before my changes, sizeof(std::bitset<0xffffffff>) yielded 0 overflow, so the
test magically passed even when sizeof 0 is as wrong as sizeof 1.  With the
patch, maybe_constant_size is used to fold the SIZEOF_EXPR, but as it is
overflown, it is not considered a valid integer constant expression, thus we
end up with size unfolded and therefore the error (or considering the array a
VLA).



More information about the Gcc-bugs mailing list