diff --git a/ghc/compiler/absCSyn/PprAbsC.lhs b/ghc/compiler/absCSyn/PprAbsC.lhs
index f5456b8b15cb6991912240aa1d333f419729a046..95313257c9c2ee39fa54721ff23163187684f19d 100644
--- a/ghc/compiler/absCSyn/PprAbsC.lhs
+++ b/ghc/compiler/absCSyn/PprAbsC.lhs
@@ -170,6 +170,7 @@ pprAbsC (CSwitch discrim [(tag,alt_code)] deflt) c -- only one alt
       Just dc ->		-- make it an "if"
 		 do_if_stmt discrim tag alt_code dc c
 
+-- What problem is the re-ordering trying to solve ?
 pprAbsC (CSwitch discrim [(tag1@(MachInt i1 _), alt_code1),
 			      (tag2@(MachInt i2 _), alt_code2)] deflt) c
   | empty_deflt && ((i1 == 0 && i2 == 1) || (i1 == 1 && i2 == 0))
@@ -625,9 +626,23 @@ do_if_stmt discrim tag alt_code deflt c
 				      deflt alt_code
 				      (addrModeCosts discrim Rhs) c
       other              -> let
-			       cond = hcat [ pprAmode discrim,
-					  ptext SLIT(" == "),
-					  pprAmode (CLit tag) ]
+			       cond = hcat [ pprAmode discrim
+					   , ptext SLIT(" == ")
+					   , tcast
+					   , pprAmode (CLit tag)
+					   ]
+				-- to be absolutely sure that none of the 
+				-- conversion rules hit, e.g.,
+				--
+				--     minInt is different to (int)minInt
+			        --
+				-- in C (when minInt is a number not a constant
+				--  expression which evaluates to it.)
+				-- 
+			       tcast =
+			         case other of
+				   MachInt _ signed | signed    -> ptext SLIT("(I_)")
+				   _ -> empty
 			    in
 			    ppr_if_stmt cond
 					 alt_code deflt