libs/wpp/ppy.y signedness fixes
Gerald Pfeifer
gerald at pfeifer.com
Tue Jul 22 05:38:24 CDT 2008
The patch below removes the following compiler warnings (seen with
GCC 4.4 and -Wextra, for example):
ppy.y:371: warning: comparison between signed and unsigned
ppy.y:371: warning: comparison between signed and unsigned
ppy.y:371: warning: comparison between signed and unsigned
ppy.y:371: warning: comparison between signed and unsigned
ppy.y:371: warning: comparison between signed and unsigned
ppy.y:371: warning: comparison between signed and unsigned
ppy.y:372: warning: comparison between signed and unsigned
ppy.y:372: warning: comparison between signed and unsigned
ppy.y:372: warning: comparison between signed and unsigned
ppy.y:372: warning: comparison between signed and unsigned
ppy.y:372: warning: comparison between signed and unsigned
ppy.y:372: warning: comparison between signed and unsigned
ppy.y:373: warning: comparison between signed and unsigned
ppy.y:373: warning: comparison between signed and unsigned
ppy.y:373: warning: comparison between signed and unsigned
ppy.y:373: warning: comparison between signed and unsigned
ppy.y:373: warning: comparison between signed and unsigned
ppy.y:373: warning: comparison between signed and unsigned
ppy.y:374: warning: comparison between signed and unsigned
ppy.y:374: warning: comparison between signed and unsigned
ppy.y:374: warning: comparison between signed and unsigned
ppy.y:374: warning: comparison between signed and unsigned
ppy.y:374: warning: comparison between signed and unsigned
ppy.y:374: warning: comparison between signed and unsigned
ppy.y:375: warning: comparison between signed and unsigned
ppy.y:375: warning: comparison between signed and unsigned
ppy.y:375: warning: comparison between signed and unsigned
ppy.y:375: warning: comparison between signed and unsigned
ppy.y:375: warning: comparison between signed and unsigned
ppy.y:375: warning: comparison between signed and unsigned
ppy.y:376: warning: comparison between signed and unsigned
ppy.y:376: warning: comparison between signed and unsigned
ppy.y:376: warning: comparison between signed and unsigned
ppy.y:376: warning: comparison between signed and unsigned
ppy.y:376: warning: comparison between signed and unsigned
ppy.y:376: warning: comparison between signed and unsigned
In ISO C, operations involving both signed and unsigned types are
using signed. If the case of ui = ui OP si is really ment to make
use of this (despite the result being stored in an unsigned type),
we'd need to handle this via two casts, but I doubt this is really
the intent here.
Gerald
ChangeLog:
Add explicit casts when mixing operations for signed and unsigned types.
Index: libs/wpp/ppy.y
===================================================================
RCS file: /home/wine/wine/libs/wpp/ppy.y,v
retrieving revision 1.6
diff -u -3 -p -r1.6 ppy.y
--- libs/wpp/ppy.y 22 Oct 2007 14:57:42 -0000 1.6
+++ libs/wpp/ppy.y 22 Jul 2008 10:34:40 -0000
@@ -59,9 +59,9 @@
if(cv_signed(v1) && cv_signed(v2)) \
r.val.si = v1.val.si OP v2.val.si; \
else if(cv_signed(v1) && !cv_signed(v2)) \
- r.val.si = v1.val.si OP v2.val.ui; \
+ r.val.si = v1.val.si OP (signed) v2.val.ui; \
else if(!cv_signed(v1) && cv_signed(v2)) \
- r.val.ui = v1.val.ui OP v2.val.si; \
+ r.val.ui = v1.val.ui OP (unsigned) v2.val.si; \
else \
r.val.ui = v1.val.ui OP v2.val.ui;
@@ -70,9 +70,9 @@
if(cv_signed(v1) && cv_signed(v2)) \
r.val.sl = v1.val.sl OP v2.val.sl; \
else if(cv_signed(v1) && !cv_signed(v2)) \
- r.val.sl = v1.val.sl OP v2.val.ul; \
+ r.val.sl = v1.val.sl OP (signed long) v2.val.ul; \
else if(!cv_signed(v1) && cv_signed(v2)) \
- r.val.ul = v1.val.ul OP v2.val.sl; \
+ r.val.ul = v1.val.ul OP (unsigned long) v2.val.sl; \
else \
r.val.ul = v1.val.ul OP v2.val.ul;
@@ -81,9 +81,9 @@
if(cv_signed(v1) && cv_signed(v2)) \
r.val.sll = v1.val.sll OP v2.val.sll; \
else if(cv_signed(v1) && !cv_signed(v2)) \
- r.val.sll = v1.val.sll OP v2.val.ull; \
+ r.val.sll = v1.val.sll OP (signed long long) v2.val.ull; \
else if(!cv_signed(v1) && cv_signed(v2)) \
- r.val.ull = v1.val.ull OP v2.val.sll; \
+ r.val.ull = v1.val.ull OP (unsigned long long) v2.val.sll; \
else \
r.val.ull = v1.val.ull OP v2.val.ull;
More information about the wine-patches
mailing list