diff --git a/Test/cppIntMinOverNegativeOne.frag b/Test/cppIntMinOverNegativeOne.frag
index 1cdaaeb78da3835aef82d6035b1fa97ced2abf43..b7e0a95364f59b7e1b5cd465b43ae48778b69ad0 100644
--- a/Test/cppIntMinOverNegativeOne.frag
+++ b/Test/cppIntMinOverNegativeOne.frag
@@ -1,3 +1,6 @@
 #if (-2147483648 / -1) != 0
 #error INT_MIN / -1 should yield 0, something went wrong.
+#endif
+#if (-2147483648 % -1) != 0
+#error INT_MIN % -1 should yield 0, something went wrong.
 #endif
\ No newline at end of file
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index 0cb560cc8f93d1a931ebef76a815ca4e69f93339..aeb42a09a6fed888d5589da4374e6339a579a2d7 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -352,7 +352,7 @@ namespace {
     int op_sub(int a, int b) { return a - b; }
     int op_mul(int a, int b) { return a * b; }
     int op_div(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a / b; }
-    int op_mod(int a, int b) { return a % b; }
+    int op_mod(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a % b; }
     int op_pos(int a) { return a; }
     int op_neg(int a) { return -a; }
     int op_cmpl(int a) { return ~a; }