Interpreter: initialize arity fields of AP_NOUPDs
authorÖmer Sinan Ağacan <omeragacan@gmail.com>
Mon, 28 Oct 2019 12:57:25 +0000 (15:57 +0300)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Wed, 30 Oct 2019 00:32:18 +0000 (20:32 -0400)
AP_NOUPD entry code doesn't use the arity field, but not initializing
this field confuses printers/debuggers, and also makes testing harder as
the field's value changes randomly.

rts/Interpreter.c

index 2a886ff..463ddae 100644 (file)
@@ -1423,11 +1423,11 @@ run_BCO:
         }
 
         case bci_ALLOC_AP: {
-            StgAP* ap;
             int n_payload = BCO_NEXT;
-            ap = (StgAP*)allocate(cap, AP_sizeW(n_payload));
+            StgAP *ap = (StgAP*)allocate(cap, AP_sizeW(n_payload));
             SpW(-1) = (W_)ap;
             ap->n_args = n_payload;
+            ap->arity = 0;
             // No write barrier is needed here as this is a new allocation
             // visible only from our stack
             SET_HDR(ap, &stg_AP_info, cap->r.rCCCS)
@@ -1436,11 +1436,11 @@ run_BCO:
         }
 
         case bci_ALLOC_AP_NOUPD: {
-            StgAP* ap;
             int n_payload = BCO_NEXT;
-            ap = (StgAP*)allocate(cap, AP_sizeW(n_payload));
+            StgAP *ap = (StgAP*)allocate(cap, AP_sizeW(n_payload));
             SpW(-1) = (W_)ap;
             ap->n_args = n_payload;
+            ap->arity = 0;
             // No write barrier is needed here as this is a new allocation
             // visible only from our stack
             SET_HDR(ap, &stg_AP_NOUPD_info, cap->r.rCCCS)