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