diff --git a/rtree-c/src/ReduceC.hs b/rtree-c/src/ReduceC.hs
index f95c80cc89ae51e0cd7661833883de0a6d582632..a464686af6eb87538ebd7a27edcce445baa8a80f 100644
--- a/rtree-c/src/ReduceC.hs
+++ b/rtree-c/src/ReduceC.hs
@@ -185,10 +185,21 @@ reduceCFunDef
   -> Context
   -> m (C.CFunctionDef C.NodeInfo)
 reduceCFunDef (C.CFunDef spc dec cdecls smt ni) ctx = do
+  let spc'' =
+        filter
+          ( \case
+              C.CStorageSpec (C.CStatic _) -> False
+              _ow -> True
+          )
+          spc
+  spc' <-
+    if spc'' /= spc
+      then split ("remove static", C.posOf ni) (pure spc'') (pure spc)
+      else pure spc
   smt' <- reduceCStatementOrEmptyBlock smt ctx'
   pure $
     C.CFunDef
-      (inlineTypeDefsSpecs spc ctx)
+      (inlineTypeDefsSpecs spc' ctx)
       (inlineTypeDefsCDeclarator dec ctx)
       (map (`inlineTypeDefsCDeclaration` ctx) cdecls)
       smt'
@@ -282,8 +293,9 @@ reduceCStatementOrEmptyBlock stmt ctx = do
       ex
     Nothing -> do
       pure emptyBlock
- where
-  emptyBlock = C.CCompound [] [] C.undefNode
+
+emptyBlock :: C.CStatement C.NodeInfo
+emptyBlock = C.CCompound [] [] C.undefNode
 
 reduceCStatement
   :: (MonadReduce Lab m, HasCallStack)
@@ -328,12 +340,17 @@ reduceCStatement smt ctx = case smt of
         maybeSplit ("remove else branch", C.posOf els') do
           reduceCStatement els' ctx
       Nothing -> pure Nothing
-    s' <- reduceCStatementOrEmptyBlock s ctx
-    case (e', els') of
-      (Nothing, Nothing) -> pure s'
-      (Just e'', Nothing) -> pure $ C.CIf e'' s' Nothing ni
-      (Nothing, Just x) -> pure $ C.CIf zeroExpr s' (Just x) ni
-      (Just e'', Just x) -> pure $ C.CIf e'' s' (Just x) ni
+    ms' <- maybeSplit ("remove if branch", C.posOf s) do
+      reduceCStatement s ctx
+    case (e', ms', els') of
+      (Nothing, Nothing, Nothing) -> pure emptyBlock
+      (Just e'', Just s', Nothing) -> pure $ C.CIf e'' s' Nothing ni
+      (Nothing, Just s', Just x) -> pure $ C.CIf zeroExpr s' (Just x) ni
+      (Just e'', Just s', Just x) -> pure $ C.CIf e'' s' (Just x) ni
+      (Just e'', Nothing, Nothing) -> pure $ C.CExpr (Just e'') C.undefNode
+      (Nothing, Nothing, Just x) -> pure x
+      (Just e'', Nothing, Just x) -> pure $ C.CIf e'' emptyBlock (Just x) ni
+      (Nothing, Just s', Nothing) -> pure s'
   C.CFor e1 e2 e3 s ni -> Just $ do
     (me1', ctx') <- case e1 of
       C.CForDecl (C.CDecl rec decl ni') -> do
@@ -429,7 +446,10 @@ reduceCExprOrZero :: (MonadReduce Lab m, HasCallStack) => C.CExpr -> Context ->
 reduceCExprOrZero expr ctx = do
   case reduceCExpr expr ctx of
     Just ex -> do
-      split ("replace by zero", C.posOf expr) (pure zeroExpr) ex
+      r <- ex
+      if r == zeroExpr
+        then pure r
+        else split ("replace by zero", C.posOf expr) (pure zeroExpr) (pure r)
     Nothing -> do
       pure zeroExpr
 {-# INLINE reduceCExprOrZero #-}
@@ -480,11 +500,19 @@ reduceCExpr expr ctx = case expr of
       e <- elhs'
       pure $ C.CUnary o e ni
   C.CCall e es ni -> do
-    re <- reduceCExpr e (addKeyword DisallowVariableInlining ctx)
-    Just $ do
-      e' <- re
-      es' <- traverse (`reduceCExprOrZero` ctx) es
-      pure $ C.CCall e' es' ni
+    let re = reduceCExpr e (addKeyword DisallowVariableInlining ctx)
+        res = map (`reduceCExpr` ctx) es
+    case (re, catMaybes res) of
+      (Nothing, []) -> Nothing
+      (Nothing, [r]) -> Just r
+      (_, _) -> Just do
+        e' <- maybeSplit ("do without function", C.posOf e) re
+        es' <- res & traverse (maybeSplit ("do without pram", C.posOf e))
+        case (e', catMaybes es') of
+          (Nothing, []) -> pure zeroExpr
+          (Nothing, [e'']) -> pure e''
+          (Nothing, es'') -> pure $ C.CComma es'' C.undefNode
+          (Just f, _) -> pure $ C.CCall f (map (fromMaybe zeroExpr) es') ni
   C.CCond ec et ef ni -> do
     -- TODO: More fine grained reduction is possible here.
     Just $ do
diff --git a/rtree-c/test/cases/small/functions.c b/rtree-c/test/cases/small/functions.c
new file mode 100644
index 0000000000000000000000000000000000000000..3c013ec34e016342834b54171c4295b3e6571a48
--- /dev/null
+++ b/rtree-c/test/cases/small/functions.c
@@ -0,0 +1,9 @@
+int f(int a) { 
+}
+
+static int g(int a) { 
+}
+
+int main() { 
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000000.c b/rtree-c/test/expected/add/reduction/r0000000000.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000000000.c
rename to rtree-c/test/expected/add/reduction/r0000000000.c
index cf8062be11b80a2610bf17745189ec5129fdcc97..fb30a1d9de2a65163525ba6bfc2e3b609ea0f12d 100644
--- a/rtree-c/test/expected/add/reduction/r000000000.c
+++ b/rtree-c/test/expected/add/reduction/r0000000000.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0000001.c b/rtree-c/test/expected/add/reduction/r0000000001.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r0000001.c
rename to rtree-c/test/expected/add/reduction/r0000000001.c
index 64fc9f592bec1cedf6b444efae96a2bc5a2272fa..a6912006190f90a6e4b13ad71e6aeb011425c400 100644
--- a/rtree-c/test/expected/add/reduction/r0000001.c
+++ b/rtree-c/test/expected/add/reduction/r0000000001.c
@@ -1,9 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r000000001.c b/rtree-c/test/expected/add/reduction/r0000000010.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000000001.c
rename to rtree-c/test/expected/add/reduction/r0000000010.c
index 3c81f19da7f035c1690c6c40331af42a211e94c6..14ac768f27869ad8233b68b257f8750dc7f01e4c 100644
--- a/rtree-c/test/expected/add/reduction/r000000001.c
+++ b/rtree-c/test/expected/add/reduction/r0000000010.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0000000011.c b/rtree-c/test/expected/add/reduction/r0000000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..0636b346a5b34e63fbd6a795bcfda389cc4a8a18
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000000011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000010.c b/rtree-c/test/expected/add/reduction/r0000000100.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000000010.c
rename to rtree-c/test/expected/add/reduction/r0000000100.c
index 8b24fabd5b209e63391b0c11dfdd539a897734cc..6cbd0b539d320a44afa893e876e0baf07db3e550 100644
--- a/rtree-c/test/expected/add/reduction/r000000010.c
+++ b/rtree-c/test/expected/add/reduction/r0000000100.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0000000101.c b/rtree-c/test/expected/add/reduction/r0000000101.c
new file mode 100644
index 0000000000000000000000000000000000000000..ba6036a24692a460594ce70aa2662e5d98652457
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000000101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000011.c b/rtree-c/test/expected/add/reduction/r0000000110.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000000011.c
rename to rtree-c/test/expected/add/reduction/r0000000110.c
index 841508eac5249fb20d395c8886feb5f28a33fad8..1d53078fb1bd90b543857e437687852775f454c1 100644
--- a/rtree-c/test/expected/add/reduction/r000000011.c
+++ b/rtree-c/test/expected/add/reduction/r0000000110.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0000000111.c b/rtree-c/test/expected/add/reduction/r0000000111.c
new file mode 100644
index 0000000000000000000000000000000000000000..23adb94f16096bee41c8e1c55b76d97601c84eb4
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000000111.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001000.c b/rtree-c/test/expected/add/reduction/r0000001000.c
new file mode 100644
index 0000000000000000000000000000000000000000..2c70fba0f63057227b7ffa52ae81f5b2b5683d8d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001001.c b/rtree-c/test/expected/add/reduction/r0000001001.c
new file mode 100644
index 0000000000000000000000000000000000000000..55dbcab0851ec6dac6c744204bd57b6bdf45a5c6
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001010.c b/rtree-c/test/expected/add/reduction/r0000001010.c
new file mode 100644
index 0000000000000000000000000000000000000000..198371ff08fd50d5ae79e62b23852dfc9ef00ca5
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001011.c b/rtree-c/test/expected/add/reduction/r0000001011.c
new file mode 100644
index 0000000000000000000000000000000000000000..d630721205ac277b063280a1805221c1cda03e99
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001100.c b/rtree-c/test/expected/add/reduction/r0000001100.c
new file mode 100644
index 0000000000000000000000000000000000000000..14daad9e214983a6bd6f95ecdb0f5269c0ab1e52
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001101.c b/rtree-c/test/expected/add/reduction/r0000001101.c
new file mode 100644
index 0000000000000000000000000000000000000000..a322bacd077b380906522e3d8530e053e9756400
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000111.c b/rtree-c/test/expected/add/reduction/r000000111.c
new file mode 100644
index 0000000000000000000000000000000000000000..2b806c164f6c6d3f350aa89ec215a5c46e2bb604
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000000111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000001.c b/rtree-c/test/expected/add/reduction/r000001.c
index e66ccb2c030e423cbf9b0934ec6c11e9c0f5f45f..cd8a689bc9352b8266341899816af18d6c3b5f84 100644
--- a/rtree-c/test/expected/add/reduction/r000001.c
+++ b/rtree-c/test/expected/add/reduction/r000001.c
@@ -1,8 +1,8 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0000100000.c b/rtree-c/test/expected/add/reduction/r0000100000.c
new file mode 100644
index 0000000000000000000000000000000000000000..8fd77395a1fa038029d94402f5b434fb8cf66a7b
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100001.c b/rtree-c/test/expected/add/reduction/r0000100001.c
new file mode 100644
index 0000000000000000000000000000000000000000..be1c6d86b1d8693b650bc35bc1ff7e76dd57d257
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100010.c b/rtree-c/test/expected/add/reduction/r0000100010.c
new file mode 100644
index 0000000000000000000000000000000000000000..f8b5d0d2f70b5421be921a90b93c959e50916113
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(10, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100011.c b/rtree-c/test/expected/add/reduction/r0000100011.c
new file mode 100644
index 0000000000000000000000000000000000000000..164fe6f2a6349742d058722ca01ee58cc5c8029e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100100.c b/rtree-c/test/expected/add/reduction/r0000100100.c
new file mode 100644
index 0000000000000000000000000000000000000000..a849cd1ef51bee5a37dbadc98036f88e25620557
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(0, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100101.c b/rtree-c/test/expected/add/reduction/r0000100101.c
new file mode 100644
index 0000000000000000000000000000000000000000..a8a9ef6a4cf746d9839f9b90afb25ca66f574c43
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100110.c b/rtree-c/test/expected/add/reduction/r0000100110.c
new file mode 100644
index 0000000000000000000000000000000000000000..fad65c74551b4290b7ae9689505c8ef6df484955
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100110.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(0, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100111.c b/rtree-c/test/expected/add/reduction/r0000100111.c
new file mode 100644
index 0000000000000000000000000000000000000000..bd837492c78dfb23d1cfee3b40d7270af0da661e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100111.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101000.c b/rtree-c/test/expected/add/reduction/r0000101000.c
new file mode 100644
index 0000000000000000000000000000000000000000..657aae343e2895e8bdde65061e4048eea9333d18
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101001.c b/rtree-c/test/expected/add/reduction/r0000101001.c
new file mode 100644
index 0000000000000000000000000000000000000000..b0b38a92de4a5356b86f37436b5201dfd60c3436
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101010.c b/rtree-c/test/expected/add/reduction/r0000101010.c
new file mode 100644
index 0000000000000000000000000000000000000000..521e11d743c60379c164677f94337dff3055dc6e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101011.c b/rtree-c/test/expected/add/reduction/r0000101011.c
new file mode 100644
index 0000000000000000000000000000000000000000..3caeabe8c8a5e500b92345b923892bdcfbe77b8e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101100.c b/rtree-c/test/expected/add/reduction/r0000101100.c
new file mode 100644
index 0000000000000000000000000000000000000000..9d54bb7d6c94549984284e70859ecce51e71be9b
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101101.c b/rtree-c/test/expected/add/reduction/r0000101101.c
new file mode 100644
index 0000000000000000000000000000000000000000..7a185a73366290cbeefc959761b332dc8af7686d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000010111.c b/rtree-c/test/expected/add/reduction/r000010111.c
new file mode 100644
index 0000000000000000000000000000000000000000..86584ab124c72b950436a3012f54218294e3b735
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000010111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000011.c b/rtree-c/test/expected/add/reduction/r000011.c
index 29cdcfec14dca25a66af8703bd010fed2c2521b6..025a273f30635846e35022caeb21863289eed911 100644
--- a/rtree-c/test/expected/add/reduction/r000011.c
+++ b/rtree-c/test/expected/add/reduction/r000011.c
@@ -1,13 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
-// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
-    return b;
+    return 0;
 }
 int main()
 {
diff --git a/rtree-c/test/expected/add/reduction/r000010000.c b/rtree-c/test/expected/add/reduction/r0001000000.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000010000.c
rename to rtree-c/test/expected/add/reduction/r0001000000.c
index 12d3ffa5958e1389512375bb39decd32d32d9556..1ef25e0e7c9b1703aab8f1ccd589cfd45be5eaab 100644
--- a/rtree-c/test/expected/add/reduction/r000010000.c
+++ b/rtree-c/test/expected/add/reduction/r0001000000.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0000101.c b/rtree-c/test/expected/add/reduction/r0001000001.c
similarity index 72%
rename from rtree-c/test/expected/add/reduction/r0000101.c
rename to rtree-c/test/expected/add/reduction/r0001000001.c
index 87fb6487d7840b1c97317623640cea7b2d383451..49750146eb62cbe794bafe67eeb388b5811c2f85 100644
--- a/rtree-c/test/expected/add/reduction/r0000101.c
+++ b/rtree-c/test/expected/add/reduction/r0001000001.c
@@ -1,9 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r000010001.c b/rtree-c/test/expected/add/reduction/r0001000010.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000010001.c
rename to rtree-c/test/expected/add/reduction/r0001000010.c
index f670f50d5401b6843ae345e3ea528dcad543aa6a..72d6d2fa0332f2cd290f430d7b291426bba9f955 100644
--- a/rtree-c/test/expected/add/reduction/r000010001.c
+++ b/rtree-c/test/expected/add/reduction/r0001000010.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0001000011.c b/rtree-c/test/expected/add/reduction/r0001000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..19b84bb5d0fdb9a9e6f1239fef02b624e9e632cf
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001000011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000010010.c b/rtree-c/test/expected/add/reduction/r0001000100.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000010010.c
rename to rtree-c/test/expected/add/reduction/r0001000100.c
index a0057e8e57e237d4eaebb06cc53ee41bb65a76f7..ac9e3a78c5123e2607173927656a26bc4df99d06 100644
--- a/rtree-c/test/expected/add/reduction/r000010010.c
+++ b/rtree-c/test/expected/add/reduction/r0001000100.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0001000101.c b/rtree-c/test/expected/add/reduction/r0001000101.c
new file mode 100644
index 0000000000000000000000000000000000000000..9582d5c518385e2c77759cab27804954b9b3ffea
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001000101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000010011.c b/rtree-c/test/expected/add/reduction/r0001000110.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000010011.c
rename to rtree-c/test/expected/add/reduction/r0001000110.c
index fb62fc5f88ebd1badbb038421947f798ec69dc2a..325d3f5e21e07c7b45e9540f81f13f46953cdd33 100644
--- a/rtree-c/test/expected/add/reduction/r000010011.c
+++ b/rtree-c/test/expected/add/reduction/r0001000110.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0001000111.c b/rtree-c/test/expected/add/reduction/r0001000111.c
new file mode 100644
index 0000000000000000000000000000000000000000..b006144dffe7f759924be8c2a72c6de781924238
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001000111.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001000.c b/rtree-c/test/expected/add/reduction/r0001001000.c
new file mode 100644
index 0000000000000000000000000000000000000000..3248b5df8d4ba2036aac31e52222436d7079c4b3
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001001.c b/rtree-c/test/expected/add/reduction/r0001001001.c
new file mode 100644
index 0000000000000000000000000000000000000000..04f3afd736ecf89c5f3fd1ce123af11e2216c332
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001010.c b/rtree-c/test/expected/add/reduction/r0001001010.c
new file mode 100644
index 0000000000000000000000000000000000000000..1bb03113d0d96ec2bbf52dc37217914e323f213b
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001011.c b/rtree-c/test/expected/add/reduction/r0001001011.c
new file mode 100644
index 0000000000000000000000000000000000000000..cf3a3fcd9324f1149260a8516a53b7266985f1f2
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001100.c b/rtree-c/test/expected/add/reduction/r0001001100.c
new file mode 100644
index 0000000000000000000000000000000000000000..db13198189a62d24313b873969ce012b76256785
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001101.c b/rtree-c/test/expected/add/reduction/r0001001101.c
new file mode 100644
index 0000000000000000000000000000000000000000..df75f8ea1a823439c6e538a384d22e64ea377630
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000100111.c b/rtree-c/test/expected/add/reduction/r000100111.c
new file mode 100644
index 0000000000000000000000000000000000000000..9e3a851cc93b6cf4f4facd1e377ad49247de44df
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000100111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000101.c b/rtree-c/test/expected/add/reduction/r000101.c
index 11ed208f99b4d265cd497574a3f4bab38410edbe..bf785519bf9b54aa81c600328f8fc6e9cbd8482f 100644
--- a/rtree-c/test/expected/add/reduction/r000101.c
+++ b/rtree-c/test/expected/add/reduction/r000101.c
@@ -1,15 +1,14 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
 // 0 replace by zero at ("test/cases/small/add.c": line 2)
-// 1 reduce to left at ("test/cases/small/add.c": line 2)
-// 0 remove statement at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
-    return a;
+    return b;
 }
 int main()
 {
-    return 0;
 }
diff --git a/rtree-c/test/expected/add/reduction/r0001100000.c b/rtree-c/test/expected/add/reduction/r0001100000.c
new file mode 100644
index 0000000000000000000000000000000000000000..ea6accff735340c20672079c86169e8fd048bcbd
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100001.c b/rtree-c/test/expected/add/reduction/r0001100001.c
new file mode 100644
index 0000000000000000000000000000000000000000..21d5153e12fd44cd76fd1279c3e377712d483f74
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100010.c b/rtree-c/test/expected/add/reduction/r0001100010.c
new file mode 100644
index 0000000000000000000000000000000000000000..b46dd1e6fc8f8b4ec27ce97cc8f6d4365719a29d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(10, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100011.c b/rtree-c/test/expected/add/reduction/r0001100011.c
new file mode 100644
index 0000000000000000000000000000000000000000..e5bc91706539bdfaa1d1122266ecb0aa8fd12c31
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100100.c b/rtree-c/test/expected/add/reduction/r0001100100.c
new file mode 100644
index 0000000000000000000000000000000000000000..e2c1419ab0b1eb0d007d3b75224be532536fc3e8
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(0, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100101.c b/rtree-c/test/expected/add/reduction/r0001100101.c
new file mode 100644
index 0000000000000000000000000000000000000000..918a049ecf1b1a7a27446ecf29ce007a9022878d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100110.c b/rtree-c/test/expected/add/reduction/r0001100110.c
new file mode 100644
index 0000000000000000000000000000000000000000..1341aaa2ccb5ef2ec38d4b59236aedf225e0baff
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100110.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(0, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100111.c b/rtree-c/test/expected/add/reduction/r0001100111.c
new file mode 100644
index 0000000000000000000000000000000000000000..08fe2df111ed3a799a143f065fa32b991ab7bb9f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100111.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101000.c b/rtree-c/test/expected/add/reduction/r0001101000.c
new file mode 100644
index 0000000000000000000000000000000000000000..fbadbd69d5e9813e9804322ea452694e3e4282a3
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101001.c b/rtree-c/test/expected/add/reduction/r0001101001.c
new file mode 100644
index 0000000000000000000000000000000000000000..a0902e80481b76639b322d87f9ef71cddee8938f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101010.c b/rtree-c/test/expected/add/reduction/r0001101010.c
new file mode 100644
index 0000000000000000000000000000000000000000..3be749276c725d079563a1851635c4ef65bf8493
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101011.c b/rtree-c/test/expected/add/reduction/r0001101011.c
new file mode 100644
index 0000000000000000000000000000000000000000..96c7deca370ed540f452be1408ec9e76b8ccda82
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101100.c b/rtree-c/test/expected/add/reduction/r0001101100.c
new file mode 100644
index 0000000000000000000000000000000000000000..0425a2bcba3f691b64f3b6f855ba1791b756795f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101101.c b/rtree-c/test/expected/add/reduction/r0001101101.c
new file mode 100644
index 0000000000000000000000000000000000000000..2e521da462e282e455b709213f31ddc82b9b8275
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000110111.c b/rtree-c/test/expected/add/reduction/r000110111.c
new file mode 100644
index 0000000000000000000000000000000000000000..8492f47023aee840d32f21766940ec98fec75a2e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000110111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00011.c b/rtree-c/test/expected/add/reduction/r000111.c
similarity index 54%
rename from rtree-c/test/expected/add/reduction/r00011.c
rename to rtree-c/test/expected/add/reduction/r000111.c
index 6db3a28420304bbb269090279fa2061ba563942c..293a3ba1147ab3fa6cce56aa8c404af67bd3cbc7 100644
--- a/rtree-c/test/expected/add/reduction/r00011.c
+++ b/rtree-c/test/expected/add/reduction/r000111.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
-// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
-    return a;
+    return 0;
 }
 int main()
 {
diff --git a/rtree-c/test/expected/add/reduction/r00010000.c b/rtree-c/test/expected/add/reduction/r001000000.c
similarity index 70%
rename from rtree-c/test/expected/add/reduction/r00010000.c
rename to rtree-c/test/expected/add/reduction/r001000000.c
index 6704ccd48706a25578d3650f2af79ad20a155add..35b79c03ba910e482af2fcfdf8ec953e503760e0 100644
--- a/rtree-c/test/expected/add/reduction/r00010000.c
+++ b/rtree-c/test/expected/add/reduction/r001000000.c
@@ -1,10 +1,11 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r001000001.c b/rtree-c/test/expected/add/reduction/r001000001.c
new file mode 100644
index 0000000000000000000000000000000000000000..4e71c31011195b3925a4b58d87a777c4aee0a0c5
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000001.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00010001.c b/rtree-c/test/expected/add/reduction/r001000010.c
similarity index 70%
rename from rtree-c/test/expected/add/reduction/r00010001.c
rename to rtree-c/test/expected/add/reduction/r001000010.c
index c1d1bd8a267c27a199f065364139f1ec5c667eb6..33f30cbca0114debaf8957600bd3f82b69012418 100644
--- a/rtree-c/test/expected/add/reduction/r00010001.c
+++ b/rtree-c/test/expected/add/reduction/r001000010.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001000011.c b/rtree-c/test/expected/add/reduction/r001000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..247f3c0a48a1cc8b32e6f3b9b84b17bb23755155
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000011.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00010010.c b/rtree-c/test/expected/add/reduction/r001000100.c
similarity index 70%
rename from rtree-c/test/expected/add/reduction/r00010010.c
rename to rtree-c/test/expected/add/reduction/r001000100.c
index 9406ac11b9d8176cae659e271efd334e1876fbb7..4fb332de5f1fc4f9dd86affffffe354d812b34e0 100644
--- a/rtree-c/test/expected/add/reduction/r00010010.c
+++ b/rtree-c/test/expected/add/reduction/r001000100.c
@@ -1,10 +1,11 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r001000101.c b/rtree-c/test/expected/add/reduction/r001000101.c
new file mode 100644
index 0000000000000000000000000000000000000000..b3c320a14cc10b074485bb1b67bf4b6dea2e03d2
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000101.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00010011.c b/rtree-c/test/expected/add/reduction/r001000110.c
similarity index 70%
rename from rtree-c/test/expected/add/reduction/r00010011.c
rename to rtree-c/test/expected/add/reduction/r001000110.c
index 49c116611cf4f64cbb86ac38719e2cc4f0064d7c..510a01289b2804e01006e930d21e81aa7a00ec4f 100644
--- a/rtree-c/test/expected/add/reduction/r00010011.c
+++ b/rtree-c/test/expected/add/reduction/r001000110.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001000111.c b/rtree-c/test/expected/add/reduction/r001000111.c
new file mode 100644
index 0000000000000000000000000000000000000000..d833d4505e6847cc4df1c8213449541bc96ba63f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001000.c b/rtree-c/test/expected/add/reduction/r001001000.c
new file mode 100644
index 0000000000000000000000000000000000000000..e35838b3a02bcb6f2f757825ae7a834294ce95e2
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001000.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001001.c b/rtree-c/test/expected/add/reduction/r001001001.c
new file mode 100644
index 0000000000000000000000000000000000000000..89c42bb150d391cc6c18ff8020e883dee9fdb418
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001001.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001010.c b/rtree-c/test/expected/add/reduction/r001001010.c
new file mode 100644
index 0000000000000000000000000000000000000000..dc42b262cf544b0fc76719745870a74548fddb04
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001010.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001011.c b/rtree-c/test/expected/add/reduction/r001001011.c
new file mode 100644
index 0000000000000000000000000000000000000000..d365a46ef8539a2a32ebd52e7673db80b94cce02
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001011.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001100.c b/rtree-c/test/expected/add/reduction/r001001100.c
new file mode 100644
index 0000000000000000000000000000000000000000..0db50c609a9502c4853534f0f61598b6feb7dbc3
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001100.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001101.c b/rtree-c/test/expected/add/reduction/r001001101.c
new file mode 100644
index 0000000000000000000000000000000000000000..2836ded24b699ee87f173ed4b0e04805f7cae94c
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001101.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00100111.c b/rtree-c/test/expected/add/reduction/r00100111.c
new file mode 100644
index 0000000000000000000000000000000000000000..2d3f0a9b0d689dd2e013b5a4ec1fa05022ae0115
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00100111.c
@@ -0,0 +1,17 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00101.c b/rtree-c/test/expected/add/reduction/r00101.c
index a90efe1c9752934d8869800f5aefd74b081235a6..e518c5f38d774f0ef4666dd34a0330cfec02887e 100644
--- a/rtree-c/test/expected/add/reduction/r00101.c
+++ b/rtree-c/test/expected/add/reduction/r00101.c
@@ -1,14 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 1 replace by zero at ("test/cases/small/add.c": line 2)
-// 0 remove statement at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
-    return 0;
+    return a;
 }
 int main()
 {
-    return 0;
 }
diff --git a/rtree-c/test/expected/add/reduction/r0010000.c b/rtree-c/test/expected/add/reduction/r001100000.c
similarity index 61%
rename from rtree-c/test/expected/add/reduction/r0010000.c
rename to rtree-c/test/expected/add/reduction/r001100000.c
index a4876cafc33c4ba6bedf25ac7f52fbab82d8564a..736141a01679aa87ec79b827aef7b5182136e299 100644
--- a/rtree-c/test/expected/add/reduction/r0010000.c
+++ b/rtree-c/test/expected/add/reduction/r001100000.c
@@ -1,9 +1,11 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r001100001.c b/rtree-c/test/expected/add/reduction/r001100001.c
new file mode 100644
index 0000000000000000000000000000000000000000..75f487947e08b71aea8b993e7a5c7d95df0ef3ed
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001100001.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0010001.c b/rtree-c/test/expected/add/reduction/r001100010.c
similarity index 61%
rename from rtree-c/test/expected/add/reduction/r0010001.c
rename to rtree-c/test/expected/add/reduction/r001100010.c
index bad7d7386a7e76a86ed781e9e833c4ceb0c39941..25d46563c23e8e3df255f28859295c47ea3d697f 100644
--- a/rtree-c/test/expected/add/reduction/r0010001.c
+++ b/rtree-c/test/expected/add/reduction/r001100010.c
@@ -1,10 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001100011.c b/rtree-c/test/expected/add/reduction/r001100011.c
new file mode 100644
index 0000000000000000000000000000000000000000..cddba802493ec7998768d8b8dd09d5d935024f3e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001100011.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0010010.c b/rtree-c/test/expected/add/reduction/r001100100.c
similarity index 61%
rename from rtree-c/test/expected/add/reduction/r0010010.c
rename to rtree-c/test/expected/add/reduction/r001100100.c
index ef3794e00b48f72207d1351fb162b7d04dd37af5..ac926e65bf4384456c8030c7fb91edec1448f494 100644
--- a/rtree-c/test/expected/add/reduction/r0010010.c
+++ b/rtree-c/test/expected/add/reduction/r001100100.c
@@ -1,9 +1,11 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r001100101.c b/rtree-c/test/expected/add/reduction/r001100101.c
new file mode 100644
index 0000000000000000000000000000000000000000..ab58c564971f40b289180c15cbc497f3053b3cca
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001100101.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0010011.c b/rtree-c/test/expected/add/reduction/r001100110.c
similarity index 61%
rename from rtree-c/test/expected/add/reduction/r0010011.c
rename to rtree-c/test/expected/add/reduction/r001100110.c
index 55ee7ebdeb274d46d085e68548adda192d197287..cff09810a683cf3702acd95f4fb159b1065f8d36 100644
--- a/rtree-c/test/expected/add/reduction/r0010011.c
+++ b/rtree-c/test/expected/add/reduction/r001100110.c
@@ -1,10 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001100111.c b/rtree-c/test/expected/add/reduction/r001100111.c
new file mode 100644
index 0000000000000000000000000000000000000000..fdb19636d405962200c80b8e1f03cd5c04e6254c
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001100111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101000.c b/rtree-c/test/expected/add/reduction/r001101000.c
new file mode 100644
index 0000000000000000000000000000000000000000..99a211124052e41944f94cf12035f8e274aaea20
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101000.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101001.c b/rtree-c/test/expected/add/reduction/r001101001.c
new file mode 100644
index 0000000000000000000000000000000000000000..1a016d0b8a222a29c13b8d43978c618eb96d881a
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101001.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101010.c b/rtree-c/test/expected/add/reduction/r001101010.c
new file mode 100644
index 0000000000000000000000000000000000000000..5fb1797d7328580b15c45d4d9d26139014f25d88
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101010.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101011.c b/rtree-c/test/expected/add/reduction/r001101011.c
new file mode 100644
index 0000000000000000000000000000000000000000..d15197b13f06aef213a175565f4c233c1125f96a
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101011.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101100.c b/rtree-c/test/expected/add/reduction/r001101100.c
new file mode 100644
index 0000000000000000000000000000000000000000..3420f2e21ff1c8b441bd278413a5bf1360b4695a
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101100.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101101.c b/rtree-c/test/expected/add/reduction/r001101101.c
new file mode 100644
index 0000000000000000000000000000000000000000..e9bf65650b571281a2626872a91097125f70a031
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101101.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00110111.c b/rtree-c/test/expected/add/reduction/r00110111.c
new file mode 100644
index 0000000000000000000000000000000000000000..c5d2470b2368351ee499a71839e07b8d4a9d40fc
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00110111.c
@@ -0,0 +1,17 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0011.c b/rtree-c/test/expected/add/reduction/r00111.c
similarity index 83%
rename from rtree-c/test/expected/add/reduction/r0011.c
rename to rtree-c/test/expected/add/reduction/r00111.c
index 9a0d18ce01f67d767a6c7d1474c0efb96d879ce8..b2ee65e566e8eac3f818dce912c4ded46bd75c70 100644
--- a/rtree-c/test/expected/add/reduction/r0011.c
+++ b/rtree-c/test/expected/add/reduction/r00111.c
@@ -1,5 +1,6 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 remove statement at ("test/cases/small/add.c": line 6)
 
diff --git a/rtree-c/test/expected/add/reduction/r010000.c b/rtree-c/test/expected/add/reduction/r0100000.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r010000.c
rename to rtree-c/test/expected/add/reduction/r0100000.c
index 6cdccce1259fa1b30368d63aba343990eb984fa4..dcae9c1e5f91e8cd121cd6bfd14f9d22f01a6685 100644
--- a/rtree-c/test/expected/add/reduction/r010000.c
+++ b/rtree-c/test/expected/add/reduction/r0100000.c
@@ -1,8 +1,9 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0101.c b/rtree-c/test/expected/add/reduction/r0100001.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r0101.c
rename to rtree-c/test/expected/add/reduction/r0100001.c
index 233ed9ec50504177ebeb3663adffdbe0dbdcd178..3a808151f64a28500dc697692aadb0060ceea35e 100644
--- a/rtree-c/test/expected/add/reduction/r0101.c
+++ b/rtree-c/test/expected/add/reduction/r0100001.c
@@ -1,6 +1,9 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r010001.c b/rtree-c/test/expected/add/reduction/r0100010.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r010001.c
rename to rtree-c/test/expected/add/reduction/r0100010.c
index 5ca9ccee130d9afa6b62648617409e1799732395..3cfe4f012e8cf753e5aaa678306dd801ed1002fc 100644
--- a/rtree-c/test/expected/add/reduction/r010001.c
+++ b/rtree-c/test/expected/add/reduction/r0100010.c
@@ -1,9 +1,10 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0100011.c b/rtree-c/test/expected/add/reduction/r0100011.c
new file mode 100644
index 0000000000000000000000000000000000000000..12e3508e8158e1bb3725bc410b8c51df1b4073bc
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0100011.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r010010.c b/rtree-c/test/expected/add/reduction/r0100100.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r010010.c
rename to rtree-c/test/expected/add/reduction/r0100100.c
index 742989bbfc93ed017a33fc745cf59ea5a5b9ac83..88bb63955376ac94f8a169af4d49a7b9ed0db976 100644
--- a/rtree-c/test/expected/add/reduction/r010010.c
+++ b/rtree-c/test/expected/add/reduction/r0100100.c
@@ -1,8 +1,9 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0100101.c b/rtree-c/test/expected/add/reduction/r0100101.c
new file mode 100644
index 0000000000000000000000000000000000000000..cd40cf32e307ad6f20cd970b5f3faa0d14ff53ac
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0100101.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r010011.c b/rtree-c/test/expected/add/reduction/r0100110.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r010011.c
rename to rtree-c/test/expected/add/reduction/r0100110.c
index 1a4de1c703be147e4d073fce275e740625f99466..b0f06b5b8bbc3a5019be839edd0406b8793e90f3 100644
--- a/rtree-c/test/expected/add/reduction/r010011.c
+++ b/rtree-c/test/expected/add/reduction/r0100110.c
@@ -1,9 +1,10 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0100111.c b/rtree-c/test/expected/add/reduction/r0100111.c
new file mode 100644
index 0000000000000000000000000000000000000000..91a2a7948904ee7c30e2e9448e5eb52927939d84
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0100111.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101000.c b/rtree-c/test/expected/add/reduction/r0101000.c
new file mode 100644
index 0000000000000000000000000000000000000000..70aaeeac56faef7eb1a56aa389aa5259b07936a6
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101000.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101001.c b/rtree-c/test/expected/add/reduction/r0101001.c
new file mode 100644
index 0000000000000000000000000000000000000000..be5b891edacdcb14e5a4c309b7caa4d58649a7e0
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101001.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101010.c b/rtree-c/test/expected/add/reduction/r0101010.c
new file mode 100644
index 0000000000000000000000000000000000000000..723719c250267cbb4f00d6715ec9dc817bf0d7de
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101010.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101011.c b/rtree-c/test/expected/add/reduction/r0101011.c
new file mode 100644
index 0000000000000000000000000000000000000000..b6e75ac399e65b1deb311bb2952c80a824fa8e90
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101011.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101100.c b/rtree-c/test/expected/add/reduction/r0101100.c
new file mode 100644
index 0000000000000000000000000000000000000000..c778d3e4d15726cf312af0808becc13be4ee439f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101100.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101101.c b/rtree-c/test/expected/add/reduction/r0101101.c
new file mode 100644
index 0000000000000000000000000000000000000000..f4645d8f1c2989a381b85b5a584ce05a1dd3f9ca
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101101.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r010111.c b/rtree-c/test/expected/add/reduction/r010111.c
new file mode 100644
index 0000000000000000000000000000000000000000..5e71ecd05a895c131c3250e3dca39592b10f6372
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010111.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10000.c b/rtree-c/test/expected/add/reduction/r10000.c
new file mode 100644
index 0000000000000000000000000000000000000000..2af231d4755b86e570b488f9667b74712b4b11f8
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10000.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r10001.c b/rtree-c/test/expected/add/reduction/r10001.c
new file mode 100644
index 0000000000000000000000000000000000000000..531bd72a433bfdf4ae4b581f3fa08cc31b93922f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10001.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10010.c b/rtree-c/test/expected/add/reduction/r10010.c
new file mode 100644
index 0000000000000000000000000000000000000000..90ead1f899e541c169f44a4882dbfaf1b7ca0739
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10010.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10011.c b/rtree-c/test/expected/add/reduction/r10011.c
new file mode 100644
index 0000000000000000000000000000000000000000..bd68a23667f01508a29ef8a47b04428dc201b885
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10011.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10100.c b/rtree-c/test/expected/add/reduction/r10100.c
new file mode 100644
index 0000000000000000000000000000000000000000..b602e374efc02916c79d20f45875965cde46f628
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10100.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10101.c b/rtree-c/test/expected/add/reduction/r10101.c
new file mode 100644
index 0000000000000000000000000000000000000000..62dac8e10f923a18e5824f41def605ac995e0666
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10101.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10.c b/rtree-c/test/expected/add/reduction/r1011.c
similarity index 56%
rename from rtree-c/test/expected/add/reduction/r10.c
rename to rtree-c/test/expected/add/reduction/r1011.c
index 0fd3bacbbf6aec7dcff23104481e60b71f21542f..ea811235583e17f028794596954a7014d41df7bb 100644
--- a/rtree-c/test/expected/add/reduction/r10.c
+++ b/rtree-c/test/expected/add/reduction/r1011.c
@@ -1,5 +1,7 @@
 // 1 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r000000.c b/rtree-c/test/expected/constant/reduction/r000000.c
index 8caa6b7cf049752f3242c01b1e38a6f12099c2e9..54eb77cf44ff6c628c6a05fec8c0e9c0c63efb39 100644
--- a/rtree-c/test/expected/constant/reduction/r000000.c
+++ b/rtree-c/test/expected/constant/reduction/r000000.c
@@ -1,9 +1,9 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
 // 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r000001.c b/rtree-c/test/expected/constant/reduction/r000001.c
index c237e988bb0a4edc102c57d9630fd539611692da..ad5678c146b9af873bd8b4d0be1bf69bd60aeb3d 100644
--- a/rtree-c/test/expected/constant/reduction/r000001.c
+++ b/rtree-c/test/expected/constant/reduction/r000001.c
@@ -1,13 +1,13 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
-// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
 {
     int y = 25;
-    return y;
+    return 0;
 }
diff --git a/rtree-c/test/expected/constant/reduction/r000010.c b/rtree-c/test/expected/constant/reduction/r000010.c
new file mode 100644
index 0000000000000000000000000000000000000000..f41c07d1167ef18ba0b13c63b6ffa30e3f50f025
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r000010.c
@@ -0,0 +1,13 @@
+// 0 inline variable x at ("test/cases/small/constant.c": line 1)
+// 0 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int x = 10;
+int main()
+{
+    int y = 25;
+    return y;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r000011.c b/rtree-c/test/expected/constant/reduction/r000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..7760819539c2f0c4e8becbb76c3aeb643d8b1b72
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r000011.c
@@ -0,0 +1,13 @@
+// 0 inline variable x at ("test/cases/small/constant.c": line 1)
+// 0 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int x = 10;
+int main()
+{
+    int y = 25;
+    return 0;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r00001.c b/rtree-c/test/expected/constant/reduction/r00010.c
similarity index 100%
rename from rtree-c/test/expected/constant/reduction/r00001.c
rename to rtree-c/test/expected/constant/reduction/r00010.c
index 093aea27bad9156d4ab93a162d85069920ce5d91..a1ecd2e4acc7e5803547417938115cbf37ab0b3c 100644
--- a/rtree-c/test/expected/constant/reduction/r00001.c
+++ b/rtree-c/test/expected/constant/reduction/r00010.c
@@ -1,8 +1,8 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 1 reduce to left at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r0001.c b/rtree-c/test/expected/constant/reduction/r00011.c
similarity index 83%
rename from rtree-c/test/expected/constant/reduction/r0001.c
rename to rtree-c/test/expected/constant/reduction/r00011.c
index 2ab76f49a1daac3e38d287b9228aadc230d0f030..ab2950794ec5a1b56f6ffd41ddeff57bd81fa899 100644
--- a/rtree-c/test/expected/constant/reduction/r0001.c
+++ b/rtree-c/test/expected/constant/reduction/r00011.c
@@ -1,6 +1,7 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 1 reduce to left at ("test/cases/small/constant.c": line 5)
 // 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
diff --git a/rtree-c/test/expected/constant/reduction/r010000.c b/rtree-c/test/expected/constant/reduction/r010000.c
index 9db7e674b496c133a1b1b5f53529ba869bc41f69..2a09cdb46db9d291b6282102fe68e55c53e3d92d 100644
--- a/rtree-c/test/expected/constant/reduction/r010000.c
+++ b/rtree-c/test/expected/constant/reduction/r010000.c
@@ -1,9 +1,9 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
 // 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r010001.c b/rtree-c/test/expected/constant/reduction/r010001.c
index 8e5081108b99707c1e4e4f8bd4ac16ad86d8b48a..eb089fb3d554e4fa715adfdbfcdbbdf2c7d737ef 100644
--- a/rtree-c/test/expected/constant/reduction/r010001.c
+++ b/rtree-c/test/expected/constant/reduction/r010001.c
@@ -1,12 +1,12 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
-// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
 {
-    return 25;
+    return 0;
 }
diff --git a/rtree-c/test/expected/constant/reduction/r010010.c b/rtree-c/test/expected/constant/reduction/r010010.c
new file mode 100644
index 0000000000000000000000000000000000000000..76eb1e18536f621a365e1838cf64418bac5b668a
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r010010.c
@@ -0,0 +1,12 @@
+// 0 inline variable x at ("test/cases/small/constant.c": line 1)
+// 1 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int x = 10;
+int main()
+{
+    return 25;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r010011.c b/rtree-c/test/expected/constant/reduction/r010011.c
new file mode 100644
index 0000000000000000000000000000000000000000..b57eacb932b3d8ff22f9ab8f0441d33d4d9aea64
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r010011.c
@@ -0,0 +1,12 @@
+// 0 inline variable x at ("test/cases/small/constant.c": line 1)
+// 1 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int x = 10;
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r01001.c b/rtree-c/test/expected/constant/reduction/r01010.c
similarity index 100%
rename from rtree-c/test/expected/constant/reduction/r01001.c
rename to rtree-c/test/expected/constant/reduction/r01010.c
index 2a5899bf3fe9fa507effe14186b483bbfbae81c4..a401b0a81d4d2a1d22329298d6b790b6fbd2577b 100644
--- a/rtree-c/test/expected/constant/reduction/r01001.c
+++ b/rtree-c/test/expected/constant/reduction/r01010.c
@@ -1,8 +1,8 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 1 reduce to left at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r0101.c b/rtree-c/test/expected/constant/reduction/r01011.c
similarity index 82%
rename from rtree-c/test/expected/constant/reduction/r0101.c
rename to rtree-c/test/expected/constant/reduction/r01011.c
index 611d6f16736d1fe2409c4029d9a8e162dd08976a..0f247997ca53ec065b0ffb1d8eb818d73d123275 100644
--- a/rtree-c/test/expected/constant/reduction/r0101.c
+++ b/rtree-c/test/expected/constant/reduction/r01011.c
@@ -1,6 +1,7 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 1 reduce to left at ("test/cases/small/constant.c": line 5)
 // 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
diff --git a/rtree-c/test/expected/constant/reduction/r100000.c b/rtree-c/test/expected/constant/reduction/r100000.c
index 55eec853409a92e723527b12f037ccdfbedd463d..4528b6d16a181eecff29389ff9b6c503bd747e7b 100644
--- a/rtree-c/test/expected/constant/reduction/r100000.c
+++ b/rtree-c/test/expected/constant/reduction/r100000.c
@@ -1,9 +1,9 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
 // 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r100001.c b/rtree-c/test/expected/constant/reduction/r100001.c
index 5b53020d054244e51db99a2f99114b4805f3a69b..dcd590f7f7377de3ecdecc641be7047c179857a1 100644
--- a/rtree-c/test/expected/constant/reduction/r100001.c
+++ b/rtree-c/test/expected/constant/reduction/r100001.c
@@ -1,12 +1,12 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
-// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
     int y = 25;
-    return y;
+    return 0;
 }
diff --git a/rtree-c/test/expected/constant/reduction/r100010.c b/rtree-c/test/expected/constant/reduction/r100010.c
new file mode 100644
index 0000000000000000000000000000000000000000..4196c5db05a4cacd48c7317c567c9b09a3a55dd7
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r100010.c
@@ -0,0 +1,12 @@
+// 1 inline variable x at ("test/cases/small/constant.c": line 1)
+// 0 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int main()
+{
+    int y = 25;
+    return y;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r100011.c b/rtree-c/test/expected/constant/reduction/r100011.c
new file mode 100644
index 0000000000000000000000000000000000000000..047666478d6ac291d2939ffaed68f0ce8615641e
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r100011.c
@@ -0,0 +1,12 @@
+// 1 inline variable x at ("test/cases/small/constant.c": line 1)
+// 0 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int main()
+{
+    int y = 25;
+    return 0;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r10001.c b/rtree-c/test/expected/constant/reduction/r10010.c
similarity index 100%
rename from rtree-c/test/expected/constant/reduction/r10001.c
rename to rtree-c/test/expected/constant/reduction/r10010.c
index 24353b7582df64e9e4219074691e6d89921a8144..8a9c230c4fd2e47be3f62b0306837942d763f815 100644
--- a/rtree-c/test/expected/constant/reduction/r10001.c
+++ b/rtree-c/test/expected/constant/reduction/r10010.c
@@ -1,8 +1,8 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 1 reduce to left at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r1001.c b/rtree-c/test/expected/constant/reduction/r10011.c
similarity index 82%
rename from rtree-c/test/expected/constant/reduction/r1001.c
rename to rtree-c/test/expected/constant/reduction/r10011.c
index 36ad940858491ff98d4de41812e709e4c4ec2644..2bc815290430753d347f0d74efc6c7471ff8fb8f 100644
--- a/rtree-c/test/expected/constant/reduction/r1001.c
+++ b/rtree-c/test/expected/constant/reduction/r10011.c
@@ -1,6 +1,7 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 1 reduce to left at ("test/cases/small/constant.c": line 5)
 // 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r110000.c b/rtree-c/test/expected/constant/reduction/r110000.c
index 8b8d96162d6ec3dcc3cb6d5874e046eb21d945ae..22ffbc943fddcb9b841ba9e742fc9ee6f08d4256 100644
--- a/rtree-c/test/expected/constant/reduction/r110000.c
+++ b/rtree-c/test/expected/constant/reduction/r110000.c
@@ -1,9 +1,9 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
 // 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r110001.c b/rtree-c/test/expected/constant/reduction/r110001.c
index 35465590628659fcf12d94f7f0488e683d29db2f..db1afaa0dd1851e94081d39de31440f8b9352088 100644
--- a/rtree-c/test/expected/constant/reduction/r110001.c
+++ b/rtree-c/test/expected/constant/reduction/r110001.c
@@ -1,11 +1,11 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
-// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
-    return 25;
+    return 0;
 }
diff --git a/rtree-c/test/expected/constant/reduction/r110010.c b/rtree-c/test/expected/constant/reduction/r110010.c
new file mode 100644
index 0000000000000000000000000000000000000000..bdd8e7ef5508dc4d3008e04e6388336633ebef03
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r110010.c
@@ -0,0 +1,11 @@
+// 1 inline variable x at ("test/cases/small/constant.c": line 1)
+// 1 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int main()
+{
+    return 25;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r110011.c b/rtree-c/test/expected/constant/reduction/r110011.c
new file mode 100644
index 0000000000000000000000000000000000000000..38741e880685eef3cbe84058d66dcc387c0d26db
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r110011.c
@@ -0,0 +1,11 @@
+// 1 inline variable x at ("test/cases/small/constant.c": line 1)
+// 1 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r11001.c b/rtree-c/test/expected/constant/reduction/r11010.c
similarity index 100%
rename from rtree-c/test/expected/constant/reduction/r11001.c
rename to rtree-c/test/expected/constant/reduction/r11010.c
index 7d0aad454d5fc9f13952e9cd7fd2d62b02b4c249..034b2adc259f0af91fce362aa209202090fa0a5e 100644
--- a/rtree-c/test/expected/constant/reduction/r11001.c
+++ b/rtree-c/test/expected/constant/reduction/r11010.c
@@ -1,8 +1,8 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 1 reduce to left at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r1101.c b/rtree-c/test/expected/constant/reduction/r11011.c
similarity index 82%
rename from rtree-c/test/expected/constant/reduction/r1101.c
rename to rtree-c/test/expected/constant/reduction/r11011.c
index 43237b25827a96b987621106222a2e55d3e35684..9643213b6095c19872b90f8cc577aad2c7044586 100644
--- a/rtree-c/test/expected/constant/reduction/r1101.c
+++ b/rtree-c/test/expected/constant/reduction/r11011.c
@@ -1,6 +1,7 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 1 reduce to left at ("test/cases/small/constant.c": line 5)
 // 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
diff --git a/rtree-c/test/expected/declaration/reduction/r000.c b/rtree-c/test/expected/declaration/reduction/r0000.c
similarity index 62%
rename from rtree-c/test/expected/declaration/reduction/r000.c
rename to rtree-c/test/expected/declaration/reduction/r0000.c
index 5f46ee7a1bba0bac7eda86aa14a682748fbd27a8..1cf3df7f40056d4d787ef8e13133a9ff3ff653fc 100644
--- a/rtree-c/test/expected/declaration/reduction/r000.c
+++ b/rtree-c/test/expected/declaration/reduction/r0000.c
@@ -1,6 +1,7 @@
 // 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
 // 0 remove statement at ("test/cases/small/declaration.c": line 4)
-// 0 replace by zero at ("test/cases/small/declaration.c": line 4)
+// 0 do without function at ("test/cases/small/declaration.c": line 4)
+// 0 do without pram at ("test/cases/small/declaration.c": line 4)
 
 int printf(const char *, ...);
 int main()
diff --git a/rtree-c/test/expected/declaration/reduction/r001.c b/rtree-c/test/expected/declaration/reduction/r0001.c
similarity index 60%
rename from rtree-c/test/expected/declaration/reduction/r001.c
rename to rtree-c/test/expected/declaration/reduction/r0001.c
index bca00a78eb395a14248dae5865d1a0ae7c616f76..3e5d4d2daf2f9142f1e0cd7f65f7f12516dfdda7 100644
--- a/rtree-c/test/expected/declaration/reduction/r001.c
+++ b/rtree-c/test/expected/declaration/reduction/r0001.c
@@ -1,6 +1,7 @@
 // 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
 // 0 remove statement at ("test/cases/small/declaration.c": line 4)
-// 1 replace by zero at ("test/cases/small/declaration.c": line 4)
+// 0 do without function at ("test/cases/small/declaration.c": line 4)
+// 1 do without pram at ("test/cases/small/declaration.c": line 4)
 
 int printf(const char *, ...);
 int main()
diff --git a/rtree-c/test/expected/declaration/reduction/r0010.c b/rtree-c/test/expected/declaration/reduction/r0010.c
new file mode 100644
index 0000000000000000000000000000000000000000..184f2550a3290d8db4a1f8bac97dbaf28cb864f7
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r0010.c
@@ -0,0 +1,10 @@
+// 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 0 remove statement at ("test/cases/small/declaration.c": line 4)
+// 1 do without function at ("test/cases/small/declaration.c": line 4)
+// 0 do without pram at ("test/cases/small/declaration.c": line 4)
+
+int printf(const char *, ...);
+int main()
+{
+    "Hello, World!";
+}
diff --git a/rtree-c/test/expected/declaration/reduction/r0011.c b/rtree-c/test/expected/declaration/reduction/r0011.c
new file mode 100644
index 0000000000000000000000000000000000000000..2e86fa7d6548d29c4a645c5913fc725ee83c9f4b
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r0011.c
@@ -0,0 +1,10 @@
+// 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 0 remove statement at ("test/cases/small/declaration.c": line 4)
+// 1 do without function at ("test/cases/small/declaration.c": line 4)
+// 1 do without pram at ("test/cases/small/declaration.c": line 4)
+
+int printf(const char *, ...);
+int main()
+{
+    0;
+}
diff --git a/rtree-c/test/expected/declaration/reduction/r10.c b/rtree-c/test/expected/declaration/reduction/r10.c
new file mode 100644
index 0000000000000000000000000000000000000000..c836dd40560f7e145c682d156e5d7b1bc9c8192c
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r10.c
@@ -0,0 +1,7 @@
+// 1 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 0 remove statement at ("test/cases/small/declaration.c": line 4)
+
+int main()
+{
+    "Hello, World!";
+}
diff --git a/rtree-c/test/expected/declaration/reduction/r1.c b/rtree-c/test/expected/declaration/reduction/r11.c
similarity index 56%
rename from rtree-c/test/expected/declaration/reduction/r1.c
rename to rtree-c/test/expected/declaration/reduction/r11.c
index 597b7b8d7a21090b7d9f40253cc5b5ef9e0afac9..d3ecbdaf91a5dccf22e74c5d832778c17cf0dc05 100644
--- a/rtree-c/test/expected/declaration/reduction/r1.c
+++ b/rtree-c/test/expected/declaration/reduction/r11.c
@@ -1,4 +1,5 @@
 // 1 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 1 remove statement at ("test/cases/small/declaration.c": line 4)
 
 int main()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r00000.c b/rtree-c/test/expected/definition/reduction/r000000.c
similarity index 84%
rename from rtree-c/test/expected/definition/reduction/r00000.c
rename to rtree-c/test/expected/definition/reduction/r000000.c
index 6970d1522f618bd69b5deec826bed38df0f6f3db..42d44b2bd96e3b2de036f715b42891580b30eacd 100644
--- a/rtree-c/test/expected/definition/reduction/r00000.c
+++ b/rtree-c/test/expected/definition/reduction/r000000.c
@@ -2,6 +2,7 @@
 // 0 remove statement at ("test/cases/small/definition.c": line 2)
 // 0 replace by zero at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
 // 0 replace by zero at ("test/cases/small/definition.c": line 6)
 
 int f()
diff --git a/rtree-c/test/expected/definition/reduction/r000001.c b/rtree-c/test/expected/definition/reduction/r000001.c
new file mode 100644
index 0000000000000000000000000000000000000000..8416189d2b7748270389fcbd4af4b47b850b2cd7
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r000001.c
@@ -0,0 +1,15 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 0 remove statement at ("test/cases/small/definition.c": line 2)
+// 0 replace by zero at ("test/cases/small/definition.c": line 2)
+// 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
+// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+
+int f()
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/definition/reduction/r00001.c b/rtree-c/test/expected/definition/reduction/r00001.c
index 59d0bfee399a7933e6064c447d95ab0580ac9ce5..38b198988be638c2c8796f7f6527618c5dd1b1c3 100644
--- a/rtree-c/test/expected/definition/reduction/r00001.c
+++ b/rtree-c/test/expected/definition/reduction/r00001.c
@@ -2,7 +2,7 @@
 // 0 remove statement at ("test/cases/small/definition.c": line 2)
 // 0 replace by zero at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
-// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+// 1 do without function at ("test/cases/small/definition.c": line 6)
 
 int f()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r00100.c b/rtree-c/test/expected/definition/reduction/r001000.c
similarity index 84%
rename from rtree-c/test/expected/definition/reduction/r00100.c
rename to rtree-c/test/expected/definition/reduction/r001000.c
index 0a6c0ed1dde7370101099e6bf57bd7cb5a3d9374..e9afc0be36ab095e6b30a45883d6e80a765e921a 100644
--- a/rtree-c/test/expected/definition/reduction/r00100.c
+++ b/rtree-c/test/expected/definition/reduction/r001000.c
@@ -2,6 +2,7 @@
 // 0 remove statement at ("test/cases/small/definition.c": line 2)
 // 1 replace by zero at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
 // 0 replace by zero at ("test/cases/small/definition.c": line 6)
 
 int f()
diff --git a/rtree-c/test/expected/definition/reduction/r001001.c b/rtree-c/test/expected/definition/reduction/r001001.c
new file mode 100644
index 0000000000000000000000000000000000000000..9795d1b00afaa598172ad8fd799ebf848237afa2
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r001001.c
@@ -0,0 +1,15 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 0 remove statement at ("test/cases/small/definition.c": line 2)
+// 1 replace by zero at ("test/cases/small/definition.c": line 2)
+// 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
+// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+
+int f()
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/definition/reduction/r00101.c b/rtree-c/test/expected/definition/reduction/r00101.c
index 153f431e1a5354a210227c4cf43d6d2964086106..35ae9116a06071291d4930101772930b926b6e9e 100644
--- a/rtree-c/test/expected/definition/reduction/r00101.c
+++ b/rtree-c/test/expected/definition/reduction/r00101.c
@@ -2,7 +2,7 @@
 // 0 remove statement at ("test/cases/small/definition.c": line 2)
 // 1 replace by zero at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
-// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+// 1 do without function at ("test/cases/small/definition.c": line 6)
 
 int f()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r0100.c b/rtree-c/test/expected/definition/reduction/r01000.c
similarity index 81%
rename from rtree-c/test/expected/definition/reduction/r0100.c
rename to rtree-c/test/expected/definition/reduction/r01000.c
index 5527e63cb89a758ded97e38fd259369b1e4c907a..d8e2054fe1d77a7cacc9d19cf7dad0a575e1e664 100644
--- a/rtree-c/test/expected/definition/reduction/r0100.c
+++ b/rtree-c/test/expected/definition/reduction/r01000.c
@@ -1,6 +1,7 @@
 // 0 remove function f at ("test/cases/small/definition.c": line 1)
 // 1 remove statement at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
 // 0 replace by zero at ("test/cases/small/definition.c": line 6)
 
 int f()
diff --git a/rtree-c/test/expected/definition/reduction/r01001.c b/rtree-c/test/expected/definition/reduction/r01001.c
new file mode 100644
index 0000000000000000000000000000000000000000..b8068af3e6eebcc28f3f40270be7650115f0dfae
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01001.c
@@ -0,0 +1,13 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 1 remove statement at ("test/cases/small/definition.c": line 2)
+// 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
+// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+
+int f()
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/definition/reduction/r0101.c b/rtree-c/test/expected/definition/reduction/r0101.c
index 473ba0fcf08b75fca33f0835b91e1580f32e4ff4..47872974ecd34be7a31c9acf3eb93f33c92df23a 100644
--- a/rtree-c/test/expected/definition/reduction/r0101.c
+++ b/rtree-c/test/expected/definition/reduction/r0101.c
@@ -1,7 +1,7 @@
 // 0 remove function f at ("test/cases/small/definition.c": line 1)
 // 1 remove statement at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
-// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+// 1 do without function at ("test/cases/small/definition.c": line 6)
 
 int f()
 {
diff --git a/rtree-c/test/expected/functions/main.c b/rtree-c/test/expected/functions/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..6c27bbd02d8260eb244e8d03f368f91f36d7f0c3
--- /dev/null
+++ b/rtree-c/test/expected/functions/main.c
@@ -0,0 +1,10 @@
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000000.c b/rtree-c/test/expected/functions/reduction/r000000000.c
new file mode 100644
index 0000000000000000000000000000000000000000..22361ac67385064b5b6991b5344b712127e6db6b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000001.c b/rtree-c/test/expected/functions/reduction/r000000001.c
new file mode 100644
index 0000000000000000000000000000000000000000..e8bed9f4565576d044470ec239467f4ebbef59bb
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000010.c b/rtree-c/test/expected/functions/reduction/r000000010.c
new file mode 100644
index 0000000000000000000000000000000000000000..8777499947c8eea3ebf3cf8b431ecaa2f1862161
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000010.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000011.c b/rtree-c/test/expected/functions/reduction/r000000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..bd8abb8d83285d8077d98aca863a919178a52b6e
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000011.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000100.c b/rtree-c/test/expected/functions/reduction/r000000100.c
new file mode 100644
index 0000000000000000000000000000000000000000..0b62277fb99504be3d60e1fdb920890252daf0dd
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000101.c b/rtree-c/test/expected/functions/reduction/r000000101.c
new file mode 100644
index 0000000000000000000000000000000000000000..839cae952e3f1a4ca58613d38c88461a1e72c360
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000110.c b/rtree-c/test/expected/functions/reduction/r000000110.c
new file mode 100644
index 0000000000000000000000000000000000000000..946e44bdbc40bd15ab9f43b798cbdacd7f46b0c0
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000110.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000111.c b/rtree-c/test/expected/functions/reduction/r000000111.c
new file mode 100644
index 0000000000000000000000000000000000000000..87badda79a9eac8bfbc4fda222ce80116646e88a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000111.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000010.c b/rtree-c/test/expected/functions/reduction/r0000010.c
new file mode 100644
index 0000000000000000000000000000000000000000..fef82a23a1161d1f82030d34dae531da6908065c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000010.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000011.c b/rtree-c/test/expected/functions/reduction/r0000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..97c1f820a855ada000b4d41f77fab862324fcb8e
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000011.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010000.c b/rtree-c/test/expected/functions/reduction/r000010000.c
new file mode 100644
index 0000000000000000000000000000000000000000..8df0263ede44ba95ab31e1031f6c3f724e1bf5b0
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010001.c b/rtree-c/test/expected/functions/reduction/r000010001.c
new file mode 100644
index 0000000000000000000000000000000000000000..f83642cb172ba045e8bf4d76981e8f5579a5f02f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010010.c b/rtree-c/test/expected/functions/reduction/r000010010.c
new file mode 100644
index 0000000000000000000000000000000000000000..efb0502a69137bbf1d30f1d1c3d87d5157757059
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010010.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010011.c b/rtree-c/test/expected/functions/reduction/r000010011.c
new file mode 100644
index 0000000000000000000000000000000000000000..ab439fa337faaa2d474cc07acd939eb97cddf1cf
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010011.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010100.c b/rtree-c/test/expected/functions/reduction/r000010100.c
new file mode 100644
index 0000000000000000000000000000000000000000..c47fce7f5758690420eab4ee0d248efa32648e0a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010101.c b/rtree-c/test/expected/functions/reduction/r000010101.c
new file mode 100644
index 0000000000000000000000000000000000000000..4fa1e07f26ad2e39f886d9116b67f74c1269f6de
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00001011.c b/rtree-c/test/expected/functions/reduction/r00001011.c
new file mode 100644
index 0000000000000000000000000000000000000000..a86552b0eb7627163be6aabe12083db784ce110b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00001011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000011.c b/rtree-c/test/expected/functions/reduction/r000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..eef7a252ae707abacc89cc501dc9bc549f38b86b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011.c
@@ -0,0 +1,17 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0001.c b/rtree-c/test/expected/functions/reduction/r0001.c
new file mode 100644
index 0000000000000000000000000000000000000000..872dd58c3146f2c1e5a6846adc69e8eead3f7fb7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0001.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000000.c b/rtree-c/test/expected/functions/reduction/r001000000.c
new file mode 100644
index 0000000000000000000000000000000000000000..e234a1cb422ae5373a88b7a04b1bf8f4dacd26fe
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000001.c b/rtree-c/test/expected/functions/reduction/r001000001.c
new file mode 100644
index 0000000000000000000000000000000000000000..25bfbd6deececa4ed1f6e03f50a48ab8e7acc978
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000010.c b/rtree-c/test/expected/functions/reduction/r001000010.c
new file mode 100644
index 0000000000000000000000000000000000000000..1781459d75a1e8747040ff8a88c1e23962acbf5b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000010.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000011.c b/rtree-c/test/expected/functions/reduction/r001000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..85f74589cb3357dbb1a9d2140e67716d377bf266
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000011.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000100.c b/rtree-c/test/expected/functions/reduction/r001000100.c
new file mode 100644
index 0000000000000000000000000000000000000000..87b10da7c80297d8168b0be4a49918e300452de4
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000101.c b/rtree-c/test/expected/functions/reduction/r001000101.c
new file mode 100644
index 0000000000000000000000000000000000000000..51cf2fae5de7f14fec7a5b79b2cbf908f60007ce
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000110.c b/rtree-c/test/expected/functions/reduction/r001000110.c
new file mode 100644
index 0000000000000000000000000000000000000000..857ff4870fd820d017dcd26014138696a6417522
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000110.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000111.c b/rtree-c/test/expected/functions/reduction/r001000111.c
new file mode 100644
index 0000000000000000000000000000000000000000..930630c1888d6dd444bed85174fd386ffb36db2b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000111.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0010010.c b/rtree-c/test/expected/functions/reduction/r0010010.c
new file mode 100644
index 0000000000000000000000000000000000000000..062718694952659503cb0be7b17c1f8c20083380
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0010010.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0010011.c b/rtree-c/test/expected/functions/reduction/r0010011.c
new file mode 100644
index 0000000000000000000000000000000000000000..b87f01eacdc4ce0c38f71c8971833dc6ef2503d5
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0010011.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010000.c b/rtree-c/test/expected/functions/reduction/r001010000.c
new file mode 100644
index 0000000000000000000000000000000000000000..1cf9c7c913ea50ea018eca67e58fb29d8275983c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010001.c b/rtree-c/test/expected/functions/reduction/r001010001.c
new file mode 100644
index 0000000000000000000000000000000000000000..24bf2638a48426e29605de379a54d0b9a2b3cdfc
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010010.c b/rtree-c/test/expected/functions/reduction/r001010010.c
new file mode 100644
index 0000000000000000000000000000000000000000..45e46993c13c879cbd8cbba722fc566df388a504
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010010.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010011.c b/rtree-c/test/expected/functions/reduction/r001010011.c
new file mode 100644
index 0000000000000000000000000000000000000000..06fe706e07d20e733ca29a59e32dffcf56e873ea
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010011.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010100.c b/rtree-c/test/expected/functions/reduction/r001010100.c
new file mode 100644
index 0000000000000000000000000000000000000000..1c3a30090825cac98500a8795ca2733ffc6b2407
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010101.c b/rtree-c/test/expected/functions/reduction/r001010101.c
new file mode 100644
index 0000000000000000000000000000000000000000..904d845907d7ecaadfb11de947041962d1b198aa
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00101011.c b/rtree-c/test/expected/functions/reduction/r00101011.c
new file mode 100644
index 0000000000000000000000000000000000000000..c151f8024117653eea73f5daa60d7a95f8fe26a9
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00101011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001011.c b/rtree-c/test/expected/functions/reduction/r001011.c
new file mode 100644
index 0000000000000000000000000000000000000000..1c3989bc5442983349ad70a4028e815a8fc8341a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001011.c
@@ -0,0 +1,17 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0011.c b/rtree-c/test/expected/functions/reduction/r0011.c
new file mode 100644
index 0000000000000000000000000000000000000000..13e0025b955bbc0411fbbdcafcc35b91a2c24133
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010000.c b/rtree-c/test/expected/functions/reduction/r010000.c
new file mode 100644
index 0000000000000000000000000000000000000000..5ea9bc45bb00bd9f73979bbff19ba943f50da9d3
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010000.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return f(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010001.c b/rtree-c/test/expected/functions/reduction/r010001.c
new file mode 100644
index 0000000000000000000000000000000000000000..f85193e6f5c628401da7accdf63d2029626c44fd
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010001.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010010.c b/rtree-c/test/expected/functions/reduction/r010010.c
new file mode 100644
index 0000000000000000000000000000000000000000..fb40908dc2eef825036c1234fbf8a87eae9326b9
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010010.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010011.c b/rtree-c/test/expected/functions/reduction/r010011.c
new file mode 100644
index 0000000000000000000000000000000000000000..e03e6302b4f3ceb0218c68b3fda9c050e31e1360
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010011.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010100.c b/rtree-c/test/expected/functions/reduction/r010100.c
new file mode 100644
index 0000000000000000000000000000000000000000..022a557c1d2ff5085bfaeea8da5f363bdf304eea
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010100.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010101.c b/rtree-c/test/expected/functions/reduction/r010101.c
new file mode 100644
index 0000000000000000000000000000000000000000..8ef81a4b9616a395d625450eb007c546cdb3c51f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010101.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01011.c b/rtree-c/test/expected/functions/reduction/r01011.c
new file mode 100644
index 0000000000000000000000000000000000000000..9b8bb5e5be1a11d6ac79214c65202d7ad5385fbc
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011.c
@@ -0,0 +1,13 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r011.c b/rtree-c/test/expected/functions/reduction/r011.c
new file mode 100644
index 0000000000000000000000000000000000000000..39c73e754579909b844e0934a73216c944af3752
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011.c
@@ -0,0 +1,10 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000000.c b/rtree-c/test/expected/functions/reduction/r1000000.c
new file mode 100644
index 0000000000000000000000000000000000000000..a9f70dca6426e26d7cc930314cfc69071bf904e5
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000000.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000001.c b/rtree-c/test/expected/functions/reduction/r1000001.c
new file mode 100644
index 0000000000000000000000000000000000000000..cabb1bb7ac3cb80837954e3562eb5dda16f77c74
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000001.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000010.c b/rtree-c/test/expected/functions/reduction/r1000010.c
new file mode 100644
index 0000000000000000000000000000000000000000..d629f15880f0721cc1fdeae9bfeff7b353b5453f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000010.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000011.c b/rtree-c/test/expected/functions/reduction/r1000011.c
new file mode 100644
index 0000000000000000000000000000000000000000..210a171397022639f9f4c43d882b0a343a2ebcc5
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000011.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000100.c b/rtree-c/test/expected/functions/reduction/r1000100.c
new file mode 100644
index 0000000000000000000000000000000000000000..21d1c0c68f32454859b62a55f1015501b85dc1ec
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000100.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000101.c b/rtree-c/test/expected/functions/reduction/r1000101.c
new file mode 100644
index 0000000000000000000000000000000000000000..652b3c91bb47d598223505e747b00c67859b7f00
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000101.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r100011.c b/rtree-c/test/expected/functions/reduction/r100011.c
new file mode 100644
index 0000000000000000000000000000000000000000..25cdf8bf770fdd068fe1dfd0fcc4088645556643
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100011.c
@@ -0,0 +1,14 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1001.c b/rtree-c/test/expected/functions/reduction/r1001.c
new file mode 100644
index 0000000000000000000000000000000000000000..6f2ae79e3852a43a4f82ca2d82a8649184732320
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1001.c
@@ -0,0 +1,11 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010000.c b/rtree-c/test/expected/functions/reduction/r1010000.c
new file mode 100644
index 0000000000000000000000000000000000000000..18ca7c03b2fbb829d7fdbd9f25d37ad7a47492a9
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010000.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010001.c b/rtree-c/test/expected/functions/reduction/r1010001.c
new file mode 100644
index 0000000000000000000000000000000000000000..4e875f7c2c4d93b965c8913d8a1edd0262cf1769
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010001.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010010.c b/rtree-c/test/expected/functions/reduction/r1010010.c
new file mode 100644
index 0000000000000000000000000000000000000000..efc759aab523a11315695cc93faf1361cd9244be
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010010.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010011.c b/rtree-c/test/expected/functions/reduction/r1010011.c
new file mode 100644
index 0000000000000000000000000000000000000000..82fe6f2a7ef9a8f8118f2abf41b414f6ee14bb6d
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010011.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010100.c b/rtree-c/test/expected/functions/reduction/r1010100.c
new file mode 100644
index 0000000000000000000000000000000000000000..320c06f92dcd8d537de12bec507870c2832b0861
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010100.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010101.c b/rtree-c/test/expected/functions/reduction/r1010101.c
new file mode 100644
index 0000000000000000000000000000000000000000..6e5f74c92202eea1bc6c50902dfd7f0c2cd3c314
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010101.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r101011.c b/rtree-c/test/expected/functions/reduction/r101011.c
new file mode 100644
index 0000000000000000000000000000000000000000..b5c4c0f738470fe195ee5d6fa3feb6a3fb3b2a38
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101011.c
@@ -0,0 +1,14 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1011.c b/rtree-c/test/expected/functions/reduction/r1011.c
new file mode 100644
index 0000000000000000000000000000000000000000..5b4125cf57b3a27c3f101d8badd53e04e2038c37
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1011.c
@@ -0,0 +1,11 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1100.c b/rtree-c/test/expected/functions/reduction/r1100.c
new file mode 100644
index 0000000000000000000000000000000000000000..7ec41ba7d62d300562a2fe4d5e26d9da5fe5b154
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1100.c
@@ -0,0 +1,9 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1101.c b/rtree-c/test/expected/functions/reduction/r1101.c
new file mode 100644
index 0000000000000000000000000000000000000000..0d8137fb548d09056c653441aaca3f3d6bc97fdf
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1101.c
@@ -0,0 +1,9 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r111.c b/rtree-c/test/expected/functions/reduction/r111.c
new file mode 100644
index 0000000000000000000000000000000000000000..168e38fcaa7c184d1b687e3856d60b89ea95f3e2
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r111.c
@@ -0,0 +1,7 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000000.c b/rtree-c/test/expected/while-loops/reduction/r0000000.c
index 6d5db5e00f13ab0e983b98678754f9fc8c0c4177..c42c9434c6813daeb4422672e0b7d3a28bbed39c 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0000000.c
+++ b/rtree-c/test/expected/while-loops/reduction/r0000000.c
@@ -1,8 +1,8 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000001.c b/rtree-c/test/expected/while-loops/reduction/r0000001.c
index 71df2ce5bcc68143350aba5b97342e18360c1fdc..0b2c89133787bc3ac522098f3f97cda5862e847f 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0000001.c
+++ b/rtree-c/test/expected/while-loops/reduction/r0000001.c
@@ -1,8 +1,8 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
diff --git a/rtree-c/test/expected/while-loops/reduction/r000001.c b/rtree-c/test/expected/while-loops/reduction/r000001.c
index 6633e53f2fbbd73b24576bb61fa47c738e8203db..5fea61d8e1ca308cdb162ab71234b31378c07750 100644
--- a/rtree-c/test/expected/while-loops/reduction/r000001.c
+++ b/rtree-c/test/expected/while-loops/reduction/r000001.c
@@ -1,8 +1,8 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
 int main()
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000100.c b/rtree-c/test/expected/while-loops/reduction/r0000100.c
index 139e84f6072393870983660b285b821e7e38b869..153a96cc5b6869af29fbc23d8c5c0906d522b1ca 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0000100.c
+++ b/rtree-c/test/expected/while-loops/reduction/r0000100.c
@@ -1,15 +1,15 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (10)
+    while (0)
     {
         i++;
     }
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000101.c b/rtree-c/test/expected/while-loops/reduction/r0000101.c
index 8786ab879d30a1324c3f8a937e205804b13e003e..e07255ec944e1f863d7a7f8ef6369e2ee0224e8c 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0000101.c
+++ b/rtree-c/test/expected/while-loops/reduction/r0000101.c
@@ -1,15 +1,15 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (10)
+    while (0)
     {
         i;
     }
diff --git a/rtree-c/test/expected/while-loops/reduction/r000011.c b/rtree-c/test/expected/while-loops/reduction/r000011.c
index f7d557954426df8ea12beda6bec5abb639d2de2d..e5b79bd5204bf9959cdd888d8d5932d6032be6c2 100644
--- a/rtree-c/test/expected/while-loops/reduction/r000011.c
+++ b/rtree-c/test/expected/while-loops/reduction/r000011.c
@@ -1,14 +1,14 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (10)
+    while (0)
     {
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001000.c b/rtree-c/test/expected/while-loops/reduction/r0001000.c
new file mode 100644
index 0000000000000000000000000000000000000000..06de89ae9acc45c1e3c23494b1b387c046ee070b
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001000.c
@@ -0,0 +1,16 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (10)
+    {
+        i++;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001001.c b/rtree-c/test/expected/while-loops/reduction/r0001001.c
new file mode 100644
index 0000000000000000000000000000000000000000..760d9d69d3a98eab91bbc17427ddb6a0c8b302a5
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001001.c
@@ -0,0 +1,16 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (10)
+    {
+        i;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r000101.c b/rtree-c/test/expected/while-loops/reduction/r000101.c
index b0772387c7bf835289cb13ca074c4ae2b23d3927..b6b281b00df78071fa7ae0cccfff17884d8406ce 100644
--- a/rtree-c/test/expected/while-loops/reduction/r000101.c
+++ b/rtree-c/test/expected/while-loops/reduction/r000101.c
@@ -1,15 +1,14 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
 // 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
-// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+// 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (i)
+    while (10)
     {
-        i;
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001100.c b/rtree-c/test/expected/while-loops/reduction/r0001100.c
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb151d588423c88e712e172e46177923353e03
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001100.c
@@ -0,0 +1,16 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+        i++;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001101.c b/rtree-c/test/expected/while-loops/reduction/r0001101.c
new file mode 100644
index 0000000000000000000000000000000000000000..08368b35a8c05ff8667d278e836769ba0cfbf1a1
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001101.c
@@ -0,0 +1,16 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+        i;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r000111.c b/rtree-c/test/expected/while-loops/reduction/r000111.c
new file mode 100644
index 0000000000000000000000000000000000000000..5bf00c85907b980638c73c49ac82edcfd6fe461d
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r000111.c
@@ -0,0 +1,14 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 1 remove statement at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r000100.c b/rtree-c/test/expected/while-loops/reduction/r001000.c
similarity index 100%
rename from rtree-c/test/expected/while-loops/reduction/r000100.c
rename to rtree-c/test/expected/while-loops/reduction/r001000.c
index b524fca30c2adbc5c082d396b29f70d70bab70d2..22795b8d4d1b43c197ca2ae61680bfa61d428902 100644
--- a/rtree-c/test/expected/while-loops/reduction/r000100.c
+++ b/rtree-c/test/expected/while-loops/reduction/r001000.c
@@ -1,7 +1,7 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
diff --git a/rtree-c/test/expected/while-loops/reduction/r00011.c b/rtree-c/test/expected/while-loops/reduction/r001001.c
similarity index 69%
rename from rtree-c/test/expected/while-loops/reduction/r00011.c
rename to rtree-c/test/expected/while-loops/reduction/r001001.c
index 3aa141b781c6ba8a64b157addcb80650acf9b70d..8482a0e62fbad5f8b89c2fb09b09a4985cea7db3 100644
--- a/rtree-c/test/expected/while-loops/reduction/r00011.c
+++ b/rtree-c/test/expected/while-loops/reduction/r001001.c
@@ -1,13 +1,15 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
     while (i)
     {
+        i;
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r00101.c b/rtree-c/test/expected/while-loops/reduction/r00101.c
index e8e3166fac34b3bcca3285e610d7641932d2af85..8413b565d3cd9bcc2d3744b17eb6ea62d77b40b4 100644
--- a/rtree-c/test/expected/while-loops/reduction/r00101.c
+++ b/rtree-c/test/expected/while-loops/reduction/r00101.c
@@ -1,14 +1,13 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
-// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
-// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (0)
+    while (i)
     {
-        i;
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r00100.c b/rtree-c/test/expected/while-loops/reduction/r001100.c
similarity index 86%
rename from rtree-c/test/expected/while-loops/reduction/r00100.c
rename to rtree-c/test/expected/while-loops/reduction/r001100.c
index 65d31d95a68507c5259e0a861a680d89db9a9563..2c8507c97bb29101a6b2248ef2e2852c75e35469 100644
--- a/rtree-c/test/expected/while-loops/reduction/r00100.c
+++ b/rtree-c/test/expected/while-loops/reduction/r001100.c
@@ -1,5 +1,6 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
diff --git a/rtree-c/test/expected/while-loops/reduction/r001101.c b/rtree-c/test/expected/while-loops/reduction/r001101.c
new file mode 100644
index 0000000000000000000000000000000000000000..6a6e6005dd3b28a850a8cbddeb9b23cd11ef51f6
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r001101.c
@@ -0,0 +1,15 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+        i;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0011.c b/rtree-c/test/expected/while-loops/reduction/r00111.c
similarity index 83%
rename from rtree-c/test/expected/while-loops/reduction/r0011.c
rename to rtree-c/test/expected/while-loops/reduction/r00111.c
index 7e6f1ef00b7fb0424e2488c0db31027d896dc34d..1dff3e572c78cf8054a1d0d5f4f7f6660898c9d3 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0011.c
+++ b/rtree-c/test/expected/while-loops/reduction/r00111.c
@@ -1,5 +1,6 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
diff --git a/rtree-c/test/expected/while-loops/reduction/r10000.c b/rtree-c/test/expected/while-loops/reduction/r10000.c
index 3a753f8ad9bc3b02e74b674fc715468a0cf0ce94..5fe50b88f60c61946c1e9a86fc5d5f3265249167 100644
--- a/rtree-c/test/expected/while-loops/reduction/r10000.c
+++ b/rtree-c/test/expected/while-loops/reduction/r10000.c
@@ -1,8 +1,8 @@
 // 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 
 int main()
 {
diff --git a/rtree-c/test/expected/while-loops/reduction/r10001.c b/rtree-c/test/expected/while-loops/reduction/r10001.c
index ad2c9b2173b2bb9b0b3fb80a8d93d7ef07ea356d..55a01a401ac9ecd6d55f83508296b4b352c13e54 100644
--- a/rtree-c/test/expected/while-loops/reduction/r10001.c
+++ b/rtree-c/test/expected/while-loops/reduction/r10001.c
@@ -1,12 +1,12 @@
 // 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 
 int main()
 {
-    while (10)
+    while (0)
     {
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r10010.c b/rtree-c/test/expected/while-loops/reduction/r10010.c
new file mode 100644
index 0000000000000000000000000000000000000000..ce6b516848ab5d12be071f0d17ae144b3cde87ad
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r10010.c
@@ -0,0 +1,12 @@
+// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+
+int main()
+{
+    while (10)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r10011.c b/rtree-c/test/expected/while-loops/reduction/r10011.c
new file mode 100644
index 0000000000000000000000000000000000000000..dcae175fcf6b84e61552ea5c5c1883cc76b94af1
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r10011.c
@@ -0,0 +1,12 @@
+// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+
+int main()
+{
+    while (0)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r1001.c b/rtree-c/test/expected/while-loops/reduction/r1010.c
similarity index 100%
rename from rtree-c/test/expected/while-loops/reduction/r1001.c
rename to rtree-c/test/expected/while-loops/reduction/r1010.c
index 3aa47a9bdc91e8eaabd9e16457220442eaf7be17..2cad2a8c659b7bf359344dbb3a6fda0bd2baf645 100644
--- a/rtree-c/test/expected/while-loops/reduction/r1001.c
+++ b/rtree-c/test/expected/while-loops/reduction/r1010.c
@@ -1,7 +1,7 @@
 // 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 
 int main()
 {
diff --git a/rtree-c/test/expected/while-loops/reduction/r101.c b/rtree-c/test/expected/while-loops/reduction/r1011.c
similarity index 78%
rename from rtree-c/test/expected/while-loops/reduction/r101.c
rename to rtree-c/test/expected/while-loops/reduction/r1011.c
index d8796c64282d9a3e047e753817e04a72487a80cb..1e2fe422972bad93117b9be0f822865281f51a80 100644
--- a/rtree-c/test/expected/while-loops/reduction/r101.c
+++ b/rtree-c/test/expected/while-loops/reduction/r1011.c
@@ -1,5 +1,6 @@
 // 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 
 int main()