-#define CHadd(cs, c) ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c))
-#define CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c))
+#define CHadd(cs, c) do { \
+ (cs)->ptr[(uch)(c)] = (uch)((cs)->ptr[(uch)(c)] | (cs)->mask); \
+ (cs)->hash = (uch)((cs)->hash + (c)); \
+} while (0)
+
+#define CHsub(cs, c) do { \
+ (cs)->ptr[(uch)(c)] = (uch)((cs)->ptr[(uch)(c)] & ~(cs)->mask); \
+ (cs)->hash = (uch)((cs)->hash - (c)); \
+} while (0)
+