Stop fruitless ANF-ing
[ghc-hetmet.git] / rts / RtsFlags.c
index a6dbaf0..12121e8 100644 (file)
@@ -70,6 +70,7 @@ void initRtsFlagsDefaults(void)
     RtsFlags.GcFlags.minOldGenSize      = (1024 * 1024)       / BLOCK_SIZE;
     RtsFlags.GcFlags.maxHeapSize       = 0;    /* off by default */
     RtsFlags.GcFlags.heapSizeSuggestion        = 0;    /* none */
+    RtsFlags.GcFlags.heapSizeSuggestionAuto = rtsFalse;
     RtsFlags.GcFlags.pcFreeHeap                = 3;    /* 3% */
     RtsFlags.GcFlags.oldGenFactor       = 2;
     RtsFlags.GcFlags.generations        = 2;
@@ -690,9 +691,13 @@ error = rtsTrue;
                break;
 
              case 'H':
-               RtsFlags.GcFlags.heapSizeSuggestion =
-                    (nat)(decodeSize(rts_argv[arg], 2, BLOCK_SIZE, HS_WORD_MAX) / BLOCK_SIZE);
-               break;
+                  if (rts_argv[arg][2] == '\0') {
+                      RtsFlags.GcFlags.heapSizeSuggestionAuto = rtsTrue;
+                  } else {
+                      RtsFlags.GcFlags.heapSizeSuggestion =
+                          (nat)(decodeSize(rts_argv[arg], 2, BLOCK_SIZE, HS_WORD_MAX) / BLOCK_SIZE);
+                  }
+                  break;
 
 #ifdef RTS_GTK_FRONTPANEL
              case 'f':
@@ -1294,8 +1299,9 @@ decodeSize(const char *flag, nat offset, StgWord64 min, StgWord64 max)
     val = (StgWord64)m;
 
     if (m < 0 || val < min || val > max) {
-        errorBelch("error in RTS option %s: size outside allowed range (%" FMT_Word64 " - %" FMT_Word64 ")", 
-                   flag, min, max);
+        // printf doesn't like 64-bit format specs on Windows
+        // apparently, so fall back to unsigned long.
+        errorBelch("error in RTS option %s: size outside allowed range (%lu - %lu)", flag, (lnat)min, (lnat)max);
         stg_exit(EXIT_FAILURE);
     }
 
@@ -1384,3 +1390,18 @@ setFullProgArgv(int argc, char *argv[])
     full_prog_argv[argc] = NULL;
 }
 
+void
+freeFullProgArgv (void)
+{
+    int i;
+
+    if (full_prog_argv != NULL) {
+        for (i = 0; i < full_prog_argc; i++) {
+            stgFree(full_prog_argv[i]);
+        }
+        stgFree(full_prog_argv);
+    }
+
+    full_prog_argc = 0;
+    full_prog_argv = NULL;
+}