[Bug c++/44811] non controllable bogus warning: right/left shift count is negative
dpiepgrass at mentoreng dot com
gcc-bugzilla@gcc.gnu.org
Thu Apr 26 18:03:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44811
David Piepgrass <dpiepgrass at mentoreng dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dpiepgrass at mentoreng dot
| |com
--- Comment #4 from David Piepgrass <dpiepgrass at mentoreng dot com> 2012-04-26 18:02:34 UTC ---
What makes warnings like this really irritating is that templates get
instantiated more than once. I'm getting about two dozen of these warnings from
just two lines of template code, since the template is instantiated for many
integer values. And that's just from one cpp file; other cpp files give a
separate set of warnings (I'd consider using extern template, except that I
have to target MSVC9 too.)
Actually, GCC currently gives many thousand warnings for my project: it seems
nearly half of them come from these left/right shift warnings, and nearly half
also come from a couple dozen member functions of the form "Foo Foo() const {
... }" that my code contains, which never bothered MSVC.
The documentation of the diagnostic pragma
(http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Diagnostic-Pragmas.html) doesn't
say how to disable all warnings... should this work?
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-w"
template<int N> uint64_t shift(uint64_t b) {
if (N > 0)
return b << N;
else
return b >> -N;
}
#pragma GCC diagnostic pop
It doesn't work for me, but it may just be my older GCC (4.4.3 for Google
Android). 4.4.3 complains about not supporting push/pop, but it doesn't
complain about -w even though it does not actually suppress any warnings.
Could I perhaps disable all warnings by default, and then use a pragma to
re-enable all warnings when the .cpp is reached?
More information about the Gcc-bugs
mailing list