Fix C macro bug that was causing some stack checks to erroneously succeed
authorSimon Marlow <marlowsd@gmail.com>
Wed, 31 Oct 2012 11:18:36 +0000 (11:18 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 31 Oct 2012 11:21:30 +0000 (11:21 +0000)
includes/Cmm.h

index 211d2a8..5ef6c2d 100644 (file)
    CCCS_ALLOC(bytes);
 
 #define HEAP_CHECK(bytes,failure)                       \
-    Hp = Hp + bytes;                                    \
-    if (Hp > HpLim) { HpAlloc = bytes; failure; }       \
+    Hp = Hp + (bytes);                                  \
+    if (Hp > HpLim) { HpAlloc = (bytes); failure; }     \
     TICK_ALLOC_HEAP_NOCTR(bytes);
 
 #define ALLOC_PRIM_WITH_CUSTOM_FAILURE(bytes,failure)           \
 #define HP_CHK_P(bytes, fun, arg)               \
    HEAP_CHECK(bytes, GC_PRIM_P(fun,arg))
 
-#define ALLOC_P_TICKY(alloc, fun, arg)         \
-   HP_CHK_P(alloc);                           \
+#define ALLOC_P_TICKY(alloc, fun, arg)          \
+   HP_CHK_P(alloc);                             \
    TICK_ALLOC_HEAP_NOCTR(alloc);
 
 #define CHECK_GC()                                                      \
    }
 
 #define STK_CHK(n, fun)                         \
-    if (Sp - n < SpLim) {                       \
+    if (Sp - (n) < SpLim) {                     \
         GC_PRIM(fun)                            \
     }
 
 #define STK_CHK_P(n, fun, arg)                  \
-    if (Sp - n < SpLim) {                       \
+    if (Sp - (n) < SpLim) {                     \
         GC_PRIM_P(fun,arg)                      \
     }
 
 #define STK_CHK_PP(n, fun, arg1, arg2)          \
-    if (Sp - n < SpLim) {                       \
+    if (Sp - (n) < SpLim) {                     \
         GC_PRIM_PP(fun,arg1,arg2)               \
     }
 
 #define STK_CHK_ENTER(n, closure)               \
-    if (Sp - n < SpLim) {                       \
+    if (Sp - (n) < SpLim) {                     \
         jump __stg_gc_enter_1(closure);         \
     }