I'll submit a testcase that apparently demonstrates that gcc is trying to apply
signed strict overflow rules to an unsigned short type, at least on 32 bit
machines when short is 16 bit.
Here is the output:
arm-elf-gcc -O2 -W -Wall -Wstrict-overflow=5 -c testcase.c
testcase.c: In function ‘incr_counter’:
testcase.c:13: warning: assuming signed overflow does not occur when assuming
that (X + c) < X is always false
this is from gcc 4.3.1; my native build also has the same semantics, and I've
tested with 4.2.4 also.
The thing is that the type is unsigned (even if it is smaller than the target
machine register), so that it can overflow and it can be detected (costly
perhaps, but can).
--
Summary: GCC applies signed strict-overflow rules to unsigned
short type
Product: gcc
Version: 4.2.4
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: alexandre dot nunes at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37642