This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/34198] -Wconversion gives apparent erroneous warning with g++ 4.3-20071109
- From: "manu at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Nov 2007 22:43:19 -0000
- Subject: [Bug c++/34198] -Wconversion gives apparent erroneous warning with g++ 4.3-20071109
- References: <bug-34198-15412@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from manu at gcc dot gnu dot org 2007-11-22 22:43 -------
(In reply to comment #3)
> IMHO, the explicit casts (static_cast or function-style) should suppress the
> warnings.
That is not the problem. The explicit casts suppress the warnings for the
implicit conversion that occurs in the assignment. However, the C/C++
front-ends create an additional implicit conversion that is applied to 'b' and
that I don't see how it can be avoided.
See that if you try with:
void f(const unsigned char b)
{
unsigned char c = b & 0xff;
}
you get two warnings:
test.C:3: warning: conversion to â??unsigned charâ?? from â??intâ?? may alter
its value
test.C:3: warning: conversion to â??unsigned charâ?? from â??intâ?? may alter
its value
Also if you try:
void f(const unsigned char b)
{
if (b & 0xff) {
return;
}
}
you still get a warning!
test.C:3: warning: conversion of â??(int)bâ?? to â??unsigned charâ?? from
â??intâ?? may alter its value
This also affects the C front-end since the code is shared and they seem to do
exactly the same thing. Perhaps convert_and_check is called in a place where it
shouldn't be called. Or perhaps something is building '(int)b' when it should
just leave 'b' alone. Any ideas?
--
manu at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2007-11-22 22:43:19
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34198