[Bug c++/35852] -Wconversion rejects bitwise negation and assignment, cannot cast around
fang at csl dot cornell dot edu
gcc-bugzilla@gcc.gnu.org
Fri Aug 29 04:56:00 GMT 2008
------- Comment #7 from fang at csl dot cornell dot edu 2008-08-29 04:54 -------
(In reply to comment #5)
> This is the current situation as of revision 139373.
>
> typedef unsigned short ushort;
>
> enum {
> FOO = 0x13
> };
>
> template <typename T>
> inline
> void
> andnot(T& lv, const T& rv) {
> lv &= ~rv; // -Wconversion int(lv) & ~(int(rv))
> }
>
> int
> main(int, char*[]) {
> ushort x = 99;
> x = ~FOO; // -Wsign-conversion -20 -> unsigned short
> x &= ~FOO; // -Wconversion int(x) & ~(int(19)) -> unsigned short
> x = x & ~FOO; // -Wconversion int(x) & ~(int(19)) -> unsigned short
> x = x & ushort(~FOO); // no warning
> x = x & ushort(~ushort(FOO)); // no warning
> x &= static_cast<ushort>(~FOO); // no warning
> x &= ~x; // no warning
> andnot(x, ushort(FOO)); // instantiated from here
> return x;
> }
>
> I don't see what is wrong with the warnings. Would you mind elaborating?
The situation then seems to have improved since I first reported it.
Originally, none of the cases with explicit casts would pass, but comment #4
suggests that those have been fixed. I expect the cast-less cases to have
warnings. (I would consider this fixed.)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35852
More information about the Gcc-bugs
mailing list