[Bug middle-end/48432] New: -Wstrict-overflow incorrectly warns for Emacs src/font.c
eggert at gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Apr 4 06:50:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48432
Summary: -Wstrict-overflow incorrectly warns for Emacs
src/font.c
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: middle-end
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: eggert@gnu.org
When compiling the GNU Emacs trunk with a GCC 4.6.0 that I built on
RHEL 5.6 (x86-64), I ran into a problem when compiling src/font.c that
I narrowed down to the following stripped-down test case. When I
compile this test case with
gcc -S -Wstrict-overflow -O2 f.c
the output is:
f.c: In function 'font_list_entities':
f.c:38:35: warning: assuming signed overflow does not occur when simplifying
co
nditional to constant [-Wstrict-overflow]
The warning is incorrect, since signed overflow is impossible here.
There are two 'int' variables, one of which is assigned only 0 or 1,
and the other which is assigned only values ranging from 6 through 12.
Changing either 'int' variable to 'unsigned' makes the warning go away.
I'm not sure whether this bug is the same as earlier bug reports I
filed in this area (PR48228, PR48267), but it's not obviously the same
so I figured I should be safe and file it. It did take some time to
track down.
-----
extern unsigned foo0 (void);
extern unsigned foo2 (unsigned, unsigned);
static unsigned
font_delete_unmatched (unsigned vec, unsigned spec, unsigned int size)
{
unsigned val = 0;
while (1)
{
if (spec)
{
val = foo2 (vec, val);
continue;
}
}
return val;
}
unsigned
font_list_entities (unsigned frame, unsigned spec)
{
unsigned val = 0;
int need_filtering = 0;
int i;
for (i = 6; i < 13; i++)
{
if (foo0 ())
need_filtering = 1;
if (i == 10)
i++;
}
while (foo0 ())
if (need_filtering)
val = font_delete_unmatched (val, need_filtering ? spec : 0, 0);
return 0;
}
More information about the Gcc-bugs
mailing list