diff --git a/rtree-c/bin/Main.hs b/rtree-c/bin/Main.hs
index 33e56864dae6517dd9b67e081d1cc0bc6132f7cf..a5df113ea642c764d31d31f59f774ae2f8a5b280 100644
--- a/rtree-c/bin/Main.hs
+++ b/rtree-c/bin/Main.hs
@@ -28,6 +28,7 @@ import System.Directory
 import System.Exit
 import System.FilePath
 import System.IO
+import System.IO.Temp
 import System.Process.Typed
 import Text.Pretty.Simple
 import Text.PrettyPrint qualified as P
@@ -129,7 +130,7 @@ run = do
     usingLoggerT (filterBySeverity Info msgSeverity $ cmapM fmt logTextStderr) do
       let
         test f = process D ("test " <> Text.pack f) do
-          err <- liftIO $ runProcess cmd
+          err <- liftIO $ runProcess (proc cmd [])
           log D (Text.pack $ show err)
           pure err
 
@@ -167,9 +168,8 @@ run = do
             ExitFailure x
               | Just x == validity -> do
                   folder <- liftIO do
-                    t <- getCurrentTime
-                    let folder = "invalid-" <> show decided <> "-" <> iso8601Show t
-                    createDirectoryIfMissing False folder
+                    temp <- getCanonicalTemporaryDirectory
+                    folder <- createTempDirectory temp "rtree-c"
                     withFile (folder </> "reduction.path") WriteMode \h -> do
                       forM (takeWhile ((/= RPath.Undecided) . RPath.choice) l) \(RPath.AnnotatedChoice c' (msg, pos)) -> do
                         hPutStr h [RPath.debugShowChoice c']
@@ -177,6 +177,7 @@ run = do
                         hPutStr h msg
                         hPutStr h " at "
                         hPrint h pos
+                    copyFile cmd (folder </> takeFileName cmd)
                     copyFile (f <.> "last") (folder </> takeFileName (f <.> "last"))
                     copyFile f (folder </> takeFileName f)
                     pure folder
diff --git a/rtree-c/package.yaml b/rtree-c/package.yaml
index a379370956a9cbd0ead2f81fffe5ea1f6d45d036..3a5a1e7dca81f55514c72def947e1b1299c57859 100644
--- a/rtree-c/package.yaml
+++ b/rtree-c/package.yaml
@@ -32,6 +32,7 @@ executables:
       - directory
       - pretty
       - filepath
+      - temporary
       - co-log
       - time
       - text
diff --git a/rtree-c/rtree-c.cabal b/rtree-c/rtree-c.cabal
index 3a47b2eb4f6dc124416b92e3621e27ab3c1d8b2c..90e125fd82088e1812fbf721264301275b88e328 100644
--- a/rtree-c/rtree-c.cabal
+++ b/rtree-c/rtree-c.cabal
@@ -48,6 +48,7 @@ executable rtree-c
     , pretty-simple
     , rtree
     , rtree-c
+    , temporary
     , text
     , time
     , transformers
diff --git a/rtree-c/src/ReduceC.hs b/rtree-c/src/ReduceC.hs
index a94ca0b01bedb6fe911cba990bd425a9342a4dbb..7505df9aa735d4a76220f46f06614502c6c8818f 100644
--- a/rtree-c/src/ReduceC.hs
+++ b/rtree-c/src/ReduceC.hs
@@ -575,7 +575,8 @@ reduceCStatement smt labs ctx = case smt of
             exceptIf ("remove expr statement", C.posOf smt)
             e' <- re'
             pure $ C.CExpr (Just e') ni
-      Nothing ->
+      Nothing -> do
+        exceptIf ("remove expr statement", C.posOf smt)
         pure $ C.CExpr Nothing ni
   C.CReturn me ni -> do
     -- TODO: If function returntype is not struct return 0