From 0f54a4c2a3b8cfe7c6c059c6664cb54e12e9029b Mon Sep 17 00:00:00 2001
From: Christian Gram Kalhauge <chrg@dtu.dk>
Date: Sun, 10 Mar 2024 00:06:11 +0100
Subject: [PATCH] A "Simple" fix

---
 rtree-c/src/ReduceC.hs                        | 183 +++++++++++-------
 rtree-c/test/cases/small/structfn.c           |   6 +-
 .../expected/add/reduction/r000000000.c.hs    |  88 +++++++++
 .../expected/add/reduction/r000000001.c.hs    |  88 +++++++++
 .../expected/add/reduction/r000000010.c.hs    |  88 +++++++++
 .../expected/add/reduction/r000000011.c.hs    |  88 +++++++++
 .../add/reduction/{r0000001.c => r00000010.c} |   1 +
 .../expected/add/reduction/r00000010.c.hs     |  88 +++++++++
 .../test/expected/add/reduction/r00000011.c   |  16 ++
 .../expected/add/reduction/r00000011.c.hs     |  88 +++++++++
 .../expected/add/reduction/r000001000.c.hs    |  88 +++++++++
 .../expected/add/reduction/r000001001.c.hs    |  88 +++++++++
 .../expected/add/reduction/r000001010.c.hs    |  88 +++++++++
 .../expected/add/reduction/r000001011.c.hs    |  88 +++++++++
 .../add/reduction/{r0000011.c => r00000110.c} |   1 +
 .../expected/add/reduction/r00000110.c.hs     |  88 +++++++++
 .../test/expected/add/reduction/r00000111.c   |  16 ++
 .../expected/add/reduction/r00000111.c.hs     |  88 +++++++++
 .../expected/add/reduction/r00001000.c.hs     |  88 +++++++++
 .../expected/add/reduction/r00001001.c.hs     |  88 +++++++++
 .../expected/add/reduction/r00001010.c.hs     |  88 +++++++++
 .../expected/add/reduction/r00001011.c.hs     |  88 +++++++++
 .../add/reduction/{r000011.c => r0000110.c}   |   1 +
 .../test/expected/add/reduction/r0000110.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r0000111.c    |  15 ++
 .../test/expected/add/reduction/r0000111.c.hs |  88 +++++++++
 .../add/reduction/{r0001000.c => r00010000.c} |   1 +
 .../expected/add/reduction/r00010000.c.hs     |  88 +++++++++
 .../add/reduction/{r0001001.c => r00010001.c} |   1 +
 .../expected/add/reduction/r00010001.c.hs     |  88 +++++++++
 .../test/expected/add/reduction/r00010010.c   |  16 ++
 .../expected/add/reduction/r00010010.c.hs     |  88 +++++++++
 .../test/expected/add/reduction/r00010011.c   |  16 ++
 .../expected/add/reduction/r00010011.c.hs     |  88 +++++++++
 .../test/expected/add/reduction/r0001010.c    |   7 +-
 .../test/expected/add/reduction/r0001010.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r0001011.c    |   7 +-
 .../test/expected/add/reduction/r0001011.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r00011000.c   |  16 ++
 .../expected/add/reduction/r00011000.c.hs     |  88 +++++++++
 .../test/expected/add/reduction/r00011001.c   |  16 ++
 .../expected/add/reduction/r00011001.c.hs     |  88 +++++++++
 .../test/expected/add/reduction/r00011010.c   |  16 ++
 .../expected/add/reduction/r00011010.c.hs     |  88 +++++++++
 .../test/expected/add/reduction/r00011011.c   |  16 ++
 .../expected/add/reduction/r00011011.c.hs     |  88 +++++++++
 .../add/reduction/{r00011.c => r0001110.c}    |   2 +
 .../test/expected/add/reduction/r0001110.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r0001111.c    |  14 ++
 .../test/expected/add/reduction/r0001111.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r001000.c.hs  |  88 +++++++++
 .../test/expected/add/reduction/r001001.c.hs  |  88 +++++++++
 .../add/reduction/{r00101.c => r001010.c}     |   1 +
 .../test/expected/add/reduction/r001010.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r001011.c |  14 ++
 .../test/expected/add/reduction/r001011.c.hs  |  88 +++++++++
 .../add/reduction/{r001100.c => r0011000.c}   |   1 +
 .../test/expected/add/reduction/r0011000.c.hs |  88 +++++++++
 .../add/reduction/{r001101.c => r0011001.c}   |   1 +
 .../test/expected/add/reduction/r0011001.c.hs |  88 +++++++++
 .../add/reduction/{r00111.c => r0011010.c}    |   2 +
 .../test/expected/add/reduction/r0011010.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r0011011.c    |  14 ++
 .../test/expected/add/reduction/r0011011.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r0011100.c    |  15 ++
 .../test/expected/add/reduction/r0011100.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r0011101.c    |  15 ++
 .../test/expected/add/reduction/r0011101.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r0011110.c    |  14 ++
 .../test/expected/add/reduction/r0011110.c.hs |  88 +++++++++
 .../test/expected/add/reduction/r0011111.c    |  14 ++
 .../test/expected/add/reduction/r0011111.c.hs |  88 +++++++++
 .../add/reduction/{r01000.c => r010000.c}     |   1 +
 .../test/expected/add/reduction/r010000.c.hs  |  88 +++++++++
 .../add/reduction/{r01001.c => r010001.c}     |   1 +
 .../test/expected/add/reduction/r010001.c.hs  |  88 +++++++++
 .../add/reduction/{r0101.c => r010010.c}      |   2 +
 .../test/expected/add/reduction/r010010.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r010011.c |  13 ++
 .../test/expected/add/reduction/r010011.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r010100.c |  14 ++
 .../test/expected/add/reduction/r010100.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r010101.c |  14 ++
 .../test/expected/add/reduction/r010101.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r010110.c |  13 ++
 .../test/expected/add/reduction/r010110.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r010111.c |  13 ++
 .../test/expected/add/reduction/r010111.c.hs  |  88 +++++++++
 .../add/reduction/{r0110.c => r01100.c}       |   1 +
 .../test/expected/add/reduction/r01100.c.hs   |  88 +++++++++
 .../add/reduction/{r0111.c => r011010.c}      |   2 +
 .../test/expected/add/reduction/r011010.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r011011.c |  13 ++
 .../test/expected/add/reduction/r011011.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r01110.c  |  13 ++
 .../test/expected/add/reduction/r01110.c.hs   |  88 +++++++++
 rtree-c/test/expected/add/reduction/r011110.c |  13 ++
 .../test/expected/add/reduction/r011110.c.hs  |  88 +++++++++
 rtree-c/test/expected/add/reduction/r011111.c |  13 ++
 .../test/expected/add/reduction/r011111.c.hs  |  88 +++++++++
 .../test/expected/add/reduction/r1000.c.hs    |  88 +++++++++
 .../test/expected/add/reduction/r1001.c.hs    |  88 +++++++++
 .../test/expected/add/reduction/r1010.c.hs    |  88 +++++++++
 .../test/expected/add/reduction/r1011.c.hs    |  88 +++++++++
 .../expected/add/reduction/{r11.c => r110.c}  |   1 +
 rtree-c/test/expected/add/reduction/r110.c.hs |  88 +++++++++
 rtree-c/test/expected/add/reduction/r111.c    |   7 +
 rtree-c/test/expected/add/reduction/r111.c.hs |  88 +++++++++
 rtree-c/test/expected/clang-22382/extract.c   |   6 +
 .../expected/clang-22382/reduction/p0.path    |   7 +
 .../expected/clang-22382/reduction/p1.path    |   7 +
 .../expected/clang-22382/reduction/p2.path    |   7 +
 .../expected/clang-22382/reduction/p3.path    |   7 +
 .../expected/clang-22382/reduction/p4.path    |   7 +
 .../expected/clang-22382/reduction/p5.path    |   7 +
 .../expected/clang-22382/reduction/p6.path    |   7 +
 .../expected/clang-22382/reduction/p7.path    |  21 ++
 .../expected/clang-22382/reduction/p9.path    |  11 ++
 .../test/expected/clang-22382/reduction/x0.c  |   6 +
 .../test/expected/clang-22382/reduction/x1.c  |   6 +
 .../test/expected/clang-22382/reduction/x2.c  |   6 +
 .../test/expected/clang-22382/reduction/x3.c  |   6 +
 .../test/expected/clang-22382/reduction/x4.c  |   6 +
 .../test/expected/clang-22382/reduction/x5.c  |   6 +
 .../test/expected/clang-22382/reduction/x6.c  |   6 +
 .../test/expected/clang-22382/reduction/x7.c  |  20 ++
 .../expected/clang-23353/reduction/p0.path    |   1 +
 .../expected/clang-23353/reduction/p1.path    |   1 +
 .../expected/clang-23353/reduction/p10.path   |  11 ++
 .../expected/clang-23353/reduction/p7.path    |   3 +
 .../expected/clang-23353/reduction/p8.path    |   6 +
 .../expected/clang-23353/reduction/p9.path    |  58 ++++--
 .../test/expected/clang-23353/reduction/x7.c  |   8 +-
 .../test/expected/clang-23353/reduction/x8.c  |   6 +-
 .../test/expected/clang-23353/reduction/x9.c  |  11 ++
 .../expected/clang-26760/reduction/p9.path    |  10 +
 .../expected/constant/reduction/r00000.c.hs   |  72 +++++++
 .../expected/constant/reduction/r00001.c.hs   |  72 +++++++
 .../expected/constant/reduction/r0001.c.hs    |  72 +++++++
 .../expected/constant/reduction/r001.c.hs     |  72 +++++++
 .../expected/constant/reduction/r01000.c.hs   |  72 +++++++
 .../expected/constant/reduction/r01001.c.hs   |  72 +++++++
 .../expected/constant/reduction/r0101.c.hs    |  72 +++++++
 .../constant/reduction/{r011.c => r0110.c}    |   1 +
 .../expected/constant/reduction/r0110.c.hs    |  72 +++++++
 .../test/expected/constant/reduction/r0111.c  |   9 +
 .../expected/constant/reduction/r0111.c.hs    |  72 +++++++
 .../expected/constant/reduction/r10000.c.hs   |  72 +++++++
 .../expected/constant/reduction/r10001.c.hs   |  72 +++++++
 .../expected/constant/reduction/r1001.c.hs    |  72 +++++++
 .../expected/constant/reduction/r101.c.hs     |  72 +++++++
 .../expected/constant/reduction/r11000.c.hs   |  72 +++++++
 .../expected/constant/reduction/r11001.c.hs   |  72 +++++++
 .../expected/constant/reduction/r1101.c.hs    |  72 +++++++
 .../constant/reduction/{r111.c => r1110.c}    |   1 +
 .../expected/constant/reduction/r1110.c.hs    |  72 +++++++
 .../test/expected/constant/reduction/r1111.c  |   8 +
 .../expected/constant/reduction/r1111.c.hs    |  72 +++++++
 .../expected/declaration/reduction/r0000.c.hs |  61 ++++++
 .../expected/declaration/reduction/r0001.c.hs |  61 ++++++
 .../expected/declaration/reduction/r0010.c.hs |  61 ++++++
 .../expected/declaration/reduction/r0011.c.hs |  61 ++++++
 .../declaration/reduction/{r01.c => r010.c}   |   1 +
 .../expected/declaration/reduction/r010.c.hs  |  61 ++++++
 .../expected/declaration/reduction/r011.c     |   8 +
 .../expected/declaration/reduction/r011.c.hs  |  61 ++++++
 .../expected/declaration/reduction/r100.c.hs  |  61 ++++++
 .../expected/declaration/reduction/r101.c.hs  |  61 ++++++
 .../declaration/reduction/{r11.c => r110.c}   |   1 +
 .../expected/declaration/reduction/r110.c.hs  |  61 ++++++
 .../expected/declaration/reduction/r111.c     |   7 +
 .../expected/declaration/reduction/r111.c.hs  |  61 ++++++
 .../expected/definition/reduction/r000.c.hs   |  54 ++++++
 .../definition/reduction/{r001.c => r0010.c}  |   1 +
 .../expected/definition/reduction/r0010.c.hs  |  54 ++++++
 .../expected/definition/reduction/r0011.c     |  12 ++
 .../expected/definition/reduction/r0011.c.hs  |  54 ++++++
 .../definition/reduction/{r010.c => r0100.c}  |   1 +
 .../expected/definition/reduction/r0100.c.hs  |  54 ++++++
 .../definition/reduction/{r011.c => r01010.c} |   2 +
 .../expected/definition/reduction/r01010.c.hs |  54 ++++++
 .../expected/definition/reduction/r01011.c    |  12 ++
 .../expected/definition/reduction/r01011.c.hs |  54 ++++++
 .../expected/definition/reduction/r0110.c     |  12 ++
 .../expected/definition/reduction/r0110.c.hs  |  54 ++++++
 .../expected/definition/reduction/r01110.c    |  12 ++
 .../expected/definition/reduction/r01110.c.hs |  54 ++++++
 .../expected/definition/reduction/r01111.c    |  12 ++
 .../expected/definition/reduction/r01111.c.hs |  54 ++++++
 .../expected/definition/reduction/r10.c.hs    |  54 ++++++
 .../definition/reduction/{r11.c => r110.c}    |   1 +
 .../expected/definition/reduction/r110.c.hs   |  54 ++++++
 .../test/expected/definition/reduction/r111.c |   7 +
 .../expected/definition/reduction/r111.c.hs   |  54 ++++++
 .../for/reduction/{r00000.c => r000000.c}     |   1 +
 .../test/expected/for/reduction/r000000.c.hs  |  57 ++++++
 rtree-c/test/expected/for/reduction/r000001.c |  14 ++
 .../test/expected/for/reduction/r000001.c.hs  |  57 ++++++
 .../for/reduction/{r00001.c => r000010.c}     |   1 +
 .../test/expected/for/reduction/r000010.c.hs  |  57 ++++++
 rtree-c/test/expected/for/reduction/r000011.c |  14 ++
 .../test/expected/for/reduction/r000011.c.hs  |  57 ++++++
 .../for/reduction/{r0001.c => r00010.c}       |   1 +
 .../test/expected/for/reduction/r00010.c.hs   |  57 ++++++
 rtree-c/test/expected/for/reduction/r00011.c  |  13 ++
 .../test/expected/for/reduction/r00011.c.hs   |  57 ++++++
 .../for/reduction/{r001.c => r0010.c}         |   1 +
 .../test/expected/for/reduction/r0010.c.hs    |  57 ++++++
 rtree-c/test/expected/for/reduction/r0011.c   |  12 ++
 .../test/expected/for/reduction/r0011.c.hs    |  57 ++++++
 .../for/reduction/{r01000.c => r010000.c}     |   1 +
 .../test/expected/for/reduction/r010000.c.hs  |  57 ++++++
 rtree-c/test/expected/for/reduction/r010001.c |  14 ++
 .../test/expected/for/reduction/r010001.c.hs  |  57 ++++++
 .../for/reduction/{r01001.c => r010010.c}     |   1 +
 .../test/expected/for/reduction/r010010.c.hs  |  57 ++++++
 rtree-c/test/expected/for/reduction/r010011.c |  14 ++
 .../test/expected/for/reduction/r010011.c.hs  |  57 ++++++
 .../for/reduction/{r0101.c => r01010.c}       |   1 +
 .../test/expected/for/reduction/r01010.c.hs   |  57 ++++++
 rtree-c/test/expected/for/reduction/r01011.c  |  13 ++
 .../test/expected/for/reduction/r01011.c.hs   |  57 ++++++
 .../for/reduction/{r011.c => r0110.c}         |   1 +
 .../test/expected/for/reduction/r0110.c.hs    |  57 ++++++
 rtree-c/test/expected/for/reduction/r0111.c   |  12 ++
 .../test/expected/for/reduction/r0111.c.hs    |  57 ++++++
 .../expected/for/reduction/{r1.c => r10.c}    |   1 +
 rtree-c/test/expected/for/reduction/r10.c.hs  |  57 ++++++
 rtree-c/test/expected/for/reduction/r11.c     |   9 +
 rtree-c/test/expected/for/reduction/r11.c.hs  |  57 ++++++
 .../reduction/{r00000000.c => r000000000.c}   |   1 +
 .../functions/reduction/r000000000.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000000001.c |  21 ++
 .../functions/reduction/r000000001.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r00000001.c  |   4 +-
 .../functions/reduction/r00000001.c.hs        | 103 ++++++++++
 .../reduction/{r000001.c => r00000010.c}      |   2 +
 .../functions/reduction/r00000010.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00000011.c  |  19 ++
 .../functions/reduction/r00000011.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r000001000.c |  21 ++
 .../functions/reduction/r000001000.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000001001.c |  21 ++
 .../functions/reduction/r000001001.c.hs       | 103 ++++++++++
 .../reduction/{r0000001.c => r00000101.c}     |   1 +
 .../functions/reduction/r00000101.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00000110.c  |  19 ++
 .../functions/reduction/r00000110.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00000111.c  |  19 ++
 .../functions/reduction/r00000111.c.hs        | 103 ++++++++++
 .../reduction/{r00001000.c => r0000100000.c}  |   2 +
 .../functions/reduction/r0000100000.c.hs      | 103 ++++++++++
 .../reduction/{r00001001.c => r0000100001.c}  |   2 +
 .../functions/reduction/r0000100001.c.hs      | 103 ++++++++++
 .../reduction/{r0000101.c => r000010001.c}    |   2 +
 .../functions/reduction/r000010001.c.hs       | 103 ++++++++++
 .../reduction/{r000011.c => r000010010.c}     |   3 +
 .../functions/reduction/r000010010.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000010011.c |  19 ++
 .../functions/reduction/r000010011.c.hs       | 103 ++++++++++
 .../functions/reduction/r0000101000.c         |  21 ++
 .../functions/reduction/r0000101000.c.hs      | 103 ++++++++++
 .../functions/reduction/r0000101001.c         |  21 ++
 .../functions/reduction/r0000101001.c.hs      | 103 ++++++++++
 .../expected/functions/reduction/r000010101.c |  20 ++
 .../functions/reduction/r000010101.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000010110.c |  19 ++
 .../functions/reduction/r000010110.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000010111.c |  19 ++
 .../functions/reduction/r000010111.c.hs       | 103 ++++++++++
 .../functions/reduction/r0000110000.c         |  21 ++
 .../functions/reduction/r0000110000.c.hs      | 103 ++++++++++
 .../functions/reduction/r0000110001.c         |  21 ++
 .../functions/reduction/r0000110001.c.hs      | 103 ++++++++++
 .../expected/functions/reduction/r000011001.c |  20 ++
 .../functions/reduction/r000011001.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000011010.c |  19 ++
 .../functions/reduction/r000011010.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000011011.c |  19 ++
 .../functions/reduction/r000011011.c.hs       | 103 ++++++++++
 .../functions/reduction/r0000111000.c         |  21 ++
 .../functions/reduction/r0000111000.c.hs      | 103 ++++++++++
 .../functions/reduction/r0000111001.c         |  21 ++
 .../functions/reduction/r0000111001.c.hs      | 103 ++++++++++
 .../expected/functions/reduction/r000011101.c |  20 ++
 .../functions/reduction/r000011101.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000011110.c |  19 ++
 .../functions/reduction/r000011110.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000011111.c |  19 ++
 .../functions/reduction/r000011111.c.hs       | 103 ++++++++++
 .../reduction/{r0001000.c => r00010000.c}     |   1 +
 .../functions/reduction/r00010000.c.hs        | 103 ++++++++++
 .../reduction/{r0001001.c => r00010001.c}     |   1 +
 .../functions/reduction/r00010001.c.hs        | 103 ++++++++++
 .../reduction/{r000101.c => r00010010.c}      |   2 +
 .../functions/reduction/r00010010.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00010011.c  |  19 ++
 .../functions/reduction/r00010011.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00010100.c  |  20 ++
 .../functions/reduction/r00010100.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00010101.c  |  20 ++
 .../functions/reduction/r00010101.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00010110.c  |  19 ++
 .../functions/reduction/r00010110.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00010111.c  |  19 ++
 .../functions/reduction/r00010111.c.hs        | 103 ++++++++++
 .../reduction/{r0001100.c => r000110000.c}    |   2 +
 .../functions/reduction/r000110000.c.hs       | 103 ++++++++++
 .../reduction/{r0001101.c => r000110001.c}    |   2 +
 .../functions/reduction/r000110001.c.hs       | 103 ++++++++++
 .../reduction/{r000111.c => r000110010.c}     |   3 +
 .../functions/reduction/r000110010.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000110011.c |  19 ++
 .../functions/reduction/r000110011.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000110100.c |  20 ++
 .../functions/reduction/r000110100.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000110101.c |  20 ++
 .../functions/reduction/r000110101.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000110110.c |  19 ++
 .../functions/reduction/r000110110.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000110111.c |  19 ++
 .../functions/reduction/r000110111.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000111000.c |  20 ++
 .../functions/reduction/r000111000.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000111001.c |  20 ++
 .../functions/reduction/r000111001.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000111010.c |  19 ++
 .../functions/reduction/r000111010.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000111011.c |  19 ++
 .../functions/reduction/r000111011.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000111100.c |  20 ++
 .../functions/reduction/r000111100.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000111101.c |  20 ++
 .../functions/reduction/r000111101.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000111110.c |  19 ++
 .../functions/reduction/r000111110.c.hs       | 103 ++++++++++
 .../expected/functions/reduction/r000111111.c |  19 ++
 .../functions/reduction/r000111111.c.hs       | 103 ++++++++++
 .../functions/reduction/r0010000.c.hs         | 103 ++++++++++
 .../functions/reduction/r0010001.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r001001.c.hs | 103 ++++++++++
 .../reduction/{r00101.c => r001010.c}         |   1 +
 .../expected/functions/reduction/r001010.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r001011.c    |  14 ++
 .../expected/functions/reduction/r001011.c.hs | 103 ++++++++++
 .../reduction/{r0011000.c => r00110000.c}     |   1 +
 .../functions/reduction/r00110000.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00110001.c  |  16 ++
 .../functions/reduction/r00110001.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r0011001.c   |   2 +-
 .../functions/reduction/r0011001.c.hs         | 103 ++++++++++
 .../reduction/{r00111.c => r0011010.c}        |   2 +
 .../functions/reduction/r0011010.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r0011011.c   |  14 ++
 .../functions/reduction/r0011011.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r00111000.c  |  16 ++
 .../functions/reduction/r00111000.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r00111001.c  |  16 ++
 .../functions/reduction/r00111001.c.hs        | 103 ++++++++++
 .../reduction/{r001101.c => r0011101.c}       |   1 +
 .../functions/reduction/r0011101.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r0011110.c   |  14 ++
 .../functions/reduction/r0011110.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r0011111.c   |  14 ++
 .../functions/reduction/r0011111.c.hs         | 103 ++++++++++
 .../reduction/{r01000.c => r0100000.c}        |   2 +
 .../functions/reduction/r0100000.c.hs         | 103 ++++++++++
 .../reduction/{r01001.c => r01000010.c}       |   3 +
 .../functions/reduction/r01000010.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r01000011.c  |  18 ++
 .../functions/reduction/r01000011.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r0100010.c   |  18 ++
 .../functions/reduction/r0100010.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r01000110.c  |  18 ++
 .../functions/reduction/r01000110.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r01000111.c  |  18 ++
 .../functions/reduction/r01000111.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r0100100.c   |  18 ++
 .../functions/reduction/r0100100.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r01001010.c  |  18 ++
 .../functions/reduction/r01001010.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r01001011.c  |  18 ++
 .../functions/reduction/r01001011.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r0100110.c   |  18 ++
 .../functions/reduction/r0100110.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r01001110.c  |  18 ++
 .../functions/reduction/r01001110.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r01001111.c  |  18 ++
 .../functions/reduction/r01001111.c.hs        | 103 ++++++++++
 .../reduction/{r01010.c => r0101000.c}        |   2 +
 .../functions/reduction/r0101000.c.hs         | 103 ++++++++++
 .../reduction/{r01011.c => r01010010.c}       |   3 +
 .../functions/reduction/r01010010.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r01010011.c  |  18 ++
 .../functions/reduction/r01010011.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r0101010.c   |  18 ++
 .../functions/reduction/r0101010.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r01010110.c  |  18 ++
 .../functions/reduction/r01010110.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r01010111.c  |  18 ++
 .../functions/reduction/r01010111.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r0101100.c   |  18 ++
 .../functions/reduction/r0101100.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r01011010.c  |  18 ++
 .../functions/reduction/r01011010.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r01011011.c  |  18 ++
 .../functions/reduction/r01011011.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r0101110.c   |  18 ++
 .../functions/reduction/r0101110.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r01011110.c  |  18 ++
 .../functions/reduction/r01011110.c.hs        | 103 ++++++++++
 .../expected/functions/reduction/r01011111.c  |  18 ++
 .../functions/reduction/r01011111.c.hs        | 103 ++++++++++
 .../functions/reduction/{r0110.c => r01100.c} |   1 +
 .../expected/functions/reduction/r01100.c.hs  | 103 ++++++++++
 .../reduction/{r0111.c => r011010.c}          |   2 +
 .../expected/functions/reduction/r011010.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r011011.c    |  13 ++
 .../expected/functions/reduction/r011011.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r01110.c     |  13 ++
 .../expected/functions/reduction/r01110.c.hs  | 103 ++++++++++
 .../expected/functions/reduction/r011110.c    |  13 ++
 .../expected/functions/reduction/r011110.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r011111.c    |  13 ++
 .../expected/functions/reduction/r011111.c.hs | 103 ++++++++++
 .../reduction/{r100000.c => r1000000.c}       |   1 +
 .../functions/reduction/r1000000.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r1000001.c   |  15 ++
 .../functions/reduction/r1000001.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r100001.c    |   4 +-
 .../expected/functions/reduction/r100001.c.hs | 103 ++++++++++
 .../reduction/{r1001.c => r100010.c}          |   2 +
 .../expected/functions/reduction/r100010.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r100011.c    |  13 ++
 .../expected/functions/reduction/r100011.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r1001000.c   |  15 ++
 .../functions/reduction/r1001000.c.hs         | 103 ++++++++++
 .../expected/functions/reduction/r1001001.c   |  15 ++
 .../functions/reduction/r1001001.c.hs         | 103 ++++++++++
 .../reduction/{r10001.c => r100101.c}         |   1 +
 .../expected/functions/reduction/r100101.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r100110.c    |  13 ++
 .../expected/functions/reduction/r100110.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r100111.c    |  13 ++
 .../expected/functions/reduction/r100111.c.hs | 103 ++++++++++
 .../reduction/{r10100.c => r101000.c}         |   1 +
 .../expected/functions/reduction/r101000.c.hs | 103 ++++++++++
 .../reduction/{r10101.c => r101001.c}         |   1 +
 .../expected/functions/reduction/r101001.c.hs | 103 ++++++++++
 .../reduction/{r1011.c => r101010.c}          |   2 +
 .../expected/functions/reduction/r101010.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r101011.c    |  13 ++
 .../expected/functions/reduction/r101011.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r101100.c    |  14 ++
 .../expected/functions/reduction/r101100.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r101101.c    |  14 ++
 .../expected/functions/reduction/r101101.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r101110.c    |  13 ++
 .../expected/functions/reduction/r101110.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r101111.c    |  13 ++
 .../expected/functions/reduction/r101111.c.hs | 103 ++++++++++
 .../expected/functions/reduction/r11000.c.hs  | 103 ++++++++++
 .../expected/functions/reduction/r11001.c.hs  | 103 ++++++++++
 .../expected/functions/reduction/r1101.c.hs   | 103 ++++++++++
 .../functions/reduction/{r111.c => r1110.c}   |   1 +
 .../expected/functions/reduction/r1110.c.hs   | 103 ++++++++++
 .../test/expected/functions/reduction/r1111.c |   8 +
 .../expected/functions/reduction/r1111.c.hs   | 103 ++++++++++
 .../expected/llvm-26760/reduction/p0.path     |   1 +
 .../expected/llvm-26760/reduction/p1.path     |   1 +
 .../expected/llvm-26760/reduction/p2.path     |   4 +
 .../test/expected/llvm-26760/reduction/x2.c   |   7 +
 rtree-c/test/expected/main/reduction/r.c      |   4 -
 rtree-c/test/expected/main/reduction/r0.c     |   5 +
 rtree-c/test/expected/main/reduction/r0.c.hs  |  17 ++
 rtree-c/test/expected/main/reduction/r1.c     |   5 +
 rtree-c/test/expected/main/reduction/r1.c.hs  |  17 ++
 .../expected/struct/reduction/r00000.c.hs     | 126 ++++++++++++
 .../expected/struct/reduction/r00001.c.hs     | 126 ++++++++++++
 .../expected/struct/reduction/r00010.c.hs     | 126 ++++++++++++
 .../struct/reduction/{r00011.c => r000110.c}  |   1 +
 .../expected/struct/reduction/r000110.c.hs    | 126 ++++++++++++
 .../struct/reduction/{r10011.c => r000111.c}  |   6 +-
 .../expected/struct/reduction/r000111.c.hs    | 126 ++++++++++++
 .../test/expected/struct/reduction/r0010.c.hs | 126 ++++++++++++
 .../struct/reduction/{r0011.c => r00110.c}    |   1 +
 .../expected/struct/reduction/r00110.c.hs     | 126 ++++++++++++
 .../struct/reduction/{r10101.c => r00111.c}   |   4 +-
 .../expected/struct/reduction/r00111.c.hs     | 126 ++++++++++++
 .../expected/struct/reduction/r01000.c.hs     | 126 ++++++++++++
 .../expected/struct/reduction/r01001.c.hs     | 126 ++++++++++++
 .../expected/struct/reduction/r01010.c.hs     | 126 ++++++++++++
 .../struct/reduction/{r01011.c => r010110.c}  |   1 +
 .../expected/struct/reduction/r010110.c.hs    | 126 ++++++++++++
 .../struct/reduction/{r11011.c => r010111.c}  |   6 +-
 .../expected/struct/reduction/r010111.c.hs    | 126 ++++++++++++
 .../test/expected/struct/reduction/r0110.c.hs | 126 ++++++++++++
 .../struct/reduction/{r0111.c => r01110.c}    |   1 +
 .../expected/struct/reduction/r01110.c.hs     | 126 ++++++++++++
 .../struct/reduction/{r11101.c => r01111.c}   |   4 +-
 .../expected/struct/reduction/r01111.c.hs     | 126 ++++++++++++
 rtree-c/test/expected/struct/reduction/r10.c  |   6 +
 .../test/expected/struct/reduction/r10.c.hs   | 126 ++++++++++++
 .../test/expected/struct/reduction/r10000.c   |  14 --
 .../test/expected/struct/reduction/r10001.c   |  13 --
 .../test/expected/struct/reduction/r10010.c   |  13 --
 .../test/expected/struct/reduction/r10100.c   |  13 --
 .../test/expected/struct/reduction/r10110.c   |  12 --
 .../test/expected/struct/reduction/r101110.c  |  13 --
 .../test/expected/struct/reduction/r101111.c  |  10 -
 rtree-c/test/expected/struct/reduction/r11.c  |   6 +
 .../test/expected/struct/reduction/r11.c.hs   | 126 ++++++++++++
 .../test/expected/struct/reduction/r11000.c   |  14 --
 .../test/expected/struct/reduction/r11001.c   |  13 --
 .../test/expected/struct/reduction/r11010.c   |  13 --
 .../test/expected/struct/reduction/r11100.c   |  13 --
 .../test/expected/struct/reduction/r11110.c   |  12 --
 .../test/expected/struct/reduction/r111110.c  |  13 --
 .../test/expected/struct/reduction/r111111.c  |  10 -
 rtree-c/test/expected/structfn/main.c         |   2 +-
 .../reduction/{r000000.c => r0000000.c}       |  13 +-
 .../expected/structfn/reduction/r0000000.c.hs | 103 ++++++++++
 .../reduction/{r000001.c => r0000001.c}       |  13 +-
 .../expected/structfn/reduction/r0000001.c.hs | 103 ++++++++++
 .../reduction/{r101000.c => r0000010.c}       |  13 +-
 .../expected/structfn/reduction/r0000010.c.hs | 103 ++++++++++
 .../reduction/{r00100.c => r0000011.c}        |  10 +-
 .../expected/structfn/reduction/r0000011.c.hs | 103 ++++++++++
 .../reduction/{r110000.c => r0000100.c}       |  16 +-
 .../expected/structfn/reduction/r0000100.c.hs | 103 ++++++++++
 .../reduction/{r110001.c => r0000101.c}       |  16 +-
 .../expected/structfn/reduction/r0000101.c.hs | 103 ++++++++++
 .../reduction/{r01100.c => r0000110.c}        |  10 +-
 .../expected/structfn/reduction/r0000110.c.hs | 103 ++++++++++
 .../reduction/{r111000.c => r0000111.c}       |  13 +-
 .../expected/structfn/reduction/r0000111.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r000100.c     |  13 --
 .../reduction/{r100000.c => r0001000.c}       |  16 +-
 .../expected/structfn/reduction/r0001000.c.hs | 103 ++++++++++
 .../reduction/{r100001.c => r0001001.c}       |  16 +-
 .../expected/structfn/reduction/r0001001.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r000101.c     |  13 --
 .../expected/structfn/reduction/r0001010.c    |  15 ++
 .../expected/structfn/reduction/r0001010.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r0001011.c    |  15 ++
 .../expected/structfn/reduction/r0001011.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r0001100.c    |  17 ++
 .../expected/structfn/reduction/r0001100.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r0001101.c    |  16 ++
 .../expected/structfn/reduction/r0001101.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r0001110.c    |  15 ++
 .../expected/structfn/reduction/r0001110.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r0001111.c    |  15 ++
 .../expected/structfn/reduction/r0001111.c.hs | 103 ++++++++++
 .../reduction/{r000010.c => r0010000.c}       |  13 +-
 .../expected/structfn/reduction/r0010000.c.hs | 103 ++++++++++
 .../reduction/{r000011.c => r0010001.c}       |  13 +-
 .../expected/structfn/reduction/r0010001.c.hs | 103 ++++++++++
 .../reduction/{r1010010.c => r0010010.c}      |  14 +-
 .../expected/structfn/reduction/r0010010.c.hs | 103 ++++++++++
 .../reduction/{r001011.c => r00100110.c}      |  12 +-
 .../structfn/reduction/r00100110.c.hs         | 103 ++++++++++
 .../reduction/{r1010011.c => r00100111.c}     |  15 +-
 .../structfn/reduction/r00100111.c.hs         | 103 ++++++++++
 .../reduction/{r010010.c => r0010100.c}       |  13 +-
 .../expected/structfn/reduction/r0010100.c.hs | 103 ++++++++++
 .../reduction/{r010011.c => r0010101.c}       |  13 +-
 .../expected/structfn/reduction/r0010101.c.hs | 103 ++++++++++
 .../reduction/{r1110010.c => r0010110.c}      |  14 +-
 .../expected/structfn/reduction/r0010110.c.hs | 103 ++++++++++
 .../reduction/{r1110011.c => r00101110.c}     |  15 +-
 .../structfn/reduction/r00101110.c.hs         | 103 ++++++++++
 .../reduction/{r011011.c => r00101111.c}      |  12 +-
 .../structfn/reduction/r00101111.c.hs         | 103 ++++++++++
 .../expected/structfn/reduction/r0011000.c    |  17 ++
 .../expected/structfn/reduction/r0011000.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r0011001.c    |  16 ++
 .../expected/structfn/reduction/r0011001.c.hs | 103 ++++++++++
 .../reduction/{r001010.c => r0011010.c}       |  11 +-
 .../expected/structfn/reduction/r0011010.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r00110110.c   |  16 ++
 .../structfn/reduction/r00110110.c.hs         | 103 ++++++++++
 .../expected/structfn/reduction/r00110111.c   |  16 ++
 .../structfn/reduction/r00110111.c.hs         | 103 ++++++++++
 .../expected/structfn/reduction/r0011100.c    |  17 ++
 .../expected/structfn/reduction/r0011100.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r0011101.c    |  16 ++
 .../expected/structfn/reduction/r0011101.c.hs | 103 ++++++++++
 .../reduction/{r011010.c => r0011110.c}       |  11 +-
 .../expected/structfn/reduction/r0011110.c.hs | 103 ++++++++++
 .../expected/structfn/reduction/r00111110.c   |  16 ++
 .../structfn/reduction/r00111110.c.hs         | 103 ++++++++++
 .../expected/structfn/reduction/r00111111.c   |  16 ++
 .../structfn/reduction/r00111111.c.hs         | 103 ++++++++++
 .../expected/structfn/reduction/r010000.c     |  17 +-
 .../expected/structfn/reduction/r010000.c.hs  | 103 ++++++++++
 .../expected/structfn/reduction/r010001.c     |  16 +-
 .../expected/structfn/reduction/r010001.c.hs  | 103 ++++++++++
 .../structfn/reduction/{r00011.c => r01001.c} |  10 +-
 .../expected/structfn/reduction/r01001.c.hs   | 103 ++++++++++
 .../structfn/reduction/{r00110.c => r01010.c} |   8 +-
 .../expected/structfn/reduction/r01010.c.hs   | 103 ++++++++++
 .../reduction/{r101011.c => r010110.c}        |  12 +-
 .../expected/structfn/reduction/r010110.c.hs  | 103 ++++++++++
 .../reduction/{r00111.c => r010111.c}         |   9 +-
 .../expected/structfn/reduction/r010111.c.hs  | 103 ++++++++++
 .../reduction/{r010100.c => r011000.c}        |  12 +-
 .../expected/structfn/reduction/r011000.c.hs  | 103 ++++++++++
 .../reduction/{r010101.c => r011001.c}        |  12 +-
 .../expected/structfn/reduction/r011001.c.hs  | 103 ++++++++++
 .../structfn/reduction/{r01011.c => r01101.c} |  10 +-
 .../expected/structfn/reduction/r01101.c.hs   | 103 ++++++++++
 .../test/expected/structfn/reduction/r01110.c |   8 +-
 .../expected/structfn/reduction/r01110.c.hs   | 103 ++++++++++
 .../reduction/{r111011.c => r011110.c}        |  12 +-
 .../expected/structfn/reduction/r011110.c.hs  | 103 ++++++++++
 .../reduction/{r01111.c => r011111.c}         |   9 +-
 .../expected/structfn/reduction/r011111.c.hs  | 103 ++++++++++
 .../structfn/reduction/{r110010.c => r1000.c} |   9 +-
 .../expected/structfn/reduction/r1000.c.hs    | 103 ++++++++++
 .../expected/structfn/reduction/r100011.c     |  14 --
 .../reduction/{r110011.c => r10010.c}         |  10 +-
 .../expected/structfn/reduction/r10010.c.hs   | 103 ++++++++++
 .../expected/structfn/reduction/r100100.c     |  12 --
 .../expected/structfn/reduction/r100101.c     |  12 --
 .../test/expected/structfn/reduction/r10011.c |  12 +-
 .../expected/structfn/reduction/r10011.c.hs   | 103 ++++++++++
 .../structfn/reduction/{r100010.c => r1010.c} |   9 +-
 .../expected/structfn/reduction/r1010.c.hs    | 103 ++++++++++
 .../expected/structfn/reduction/r101010.c     |  12 --
 .../test/expected/structfn/reduction/r10110.c |  12 ++
 .../expected/structfn/reduction/r10110.c.hs   | 103 ++++++++++
 .../expected/structfn/reduction/r101100.c     |  13 --
 .../expected/structfn/reduction/r1011010.c    |  15 --
 .../expected/structfn/reduction/r1011011.c    |  14 --
 .../test/expected/structfn/reduction/r10111.c |  12 ++
 .../expected/structfn/reduction/r10111.c.hs   | 103 ++++++++++
 .../expected/structfn/reduction/r101110.c     |  11 --
 .../structfn/reduction/{r111110.c => r110.c}  |   7 +-
 .../expected/structfn/reduction/r110.c.hs     | 103 ++++++++++
 .../expected/structfn/reduction/r110100.c     |  12 --
 .../expected/structfn/reduction/r110101.c     |  12 --
 .../structfn/reduction/{r11011.c => r1110.c}  |   8 +-
 .../expected/structfn/reduction/r1110.c.hs    | 103 ++++++++++
 .../expected/structfn/reduction/r111010.c     |  12 --
 .../structfn/reduction/{r101111.c => r1111.c} |   8 +-
 .../expected/structfn/reduction/r1111.c.hs    | 103 ++++++++++
 .../expected/structfn/reduction/r111100.c     |  13 --
 .../expected/structfn/reduction/r1111010.c    |  15 --
 .../expected/structfn/reduction/r1111011.c    |  14 --
 .../expected/structfn/reduction/r111111.c     |  10 -
 .../typedef/reduction/{r0000.c => r00000.c}   |   1 +
 .../expected/typedef/reduction/r00000.c.hs    |  94 +++++++++
 .../typedef/reduction/{r0001.c => r00001.c}   |   1 +
 .../expected/typedef/reduction/r00001.c.hs    |  94 +++++++++
 .../typedef/reduction/{r0010.c => r00010.c}   |   1 +
 .../expected/typedef/reduction/r00010.c.hs    |  94 +++++++++
 .../typedef/reduction/{r0011.c => r000110.c}  |   2 +
 .../expected/typedef/reduction/r000110.c.hs   |  94 +++++++++
 .../test/expected/typedef/reduction/r000111.c |  14 ++
 .../expected/typedef/reduction/r000111.c.hs   |  94 +++++++++
 .../test/expected/typedef/reduction/r00100.c  |  15 ++
 .../expected/typedef/reduction/r00100.c.hs    |  94 +++++++++
 .../test/expected/typedef/reduction/r00101.c  |  14 ++
 .../expected/typedef/reduction/r00101.c.hs    |  94 +++++++++
 .../test/expected/typedef/reduction/r00110.c  |  14 ++
 .../expected/typedef/reduction/r00110.c.hs    |  94 +++++++++
 .../test/expected/typedef/reduction/r001110.c |  14 ++
 .../expected/typedef/reduction/r001110.c.hs   |  94 +++++++++
 .../test/expected/typedef/reduction/r001111.c |  14 ++
 .../expected/typedef/reduction/r001111.c.hs   |  94 +++++++++
 .../typedef/reduction/{r0100.c => r01000.c}   |   1 +
 .../expected/typedef/reduction/r01000.c.hs    |  94 +++++++++
 .../typedef/reduction/{r0101.c => r01001.c}   |   1 +
 .../expected/typedef/reduction/r01001.c.hs    |  94 +++++++++
 .../typedef/reduction/{r0110.c => r01010.c}   |   1 +
 .../expected/typedef/reduction/r01010.c.hs    |  94 +++++++++
 .../typedef/reduction/{r0111.c => r010110.c}  |   2 +
 .../expected/typedef/reduction/r010110.c.hs   |  94 +++++++++
 .../test/expected/typedef/reduction/r010111.c |  14 ++
 .../expected/typedef/reduction/r010111.c.hs   |  94 +++++++++
 .../test/expected/typedef/reduction/r01100.c  |  15 ++
 .../expected/typedef/reduction/r01100.c.hs    |  94 +++++++++
 .../test/expected/typedef/reduction/r01101.c  |  14 ++
 .../expected/typedef/reduction/r01101.c.hs    |  94 +++++++++
 .../test/expected/typedef/reduction/r01110.c  |  14 ++
 .../expected/typedef/reduction/r01110.c.hs    |  94 +++++++++
 .../test/expected/typedef/reduction/r011110.c |  14 ++
 .../expected/typedef/reduction/r011110.c.hs   |  94 +++++++++
 .../test/expected/typedef/reduction/r011111.c |  14 ++
 .../expected/typedef/reduction/r011111.c.hs   |  94 +++++++++
 .../test/expected/typedef/reduction/r100.c.hs |  94 +++++++++
 .../test/expected/typedef/reduction/r101.c.hs |  94 +++++++++
 .../test/expected/typedef/reduction/r110.c.hs |  94 +++++++++
 .../typedef/reduction/{r111.c => r1110.c}     |   1 +
 .../expected/typedef/reduction/r1110.c.hs     |  94 +++++++++
 .../test/expected/typedef/reduction/r1111.c   |   9 +
 .../expected/typedef/reduction/r1111.c.hs     |  94 +++++++++
 .../expected/while-loops/reduction/r0000.c.hs |  63 ++++++
 .../expected/while-loops/reduction/r0001.c.hs |  63 ++++++
 .../expected/while-loops/reduction/r0010.c.hs |  63 ++++++
 .../expected/while-loops/reduction/r0011.c.hs |  63 ++++++
 .../expected/while-loops/reduction/r0100.c    |  12 ++
 .../expected/while-loops/reduction/r0100.c.hs |  63 ++++++
 .../expected/while-loops/reduction/r0101.c    |  12 ++
 .../expected/while-loops/reduction/r0101.c.hs |  63 ++++++
 .../while-loops/reduction/{r01.c => r011.c}   |   1 +
 .../expected/while-loops/reduction/r011.c.hs  |  63 ++++++
 .../test/expected/while-loops/reduction/r1.c  |   5 -
 .../expected/while-loops/reduction/r100.c     |  10 +
 .../expected/while-loops/reduction/r100.c.hs  |  63 ++++++
 .../expected/while-loops/reduction/r101.c     |  10 +
 .../expected/while-loops/reduction/r101.c.hs  |  63 ++++++
 .../expected/while-loops/reduction/r110.c     |   7 +
 .../expected/while-loops/reduction/r110.c.hs  |  63 ++++++
 .../expected/while-loops/reduction/r111.c     |   7 +
 .../expected/while-loops/reduction/r111.c.hs  |  63 ++++++
 rtree-c/test/src/ReduceCSpec.hs               |  18 +-
 718 files changed, 36144 insertions(+), 754 deletions(-)
 create mode 100644 rtree-c/test/expected/add/reduction/r000000000.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r000000001.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r000000010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r000000011.c.hs
 rename rtree-c/test/expected/add/reduction/{r0000001.c => r00000010.c} (88%)
 create mode 100644 rtree-c/test/expected/add/reduction/r00000010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00000011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00000011.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r000001000.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r000001001.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r000001010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r000001011.c.hs
 rename rtree-c/test/expected/add/reduction/{r0000011.c => r00000110.c} (88%)
 create mode 100644 rtree-c/test/expected/add/reduction/r00000110.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00000111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00000111.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00001000.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00001001.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00001010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00001011.c.hs
 rename rtree-c/test/expected/add/reduction/{r000011.c => r0000110.c} (86%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0000110.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0000111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000111.c.hs
 rename rtree-c/test/expected/add/reduction/{r0001000.c => r00010000.c} (88%)
 create mode 100644 rtree-c/test/expected/add/reduction/r00010000.c.hs
 rename rtree-c/test/expected/add/reduction/{r0001001.c => r00010001.c} (88%)
 create mode 100644 rtree-c/test/expected/add/reduction/r00010001.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00010010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00010010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00010011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00010011.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0001010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0001011.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00011000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00011000.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00011001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00011001.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00011010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00011010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r00011011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00011011.c.hs
 rename rtree-c/test/expected/add/reduction/{r00011.c => r0001110.c} (73%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0001110.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0001111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001111.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r001000.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r001001.c.hs
 rename rtree-c/test/expected/add/reduction/{r00101.c => r001010.c} (84%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r001011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001011.c.hs
 rename rtree-c/test/expected/add/reduction/{r001100.c => r0011000.c} (86%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0011000.c.hs
 rename rtree-c/test/expected/add/reduction/{r001101.c => r0011001.c} (86%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0011001.c.hs
 rename rtree-c/test/expected/add/reduction/{r00111.c => r0011010.c} (73%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0011010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0011011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0011011.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0011100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0011100.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0011101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0011101.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0011110.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0011110.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r0011111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0011111.c.hs
 rename rtree-c/test/expected/add/reduction/{r01000.c => r010000.c} (84%)
 create mode 100644 rtree-c/test/expected/add/reduction/r010000.c.hs
 rename rtree-c/test/expected/add/reduction/{r01001.c => r010001.c} (84%)
 create mode 100644 rtree-c/test/expected/add/reduction/r010001.c.hs
 rename rtree-c/test/expected/add/reduction/{r0101.c => r010010.c} (68%)
 create mode 100644 rtree-c/test/expected/add/reduction/r010010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r010011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r010011.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r010100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r010100.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r010101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r010101.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r010110.c
 create mode 100644 rtree-c/test/expected/add/reduction/r010110.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r010111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r010111.c.hs
 rename rtree-c/test/expected/add/reduction/{r0110.c => r01100.c} (82%)
 create mode 100644 rtree-c/test/expected/add/reduction/r01100.c.hs
 rename rtree-c/test/expected/add/reduction/{r0111.c => r011010.c} (68%)
 create mode 100644 rtree-c/test/expected/add/reduction/r011010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r011011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r011011.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r01110.c
 create mode 100644 rtree-c/test/expected/add/reduction/r01110.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r011110.c
 create mode 100644 rtree-c/test/expected/add/reduction/r011110.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r011111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r011111.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r1000.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r1001.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r1010.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r1011.c.hs
 rename rtree-c/test/expected/add/reduction/{r11.c => r110.c} (69%)
 create mode 100644 rtree-c/test/expected/add/reduction/r110.c.hs
 create mode 100644 rtree-c/test/expected/add/reduction/r111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r111.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r00000.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r00001.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r0001.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r001.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r01000.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r01001.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r0101.c.hs
 rename rtree-c/test/expected/constant/reduction/{r011.c => r0110.c} (76%)
 create mode 100644 rtree-c/test/expected/constant/reduction/r0110.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r0111.c
 create mode 100644 rtree-c/test/expected/constant/reduction/r0111.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r10000.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r10001.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r1001.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r101.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r11000.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r11001.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r1101.c.hs
 rename rtree-c/test/expected/constant/reduction/{r111.c => r1110.c} (75%)
 create mode 100644 rtree-c/test/expected/constant/reduction/r1110.c.hs
 create mode 100644 rtree-c/test/expected/constant/reduction/r1111.c
 create mode 100644 rtree-c/test/expected/constant/reduction/r1111.c.hs
 create mode 100644 rtree-c/test/expected/declaration/reduction/r0000.c.hs
 create mode 100644 rtree-c/test/expected/declaration/reduction/r0001.c.hs
 create mode 100644 rtree-c/test/expected/declaration/reduction/r0010.c.hs
 create mode 100644 rtree-c/test/expected/declaration/reduction/r0011.c.hs
 rename rtree-c/test/expected/declaration/reduction/{r01.c => r010.c} (72%)
 create mode 100644 rtree-c/test/expected/declaration/reduction/r010.c.hs
 create mode 100644 rtree-c/test/expected/declaration/reduction/r011.c
 create mode 100644 rtree-c/test/expected/declaration/reduction/r011.c.hs
 create mode 100644 rtree-c/test/expected/declaration/reduction/r100.c.hs
 create mode 100644 rtree-c/test/expected/declaration/reduction/r101.c.hs
 rename rtree-c/test/expected/declaration/reduction/{r11.c => r110.c} (69%)
 create mode 100644 rtree-c/test/expected/declaration/reduction/r110.c.hs
 create mode 100644 rtree-c/test/expected/declaration/reduction/r111.c
 create mode 100644 rtree-c/test/expected/declaration/reduction/r111.c.hs
 create mode 100644 rtree-c/test/expected/definition/reduction/r000.c.hs
 rename rtree-c/test/expected/definition/reduction/{r001.c => r0010.c} (78%)
 create mode 100644 rtree-c/test/expected/definition/reduction/r0010.c.hs
 create mode 100644 rtree-c/test/expected/definition/reduction/r0011.c
 create mode 100644 rtree-c/test/expected/definition/reduction/r0011.c.hs
 rename rtree-c/test/expected/definition/reduction/{r010.c => r0100.c} (78%)
 create mode 100644 rtree-c/test/expected/definition/reduction/r0100.c.hs
 rename rtree-c/test/expected/definition/reduction/{r011.c => r01010.c} (62%)
 create mode 100644 rtree-c/test/expected/definition/reduction/r01010.c.hs
 create mode 100644 rtree-c/test/expected/definition/reduction/r01011.c
 create mode 100644 rtree-c/test/expected/definition/reduction/r01011.c.hs
 create mode 100644 rtree-c/test/expected/definition/reduction/r0110.c
 create mode 100644 rtree-c/test/expected/definition/reduction/r0110.c.hs
 create mode 100644 rtree-c/test/expected/definition/reduction/r01110.c
 create mode 100644 rtree-c/test/expected/definition/reduction/r01110.c.hs
 create mode 100644 rtree-c/test/expected/definition/reduction/r01111.c
 create mode 100644 rtree-c/test/expected/definition/reduction/r01111.c.hs
 create mode 100644 rtree-c/test/expected/definition/reduction/r10.c.hs
 rename rtree-c/test/expected/definition/reduction/{r11.c => r110.c} (68%)
 create mode 100644 rtree-c/test/expected/definition/reduction/r110.c.hs
 create mode 100644 rtree-c/test/expected/definition/reduction/r111.c
 create mode 100644 rtree-c/test/expected/definition/reduction/r111.c.hs
 rename rtree-c/test/expected/for/reduction/{r00000.c => r000000.c} (84%)
 create mode 100644 rtree-c/test/expected/for/reduction/r000000.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r000001.c
 create mode 100644 rtree-c/test/expected/for/reduction/r000001.c.hs
 rename rtree-c/test/expected/for/reduction/{r00001.c => r000010.c} (84%)
 create mode 100644 rtree-c/test/expected/for/reduction/r000010.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r000011.c
 create mode 100644 rtree-c/test/expected/for/reduction/r000011.c.hs
 rename rtree-c/test/expected/for/reduction/{r0001.c => r00010.c} (82%)
 create mode 100644 rtree-c/test/expected/for/reduction/r00010.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r00011.c
 create mode 100644 rtree-c/test/expected/for/reduction/r00011.c.hs
 rename rtree-c/test/expected/for/reduction/{r001.c => r0010.c} (78%)
 create mode 100644 rtree-c/test/expected/for/reduction/r0010.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r0011.c
 create mode 100644 rtree-c/test/expected/for/reduction/r0011.c.hs
 rename rtree-c/test/expected/for/reduction/{r01000.c => r010000.c} (84%)
 create mode 100644 rtree-c/test/expected/for/reduction/r010000.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r010001.c
 create mode 100644 rtree-c/test/expected/for/reduction/r010001.c.hs
 rename rtree-c/test/expected/for/reduction/{r01001.c => r010010.c} (84%)
 create mode 100644 rtree-c/test/expected/for/reduction/r010010.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r010011.c
 create mode 100644 rtree-c/test/expected/for/reduction/r010011.c.hs
 rename rtree-c/test/expected/for/reduction/{r0101.c => r01010.c} (81%)
 create mode 100644 rtree-c/test/expected/for/reduction/r01010.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r01011.c
 create mode 100644 rtree-c/test/expected/for/reduction/r01011.c.hs
 rename rtree-c/test/expected/for/reduction/{r011.c => r0110.c} (78%)
 create mode 100644 rtree-c/test/expected/for/reduction/r0110.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r0111.c
 create mode 100644 rtree-c/test/expected/for/reduction/r0111.c.hs
 rename rtree-c/test/expected/for/reduction/{r1.c => r10.c} (61%)
 create mode 100644 rtree-c/test/expected/for/reduction/r10.c.hs
 create mode 100644 rtree-c/test/expected/for/reduction/r11.c
 create mode 100644 rtree-c/test/expected/for/reduction/r11.c.hs
 rename rtree-c/test/expected/functions/reduction/{r00000000.c => r000000000.c} (89%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r000001.c => r00000010.c} (76%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000001000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000001000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000001001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000001001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0000001.c => r00000101.c} (88%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00000111.c.hs
 rename rtree-c/test/expected/functions/reduction/{r00001000.c => r0000100000.c} (81%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000100000.c.hs
 rename rtree-c/test/expected/functions/reduction/{r00001001.c => r0000100001.c} (81%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000100001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0000101.c => r000010001.c} (79%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r000011.c => r000010010.c} (68%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000101000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000101000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000101001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000101001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010111.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000110000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000110000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000110001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000110001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000111000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000111000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000111001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000111001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011111.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0001000.c => r00010000.c} (88%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010000.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0001001.c => r00010001.c} (88%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r000101.c => r00010010.c} (76%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010100.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00010111.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0001100.c => r000110000.c} (79%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110000.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0001101.c => r000110001.c} (79%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r000111.c => r000110010.c} (68%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110100.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000110111.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111100.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000111111.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0010000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0010001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r001001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r00101.c => r001010.c} (84%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r001010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r001011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001011.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0011000.c => r00110000.c} (88%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r00110000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00110001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00110001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r00111.c => r0011010.c} (72%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00111000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00111000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r00111001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00111001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r001101.c => r0011101.c} (86%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011111.c.hs
 rename rtree-c/test/expected/functions/reduction/{r01000.c => r0100000.c} (73%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r0100000.c.hs
 rename rtree-c/test/expected/functions/reduction/{r01001.c => r01000010.c} (64%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r01000010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01000011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01000011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0100010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0100010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01000110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01000110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01000111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01000111.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0100100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0100100.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01001010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01001010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01001011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01001011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0100110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0100110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01001110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01001110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01001111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01001111.c.hs
 rename rtree-c/test/expected/functions/reduction/{r01010.c => r0101000.c} (73%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r0101000.c.hs
 rename rtree-c/test/expected/functions/reduction/{r01011.c => r01010010.c} (64%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r01010010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01010011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01010011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0101010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0101010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01010110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01010110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01010111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01010111.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0101100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0101100.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r0101110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0101110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011111.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0110.c => r01100.c} (81%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r01100.c.hs
 rename rtree-c/test/expected/functions/reduction/{r0111.c => r011010.c} (67%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r011010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r011011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r011011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r01110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r011110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r011110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r011111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r011111.c.hs
 rename rtree-c/test/expected/functions/reduction/{r100000.c => r1000000.c} (86%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r100001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r1001.c => r100010.c} (68%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r100010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r100011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r100011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r1001000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1001000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r1001001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1001001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r10001.c => r100101.c} (84%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r100101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r100110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r100110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r100111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r100111.c.hs
 rename rtree-c/test/expected/functions/reduction/{r10100.c => r101000.c} (84%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r101000.c.hs
 rename rtree-c/test/expected/functions/reduction/{r10101.c => r101001.c} (84%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r101001.c.hs
 rename rtree-c/test/expected/functions/reduction/{r1011.c => r101010.c} (67%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r101010.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r101011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r101011.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r101100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r101100.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r101101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r101101.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r101110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r101110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r101111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r101111.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r11000.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r11001.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r1101.c.hs
 rename rtree-c/test/expected/functions/reduction/{r111.c => r1110.c} (75%)
 create mode 100644 rtree-c/test/expected/functions/reduction/r1110.c.hs
 create mode 100644 rtree-c/test/expected/functions/reduction/r1111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1111.c.hs
 create mode 100644 rtree-c/test/expected/llvm-26760/reduction/p2.path
 create mode 100644 rtree-c/test/expected/llvm-26760/reduction/x2.c
 delete mode 100644 rtree-c/test/expected/main/reduction/r.c
 create mode 100644 rtree-c/test/expected/main/reduction/r0.c
 create mode 100644 rtree-c/test/expected/main/reduction/r0.c.hs
 create mode 100644 rtree-c/test/expected/main/reduction/r1.c
 create mode 100644 rtree-c/test/expected/main/reduction/r1.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r00000.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r00001.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r00010.c.hs
 rename rtree-c/test/expected/struct/reduction/{r00011.c => r000110.c} (85%)
 create mode 100644 rtree-c/test/expected/struct/reduction/r000110.c.hs
 rename rtree-c/test/expected/struct/reduction/{r10011.c => r000111.c} (65%)
 create mode 100644 rtree-c/test/expected/struct/reduction/r000111.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r0010.c.hs
 rename rtree-c/test/expected/struct/reduction/{r0011.c => r00110.c} (82%)
 create mode 100644 rtree-c/test/expected/struct/reduction/r00110.c.hs
 rename rtree-c/test/expected/struct/reduction/{r10101.c => r00111.c} (65%)
 create mode 100644 rtree-c/test/expected/struct/reduction/r00111.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r01000.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r01001.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r01010.c.hs
 rename rtree-c/test/expected/struct/reduction/{r01011.c => r010110.c} (85%)
 create mode 100644 rtree-c/test/expected/struct/reduction/r010110.c.hs
 rename rtree-c/test/expected/struct/reduction/{r11011.c => r010111.c} (67%)
 create mode 100644 rtree-c/test/expected/struct/reduction/r010111.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r0110.c.hs
 rename rtree-c/test/expected/struct/reduction/{r0111.c => r01110.c} (82%)
 create mode 100644 rtree-c/test/expected/struct/reduction/r01110.c.hs
 rename rtree-c/test/expected/struct/reduction/{r11101.c => r01111.c} (65%)
 create mode 100644 rtree-c/test/expected/struct/reduction/r01111.c.hs
 create mode 100644 rtree-c/test/expected/struct/reduction/r10.c
 create mode 100644 rtree-c/test/expected/struct/reduction/r10.c.hs
 delete mode 100644 rtree-c/test/expected/struct/reduction/r10000.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r10001.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r10010.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r10100.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r10110.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r101110.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r101111.c
 create mode 100644 rtree-c/test/expected/struct/reduction/r11.c
 create mode 100644 rtree-c/test/expected/struct/reduction/r11.c.hs
 delete mode 100644 rtree-c/test/expected/struct/reduction/r11000.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r11001.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r11010.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r11100.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r11110.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r111110.c
 delete mode 100644 rtree-c/test/expected/struct/reduction/r111111.c
 rename rtree-c/test/expected/structfn/reduction/{r000000.c => r0000000.c} (69%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0000000.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r000001.c => r0000001.c} (69%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0000001.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r101000.c => r0000010.c} (60%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0000010.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r00100.c => r0000011.c} (60%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0000011.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r110000.c => r0000100.c} (56%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0000100.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r110001.c => r0000101.c} (55%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0000101.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r01100.c => r0000110.c} (60%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0000110.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r111000.c => r0000111.c} (60%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0000111.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r000100.c
 rename rtree-c/test/expected/structfn/reduction/{r100000.c => r0001000.c} (55%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001000.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r100001.c => r0001001.c} (54%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001001.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r000101.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001010.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001010.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001011.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001011.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001100.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001100.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001101.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001101.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001110.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001110.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001111.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0001111.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r000010.c => r0010000.c} (69%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0010000.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r000011.c => r0010001.c} (68%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0010001.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r1010010.c => r0010010.c} (72%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0010010.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r001011.c => r00100110.c} (63%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00100110.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r1010011.c => r00100111.c} (63%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00100111.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r010010.c => r0010100.c} (69%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0010100.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r010011.c => r0010101.c} (69%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0010101.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r1110010.c => r0010110.c} (72%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0010110.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r1110011.c => r00101110.c} (63%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00101110.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r011011.c => r00101111.c} (63%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00101111.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011000.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011000.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011001.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011001.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r001010.c => r0011010.c} (72%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011010.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00110110.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00110110.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00110111.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00110111.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011100.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011100.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011101.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011101.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r011010.c => r0011110.c} (72%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r0011110.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00111110.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00111110.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00111111.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r00111111.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r010000.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r010001.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r00011.c => r01001.c} (90%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r01001.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r00110.c => r01010.c} (96%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r01010.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r101011.c => r010110.c} (81%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r010110.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r00111.c => r010111.c} (81%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r010111.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r010100.c => r011000.c} (79%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r011000.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r010101.c => r011001.c} (79%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r011001.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r01011.c => r01101.c} (92%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r01101.c.hs
 create mode 100644 rtree-c/test/expected/structfn/reduction/r01110.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r111011.c => r011110.c} (81%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r011110.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r01111.c => r011111.c} (81%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r011111.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r110010.c => r1000.c} (51%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r1000.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r100011.c
 rename rtree-c/test/expected/structfn/reduction/{r110011.c => r10010.c} (50%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r10010.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r100100.c
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r100101.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r10011.c.hs
 rename rtree-c/test/expected/structfn/reduction/{r100010.c => r1010.c} (50%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r1010.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r101010.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r10110.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r10110.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r101100.c
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r1011010.c
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r1011011.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r10111.c
 create mode 100644 rtree-c/test/expected/structfn/reduction/r10111.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r101110.c
 rename rtree-c/test/expected/structfn/reduction/{r111110.c => r110.c} (51%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r110.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r110100.c
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r110101.c
 rename rtree-c/test/expected/structfn/reduction/{r11011.c => r1110.c} (57%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r1110.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r111010.c
 rename rtree-c/test/expected/structfn/reduction/{r101111.c => r1111.c} (50%)
 create mode 100644 rtree-c/test/expected/structfn/reduction/r1111.c.hs
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r111100.c
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r1111010.c
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r1111011.c
 delete mode 100644 rtree-c/test/expected/structfn/reduction/r111111.c
 rename rtree-c/test/expected/typedef/reduction/{r0000.c => r00000.c} (83%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00000.c.hs
 rename rtree-c/test/expected/typedef/reduction/{r0001.c => r00001.c} (83%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00001.c.hs
 rename rtree-c/test/expected/typedef/reduction/{r0010.c => r00010.c} (82%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00010.c.hs
 rename rtree-c/test/expected/typedef/reduction/{r0011.c => r000110.c} (70%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r000110.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r000111.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r000111.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00100.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00100.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00101.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00101.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00110.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r00110.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r001110.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r001110.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r001111.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r001111.c.hs
 rename rtree-c/test/expected/typedef/reduction/{r0100.c => r01000.c} (83%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01000.c.hs
 rename rtree-c/test/expected/typedef/reduction/{r0101.c => r01001.c} (82%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01001.c.hs
 rename rtree-c/test/expected/typedef/reduction/{r0110.c => r01010.c} (82%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01010.c.hs
 rename rtree-c/test/expected/typedef/reduction/{r0111.c => r010110.c} (69%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r010110.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r010111.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r010111.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01100.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01100.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01101.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01101.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01110.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r01110.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r011110.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r011110.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r011111.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r011111.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r100.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r101.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r110.c.hs
 rename rtree-c/test/expected/typedef/reduction/{r111.c => r1110.c} (77%)
 create mode 100644 rtree-c/test/expected/typedef/reduction/r1110.c.hs
 create mode 100644 rtree-c/test/expected/typedef/reduction/r1111.c
 create mode 100644 rtree-c/test/expected/typedef/reduction/r1111.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0000.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0001.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0010.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0011.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0100.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0100.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0101.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0101.c.hs
 rename rtree-c/test/expected/while-loops/reduction/{r01.c => r011.c} (70%)
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r011.c.hs
 delete mode 100644 rtree-c/test/expected/while-loops/reduction/r1.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r100.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r100.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r101.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r101.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r110.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r110.c.hs
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r111.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r111.c.hs

diff --git a/rtree-c/src/ReduceC.hs b/rtree-c/src/ReduceC.hs
index 288b0e5..59c9919 100644
--- a/rtree-c/src/ReduceC.hs
+++ b/rtree-c/src/ReduceC.hs
@@ -53,8 +53,7 @@ data Context = Context
   { keywords :: !(Set.Set Keyword)
   , typeDefs :: !(Map.Map C.Ident (CType, InlineType))
   , inlineExprs :: !(Map.Map C.Ident InlineExpr)
-  , fields :: !(Map.Map C.Ident (Maybe C.Ident))
-  , structs :: !(Map.Map C.Ident (Maybe C.CStructUnion))
+  , structs :: !(Map.Map C.Ident InlineStruct)
   }
   deriving (Show)
 
@@ -63,6 +62,11 @@ data InlineType
   | ITInline ![C.CDeclarationSpecifier C.NodeInfo]
   deriving (Show, Eq)
 
+data InlineStruct
+  = ISDelete
+  | ISKeep
+  deriving (Show, Eq)
+
 data InlineExpr
   = IEDelete
   | IEInline !C.CExpr
@@ -111,19 +115,10 @@ addKeyword k Context{..} =
     , ..
     }
 
-addStruct :: StructDef -> Context -> Context
-addStruct (StructDef k fs _) Context{..} =
-  Context
-    { structs = Map.insert k Nothing structs
-    , fields = foldr (`Map.insert` Just k) fields fs
-    , ..
-    }
-
-removeStruct :: StructDef -> Context -> Context
-removeStruct (StructDef k fs un) Context{..} =
+addInlineStruct :: C.Ident -> InlineStruct -> Context -> Context
+addInlineStruct k is Context{..} =
   Context
-    { structs = Map.insert k (Just un) structs
-    , fields = foldr (`Map.insert` Nothing) fields fs
+    { structs = Map.insert k is structs
     , ..
     }
 
@@ -139,7 +134,6 @@ defaultContext =
           , (C.builtinIdent "__PRETTY_FUNCTION__", IEKeep CTInt)
           , (C.builtinIdent "__FUNCTION__", IEKeep CTInt)
           ]
-    , fields = Map.empty
     , structs = Map.empty
     }
 
@@ -320,14 +314,17 @@ reduceParams' ctx declrs = do
       C.CFunDeclr (C.CFunParamsNew decls i) j k -> do
         (unzip -> (decls', defs)) <-
           decls & mapM \case
-            C.CDecl def items l -> do
+            a@(C.CDecl def items l) -> do
               (unzip -> (items', defs)) <-
                 items & mapM \case
                   a'@(C.CDeclarationItem (C.CDeclr idx _ _ _ _) _ _) ->
-                    split
-                      ("remove parameter", C.posOf k)
-                      (pure ([], [(Nothing, idx)]))
-                      (pure ([a'], [(Just (ctype ctx def), idx)]))
+                    if shouldDeleteDeclaration ctx a
+                      then pure ([], [(Nothing, idx)])
+                      else
+                        split
+                          ("remove parameter", C.posOf k)
+                          (pure ([], [(Nothing, idx)]))
+                          (pure ([a'], [(Just (ctype ctx def), idx)]))
                   a' -> notSupportedYet a' k
               case concat items' of
                 [] -> pure ([], concat defs)
@@ -430,8 +427,15 @@ handleDecl d ctx = case inlineTypeDefsCDeclaration d ctx of
       (pure (Nothing, addTypeDefs [ids] (ctype ctx rst, ITInline rst) ctx))
       (pure (Just (pure d), addTypeDefs [ids] (ctype ctx rst, ITKeep) ctx))
   -- A const
-  C.CDecl spc decl ni' -> do
-    (decl', ctx') <- foldr (reduceCDeclarationItem (ctype ctx spc)) (pure ([], ctx)) decl
+  d'@(C.CDecl spc decl ni') -> do
+    (decl', ctx') <-
+      foldr
+        ( reduceCDeclarationItem
+            (shouldDeleteDeclaration ctx d')
+            (ctype ctx spc)
+        )
+        (pure ([], ctx))
+        decl
     let fn = do
           spc1 <- trySplit ("remove static", C.posOf ni') spc $ filter \case
             C.CStorageSpec (C.CStatic _) -> False
@@ -446,56 +450,63 @@ handleDecl d ctx = case inlineTypeDefsCDeclaration d ctx of
       ([], stcts) ->
         split
           ("remove declaration", C.posOf d)
-          (pure (Nothing, foldr removeStruct ctx' stcts))
+          (pure (Nothing, foldr (\(StructDef k _ _) -> addInlineStruct k ISDelete) ctx' stcts))
           do
-            pure (Just fn, foldr addStruct ctx' stcts)
+            pure (Just fn, foldr (\(StructDef k _ _) -> addInlineStruct k ISKeep) ctx' stcts)
       (_, stcts) ->
-        pure (Just fn, foldr addStruct ctx' stcts)
+        pure (Just fn, foldr (\(StructDef k _ _) -> addInlineStruct k ISKeep) ctx' stcts)
   a -> don'tHandleWithPos a
 
 reduceCDeclarationItem
   :: (MonadReduce Lab m)
-  => CType
+  => Bool
+  -> CType
   -> C.CDeclarationItem C.NodeInfo
   -> m ([C.CDeclarationItem C.NodeInfo], Context)
   -> m ([C.CDeclarationItem C.NodeInfo], Context)
-reduceCDeclarationItem t d ma = case d of
+reduceCDeclarationItem shouldDelete t d ma = case d of
   C.CDeclarationItem
     dr@(C.CDeclr (Just i) [] Nothing [] ni)
     (Just (C.CInitExpr c ni'))
     Nothing -> do
       (ds, ctx) <- ma
       c' <- fromMaybe (pure zeroExpr) (reduceCExpr c ctx)
-      split
-        ("inline variable " <> C.identToString i, C.posOf ni)
-        (pure (ds, addInlineExpr i (IEInline c') ctx))
-        ( pure
-            ( inlineTypeDefsCDI (C.CDeclarationItem dr (Just (C.CInitExpr c' ni')) Nothing) ctx
-                : ds
-            , addInlineExpr i (IEKeep t) ctx
+      if shouldDelete
+        then pure (ds, addInlineExpr i (IEInline c') ctx)
+        else
+          split
+            ("inline variable " <> C.identToString i, C.posOf ni)
+            (pure (ds, addInlineExpr i (IEInline c') ctx))
+            ( pure
+                ( inlineTypeDefsCDI (C.CDeclarationItem dr (Just (C.CInitExpr c' ni')) Nothing) ctx
+                    : ds
+                , addInlineExpr i (IEKeep t) ctx
+                )
             )
-        )
   C.CDeclarationItem (C.CDeclr (Just i) a Nothing b ni) ex Nothing -> do
     (ds, ctx) <- ma
-    ex' <- case ex of
-      Just ix -> maybeSplit ("remove initializer", C.posOf ni) (reduceCInitializer ix ctx)
-      Nothing -> pure Nothing
-
-    (a', t') <-
-      if C.identToString i == "printf"
-        then pure (a, CTAny)
-        else do
-          (a', defs) <- reduceParams' ctx a
-          let t' = case defs of
-                [args] -> CTFun (map fst args)
-                [] -> t
-                _x -> error ("Unexpected" <> unlines (map show _x) <> show (C.posOf ni))
-          pure (a', t')
-    let d' = C.CDeclarationItem (C.CDeclr (Just i) a' Nothing b ni) ex' Nothing
-    split
-      ("remove variable " <> C.identToString i, C.posOf ni)
-      (pure (ds, addInlineExpr i IEDelete ctx))
-      (pure (inlineTypeDefsCDI d' ctx : ds, addInlineExpr i (IEKeep t') ctx))
+    if shouldDelete
+      then pure (ds, addInlineExpr i IEDelete ctx)
+      else do
+        ex' <- case ex of
+          Just ix -> maybeSplit ("remove initializer", C.posOf ni) (reduceCInitializer ix ctx)
+          Nothing -> pure Nothing
+
+        (a', t') <-
+          if C.identToString i == "printf"
+            then pure (a, CTAny)
+            else do
+              (a', defs) <- reduceParams' ctx a
+              let t' = case defs of
+                    [args] -> CTFun (map fst args)
+                    [] -> t
+                    _x -> error ("Unexpected" <> unlines (map show _x) <> show (C.posOf ni))
+              pure (a', t')
+        let d' = C.CDeclarationItem (C.CDeclr (Just i) a' Nothing b ni) ex' Nothing
+        split
+          ("remove variable " <> C.identToString i, C.posOf ni)
+          (pure (ds, addInlineExpr i IEDelete ctx))
+          (pure (inlineTypeDefsCDI d' ctx : ds, addInlineExpr i (IEKeep t') ctx))
   a@(C.CDeclarationItem (C.CDeclr _ _ _ _ ni) _ _) -> do
     don'tHandleWithNodeInfo a ni
   a -> don'tHandle a
@@ -538,7 +549,9 @@ reduceCStatement smt labs ctx = case smt of
   C.CCompound is cbi ni -> do
     cbi' <- lift $ evalStateT (mapM (reduceCCompoundBlockItem labs) cbi) ctx
     case concat cbi' of
-      [] -> mzero
+      [] -> do
+        exceptIf ("remove empty compound", C.posOf smt)
+        pure (C.CCompound is [] ni)
       ccbi -> pure (C.CCompound is ccbi ni)
   C.CWhile e s dow ni -> do
     s' <- reduceCStatement s labs ctx
@@ -586,8 +599,8 @@ reduceCStatement smt labs ctx = case smt of
       (Nothing, Just s', Nothing) -> pure s'
   C.CFor e1 e2 e3 s ni -> do
     (me1', ctx') <- case e1 of
-      C.CForDecl (C.CDecl rec decl ni') -> do
-        (decl', ctx') <- foldr (reduceCDeclarationItem (ctype ctx rec)) (pure ([], ctx)) decl
+      C.CForDecl d@(C.CDecl rec decl ni') -> do
+        (decl', ctx') <- foldr (reduceCDeclarationItem (shouldDeleteDeclaration ctx d) (ctype ctx rec)) (pure ([], ctx)) decl
         res <-
           if null decl'
             then
@@ -609,12 +622,16 @@ reduceCStatement smt labs ctx = case smt of
 
     s' <- reduceCStatementOrEmptyBlock s labs ctx'
     let forloop n = do
-          e2' <- case e2 of
-            Just e2' -> maybeSplit ("remove check", C.posOf e2') (reduceCExpr e2' ctx')
-            Nothing -> pure Nothing
-          e3' <- case e3 of
-            Just e3' -> maybeSplit ("remove iterator", C.posOf e3') (reduceCExpr e3' ctx')
-            Nothing -> pure Nothing
+          e2' <- runMaybeT do
+            e2' <- liftMaybe e2
+            re2' <- liftMaybe (reduceCExpr e2' ctx')
+            exceptIf ("remove check", C.posOf e2')
+            re2'
+          e3' <- runMaybeT do
+            e3' <- liftMaybe e3
+            re3' <- liftMaybe (reduceCExpr e3' ctx')
+            exceptIf ("remove iterator", C.posOf e3')
+            re3'
           let e2'' =
                 if AllowInfiniteForLoops `isIn` ctx || isNothing e2
                   then e2'
@@ -850,6 +867,36 @@ inlineTypeDefsCDeclaration decl ctx =
       C.CDecl (inlineTypeDefsSpecs items ctx) (map (`inlineTypeDefsCDI` ctx) decli) ni
     a -> don'tHandle a
 
+shouldDeleteDeclaration :: Context -> C.CDeclaration C.NodeInfo -> Bool
+shouldDeleteDeclaration ctx decl =
+  case decl of
+    C.CDecl items decli _ -> any shouldDeleteDeclSpec items || any shouldDeleteDeclItem decli
+    a -> don'tHandle a
+ where
+  shouldDeleteDeclItem = \case
+    C.CDeclarationItem a _ _ -> shouldDeleteDeclartor a
+    a -> don'tHandle a
+
+  shouldDeleteDeclartor = \case
+    C.CDeclr _ def _ _ _ -> any shouldDeleteDerivedDeclartor def
+
+  shouldDeleteDerivedDeclartor = \case
+    C.CFunDeclr (C.CFunParamsNew x _) _ _ ->
+      any (shouldDeleteDeclaration ctx) x
+    C.CArrDeclr{} -> False
+    C.CPtrDeclr _ _ -> False
+    a -> don'tHandle a
+
+  shouldDeleteDeclSpec = \case
+    C.CTypeSpec (C.CSUType (C.CStruct _ (Just idx) Nothing _ _) _) ->
+      case Map.lookup idx . structs $ ctx of
+        Just ISDelete -> True
+        Just ISKeep -> False
+        Nothing -> error ("could not find struct:" <> show idx)
+    C.CTypeSpec (C.CSUType (C.CStruct _ _ (Just c) _ _) _) ->
+      any (shouldDeleteDeclaration ctx) c
+    _ow -> False
+
 inlineTypeDefsSpecs :: [C.CDeclarationSpecifier C.NodeInfo] -> Context -> [C.CDeclarationSpecifier C.NodeInfo]
 inlineTypeDefsSpecs r ctx =
   r & concatMap \case
@@ -858,11 +905,11 @@ inlineTypeDefsSpecs r ctx =
         Just (_, ITKeep) -> [a]
         Just (_, ITInline res) -> res
         Nothing -> error ("could not find typedef:" <> show idx)
-    a@(C.CTypeSpec (C.CSUType (C.CStruct _ (Just idx) Nothing _ _) _)) ->
-      case Map.lookup idx . structs $ ctx of
-        Just (Just def) -> [C.CTypeSpec (C.CSUType def C.undefNode)]
-        Just Nothing -> [a]
-        Nothing -> error ("could not find struct:" <> show idx)
+    -- a@(C.CTypeSpec (C.CSUType (C.CStruct _ (Just idx) Nothing _ _) _)) ->
+    --   case Map.lookup idx . structs $ ctx of
+    --     Just (Just def) -> [C.CTypeSpec (C.CSUType def C.undefNode)]
+    --     Just Nothing -> [a]
+    --     Nothing -> error ("could not find struct:" <> show idx)
     C.CTypeSpec (C.CSUType (C.CStruct a b (Just c) d e) f) ->
       [C.CTypeSpec (C.CSUType (C.CStruct a b (Just $ map (`inlineTypeDefsCDeclaration` ctx) c) d e) f)]
     a -> [a]
diff --git a/rtree-c/test/cases/small/structfn.c b/rtree-c/test/cases/small/structfn.c
index f04d49c..2726d53 100644
--- a/rtree-c/test/cases/small/structfn.c
+++ b/rtree-c/test/cases/small/structfn.c
@@ -1,4 +1,6 @@
 struct S0 {};
-struct S0 g0 = {};
 void fn(struct S0 a) {}
-int main() { fn(g0); }
+int main() { 
+  struct S0 g0 = {};
+  fn(g0); 
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000000.c.hs b/rtree-c/test/expected/add/reduction/r000000000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000000000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r000000001.c.hs b/rtree-c/test/expected/add/reduction/r000000001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000000001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r000000010.c.hs b/rtree-c/test/expected/add/reduction/r000000010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000000010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r000000011.c.hs b/rtree-c/test/expected/add/reduction/r000000011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000000011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0000001.c b/rtree-c/test/expected/add/reduction/r00000010.c
similarity index 88%
rename from rtree-c/test/expected/add/reduction/r0000001.c
rename to rtree-c/test/expected/add/reduction/r00000010.c
index 5ae5f93..a9b8bf0 100644
--- a/rtree-c/test/expected/add/reduction/r0000001.c
+++ b/rtree-c/test/expected/add/reduction/r00000010.c
@@ -5,6 +5,7 @@
 // 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 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r00000010.c.hs b/rtree-c/test/expected/add/reduction/r00000010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00000010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00000011.c b/rtree-c/test/expected/add/reduction/r00000011.c
new file mode 100644
index 0000000..2415615
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00000011.c
@@ -0,0 +1,16 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove return 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 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r00000011.c.hs b/rtree-c/test/expected/add/reduction/r00000011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00000011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r000001000.c.hs b/rtree-c/test/expected/add/reduction/r000001000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000001000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r000001001.c.hs b/rtree-c/test/expected/add/reduction/r000001001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000001001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r000001010.c.hs b/rtree-c/test/expected/add/reduction/r000001010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000001010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r000001011.c.hs b/rtree-c/test/expected/add/reduction/r000001011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000001011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0000011.c b/rtree-c/test/expected/add/reduction/r00000110.c
similarity index 88%
rename from rtree-c/test/expected/add/reduction/r0000011.c
rename to rtree-c/test/expected/add/reduction/r00000110.c
index eeaf7c2..e46567f 100644
--- a/rtree-c/test/expected/add/reduction/r0000011.c
+++ b/rtree-c/test/expected/add/reduction/r00000110.c
@@ -5,6 +5,7 @@
 // 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 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r00000110.c.hs b/rtree-c/test/expected/add/reduction/r00000110.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00000110.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00000111.c b/rtree-c/test/expected/add/reduction/r00000111.c
new file mode 100644
index 0000000..263c1a8
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00000111.c
@@ -0,0 +1,16 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove return 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 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r00000111.c.hs b/rtree-c/test/expected/add/reduction/r00000111.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00000111.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00001000.c.hs b/rtree-c/test/expected/add/reduction/r00001000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00001000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00001001.c.hs b/rtree-c/test/expected/add/reduction/r00001001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00001001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00001010.c.hs b/rtree-c/test/expected/add/reduction/r00001010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00001010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00001011.c.hs b/rtree-c/test/expected/add/reduction/r00001011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00001011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r000011.c b/rtree-c/test/expected/add/reduction/r0000110.c
similarity index 86%
rename from rtree-c/test/expected/add/reduction/r000011.c
rename to rtree-c/test/expected/add/reduction/r0000110.c
index 8eceedf..ca3fe6c 100644
--- a/rtree-c/test/expected/add/reduction/r000011.c
+++ b/rtree-c/test/expected/add/reduction/r0000110.c
@@ -4,6 +4,7 @@
 // 0 remove return statement at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0000110.c.hs b/rtree-c/test/expected/add/reduction/r0000110.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000110.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0000111.c b/rtree-c/test/expected/add/reduction/r0000111.c
new file mode 100644
index 0000000..8535f15
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000111.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000111.c.hs b/rtree-c/test/expected/add/reduction/r0000111.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000111.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0001000.c b/rtree-c/test/expected/add/reduction/r00010000.c
similarity index 88%
rename from rtree-c/test/expected/add/reduction/r0001000.c
rename to rtree-c/test/expected/add/reduction/r00010000.c
index 1360f67..b7541f9 100644
--- a/rtree-c/test/expected/add/reduction/r0001000.c
+++ b/rtree-c/test/expected/add/reduction/r00010000.c
@@ -2,6 +2,7 @@
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 0 remove return statement at ("test/cases/small/add.c": line 6)
 // 0 do without param at ("test/cases/small/add.c": line 6)
 // 0 do without param at ("test/cases/small/add.c": line 6)
diff --git a/rtree-c/test/expected/add/reduction/r00010000.c.hs b/rtree-c/test/expected/add/reduction/r00010000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00010000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0001001.c b/rtree-c/test/expected/add/reduction/r00010001.c
similarity index 88%
rename from rtree-c/test/expected/add/reduction/r0001001.c
rename to rtree-c/test/expected/add/reduction/r00010001.c
index 6a86c10..baf64fd 100644
--- a/rtree-c/test/expected/add/reduction/r0001001.c
+++ b/rtree-c/test/expected/add/reduction/r00010001.c
@@ -2,6 +2,7 @@
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 0 remove return statement at ("test/cases/small/add.c": line 6)
 // 0 do without param at ("test/cases/small/add.c": line 6)
 // 1 do without param at ("test/cases/small/add.c": line 6)
diff --git a/rtree-c/test/expected/add/reduction/r00010001.c.hs b/rtree-c/test/expected/add/reduction/r00010001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00010001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00010010.c b/rtree-c/test/expected/add/reduction/r00010010.c
new file mode 100644
index 0000000..4805450
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00010010.c
@@ -0,0 +1,16 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+// 0 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return add(0, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r00010010.c.hs b/rtree-c/test/expected/add/reduction/r00010010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00010010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00010011.c b/rtree-c/test/expected/add/reduction/r00010011.c
new file mode 100644
index 0000000..fbbff22
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00010011.c
@@ -0,0 +1,16 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return add(0, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r00010011.c.hs b/rtree-c/test/expected/add/reduction/r00010011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00010011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0001010.c b/rtree-c/test/expected/add/reduction/r0001010.c
index 9627ccd..ee2d580 100644
--- a/rtree-c/test/expected/add/reduction/r0001010.c
+++ b/rtree-c/test/expected/add/reduction/r0001010.c
@@ -2,14 +2,13 @@
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 2)
-// 0 remove return statement at ("test/cases/small/add.c": line 6)
-// 1 do without param at ("test/cases/small/add.c": line 6)
-// 0 do without param at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int a, int b)
 {
 }
 int main()
 {
-    return add(0, 23);
 }
diff --git a/rtree-c/test/expected/add/reduction/r0001010.c.hs b/rtree-c/test/expected/add/reduction/r0001010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0001011.c b/rtree-c/test/expected/add/reduction/r0001011.c
index 2df413b..a8719bc 100644
--- a/rtree-c/test/expected/add/reduction/r0001011.c
+++ b/rtree-c/test/expected/add/reduction/r0001011.c
@@ -2,14 +2,13 @@
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 2)
-// 0 remove return statement at ("test/cases/small/add.c": line 6)
-// 1 do without param at ("test/cases/small/add.c": line 6)
-// 1 do without param at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int a, int b)
 {
 }
 int main()
 {
-    return add(0, 0);
 }
diff --git a/rtree-c/test/expected/add/reduction/r0001011.c.hs b/rtree-c/test/expected/add/reduction/r0001011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00011000.c b/rtree-c/test/expected/add/reduction/r00011000.c
new file mode 100644
index 0000000..e36826c
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00011000.c
@@ -0,0 +1,16 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 do without param at ("test/cases/small/add.c": line 6)
+// 0 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return add(10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r00011000.c.hs b/rtree-c/test/expected/add/reduction/r00011000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00011000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00011001.c b/rtree-c/test/expected/add/reduction/r00011001.c
new file mode 100644
index 0000000..665a0d2
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00011001.c
@@ -0,0 +1,16 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 do without param at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return add(10, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r00011001.c.hs b/rtree-c/test/expected/add/reduction/r00011001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00011001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00011010.c b/rtree-c/test/expected/add/reduction/r00011010.c
new file mode 100644
index 0000000..0c8e5b4
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00011010.c
@@ -0,0 +1,16 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+// 0 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return add(0, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r00011010.c.hs b/rtree-c/test/expected/add/reduction/r00011010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00011010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00011011.c b/rtree-c/test/expected/add/reduction/r00011011.c
new file mode 100644
index 0000000..1bcb7b1
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00011011.c
@@ -0,0 +1,16 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return add(0, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r00011011.c.hs b/rtree-c/test/expected/add/reduction/r00011011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00011011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00011.c b/rtree-c/test/expected/add/reduction/r0001110.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r00011.c
rename to rtree-c/test/expected/add/reduction/r0001110.c
index cfbfbc6..a6c596e 100644
--- a/rtree-c/test/expected/add/reduction/r00011.c
+++ b/rtree-c/test/expected/add/reduction/r0001110.c
@@ -2,7 +2,9 @@
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0001110.c.hs b/rtree-c/test/expected/add/reduction/r0001110.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001110.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0001111.c b/rtree-c/test/expected/add/reduction/r0001111.c
new file mode 100644
index 0000000..1112f98
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001111.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001111.c.hs b/rtree-c/test/expected/add/reduction/r0001111.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001111.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r001000.c.hs b/rtree-c/test/expected/add/reduction/r001000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r001001.c.hs b/rtree-c/test/expected/add/reduction/r001001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00101.c b/rtree-c/test/expected/add/reduction/r001010.c
similarity index 84%
rename from rtree-c/test/expected/add/reduction/r00101.c
rename to rtree-c/test/expected/add/reduction/r001010.c
index 0ee958d..ebb9b3a 100644
--- a/rtree-c/test/expected/add/reduction/r00101.c
+++ b/rtree-c/test/expected/add/reduction/r001010.c
@@ -3,6 +3,7 @@
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove return statement at ("test/cases/small/add.c": line 2)
 // 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int a)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001010.c.hs b/rtree-c/test/expected/add/reduction/r001010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r001011.c b/rtree-c/test/expected/add/reduction/r001011.c
new file mode 100644
index 0000000..1498fb3
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001011.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int a)
+{
+    return a;
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r001011.c.hs b/rtree-c/test/expected/add/reduction/r001011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r001100.c b/rtree-c/test/expected/add/reduction/r0011000.c
similarity index 86%
rename from rtree-c/test/expected/add/reduction/r001100.c
rename to rtree-c/test/expected/add/reduction/r0011000.c
index 8b1f243..a2306c0 100644
--- a/rtree-c/test/expected/add/reduction/r001100.c
+++ b/rtree-c/test/expected/add/reduction/r0011000.c
@@ -2,6 +2,7 @@
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 0 remove return statement at ("test/cases/small/add.c": line 6)
 // 0 do without param at ("test/cases/small/add.c": line 6)
 
diff --git a/rtree-c/test/expected/add/reduction/r0011000.c.hs b/rtree-c/test/expected/add/reduction/r0011000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r001101.c b/rtree-c/test/expected/add/reduction/r0011001.c
similarity index 86%
rename from rtree-c/test/expected/add/reduction/r001101.c
rename to rtree-c/test/expected/add/reduction/r0011001.c
index aff561a..cd6a239 100644
--- a/rtree-c/test/expected/add/reduction/r001101.c
+++ b/rtree-c/test/expected/add/reduction/r0011001.c
@@ -2,6 +2,7 @@
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 0 remove return statement at ("test/cases/small/add.c": line 6)
 // 1 do without param at ("test/cases/small/add.c": line 6)
 
diff --git a/rtree-c/test/expected/add/reduction/r0011001.c.hs b/rtree-c/test/expected/add/reduction/r0011001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r00111.c b/rtree-c/test/expected/add/reduction/r0011010.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r00111.c
rename to rtree-c/test/expected/add/reduction/r0011010.c
index 8d2fea1..d45ce34 100644
--- a/rtree-c/test/expected/add/reduction/r00111.c
+++ b/rtree-c/test/expected/add/reduction/r0011010.c
@@ -2,7 +2,9 @@
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int a)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0011010.c.hs b/rtree-c/test/expected/add/reduction/r0011010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0011011.c b/rtree-c/test/expected/add/reduction/r0011011.c
new file mode 100644
index 0000000..e3e49a9
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011011.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r0011011.c.hs b/rtree-c/test/expected/add/reduction/r0011011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0011100.c b/rtree-c/test/expected/add/reduction/r0011100.c
new file mode 100644
index 0000000..d1d7f5b
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011100.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int a)
+{
+}
+int main()
+{
+    return add(10);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0011100.c.hs b/rtree-c/test/expected/add/reduction/r0011100.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011100.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0011101.c b/rtree-c/test/expected/add/reduction/r0011101.c
new file mode 100644
index 0000000..0b2fe43
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011101.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int a)
+{
+}
+int main()
+{
+    return add(0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0011101.c.hs b/rtree-c/test/expected/add/reduction/r0011101.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011101.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0011110.c b/rtree-c/test/expected/add/reduction/r0011110.c
new file mode 100644
index 0000000..426782c
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011110.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r0011110.c.hs b/rtree-c/test/expected/add/reduction/r0011110.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011110.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0011111.c b/rtree-c/test/expected/add/reduction/r0011111.c
new file mode 100644
index 0000000..714ce13
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011111.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 2)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r0011111.c.hs b/rtree-c/test/expected/add/reduction/r0011111.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0011111.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r01000.c b/rtree-c/test/expected/add/reduction/r010000.c
similarity index 84%
rename from rtree-c/test/expected/add/reduction/r01000.c
rename to rtree-c/test/expected/add/reduction/r010000.c
index 2463667..262510c 100644
--- a/rtree-c/test/expected/add/reduction/r01000.c
+++ b/rtree-c/test/expected/add/reduction/r010000.c
@@ -1,6 +1,7 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 0 remove return statement at ("test/cases/small/add.c": line 6)
 // 0 do without param at ("test/cases/small/add.c": line 6)
 
diff --git a/rtree-c/test/expected/add/reduction/r010000.c.hs b/rtree-c/test/expected/add/reduction/r010000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r01001.c b/rtree-c/test/expected/add/reduction/r010001.c
similarity index 84%
rename from rtree-c/test/expected/add/reduction/r01001.c
rename to rtree-c/test/expected/add/reduction/r010001.c
index 5a914f2..4024a9e 100644
--- a/rtree-c/test/expected/add/reduction/r01001.c
+++ b/rtree-c/test/expected/add/reduction/r010001.c
@@ -1,6 +1,7 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 0 remove return statement at ("test/cases/small/add.c": line 6)
 // 1 do without param at ("test/cases/small/add.c": line 6)
 
diff --git a/rtree-c/test/expected/add/reduction/r010001.c.hs b/rtree-c/test/expected/add/reduction/r010001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0101.c b/rtree-c/test/expected/add/reduction/r010010.c
similarity index 68%
rename from rtree-c/test/expected/add/reduction/r0101.c
rename to rtree-c/test/expected/add/reduction/r010010.c
index 49eb1c9..a378b98 100644
--- a/rtree-c/test/expected/add/reduction/r0101.c
+++ b/rtree-c/test/expected/add/reduction/r010010.c
@@ -1,7 +1,9 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add(int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r010010.c.hs b/rtree-c/test/expected/add/reduction/r010010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r010011.c b/rtree-c/test/expected/add/reduction/r010011.c
new file mode 100644
index 0000000..9823c41
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010011.c
@@ -0,0 +1,13 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int b)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r010011.c.hs b/rtree-c/test/expected/add/reduction/r010011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r010100.c b/rtree-c/test/expected/add/reduction/r010100.c
new file mode 100644
index 0000000..73156b4
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010100.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int b)
+{
+}
+int main()
+{
+    return add(23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r010100.c.hs b/rtree-c/test/expected/add/reduction/r010100.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010100.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r010101.c b/rtree-c/test/expected/add/reduction/r010101.c
new file mode 100644
index 0000000..346f93b
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010101.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 do without param at ("test/cases/small/add.c": line 6)
+
+int add(int b)
+{
+}
+int main()
+{
+    return add(0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r010101.c.hs b/rtree-c/test/expected/add/reduction/r010101.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010101.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r010110.c b/rtree-c/test/expected/add/reduction/r010110.c
new file mode 100644
index 0000000..4fa2926
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010110.c
@@ -0,0 +1,13 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int b)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r010110.c.hs b/rtree-c/test/expected/add/reduction/r010110.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010110.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
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 0000000..526c58d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010111.c
@@ -0,0 +1,13 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add(int b)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r010111.c.hs b/rtree-c/test/expected/add/reduction/r010111.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010111.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0110.c b/rtree-c/test/expected/add/reduction/r01100.c
similarity index 82%
rename from rtree-c/test/expected/add/reduction/r0110.c
rename to rtree-c/test/expected/add/reduction/r01100.c
index cff4021..795f55b 100644
--- a/rtree-c/test/expected/add/reduction/r0110.c
+++ b/rtree-c/test/expected/add/reduction/r01100.c
@@ -1,6 +1,7 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 0 remove return statement at ("test/cases/small/add.c": line 6)
 
 int add()
diff --git a/rtree-c/test/expected/add/reduction/r01100.c.hs b/rtree-c/test/expected/add/reduction/r01100.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r01100.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r0111.c b/rtree-c/test/expected/add/reduction/r011010.c
similarity index 68%
rename from rtree-c/test/expected/add/reduction/r0111.c
rename to rtree-c/test/expected/add/reduction/r011010.c
index d62e6f2..dd3af1c 100644
--- a/rtree-c/test/expected/add/reduction/r0111.c
+++ b/rtree-c/test/expected/add/reduction/r011010.c
@@ -1,7 +1,9 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
 // 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int add()
 {
diff --git a/rtree-c/test/expected/add/reduction/r011010.c.hs b/rtree-c/test/expected/add/reduction/r011010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r011010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r011011.c b/rtree-c/test/expected/add/reduction/r011011.c
new file mode 100644
index 0000000..ee11fbd
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r011011.c
@@ -0,0 +1,13 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 0 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r011011.c.hs b/rtree-c/test/expected/add/reduction/r011011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r011011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r01110.c b/rtree-c/test/expected/add/reduction/r01110.c
new file mode 100644
index 0000000..3afb219
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r01110.c
@@ -0,0 +1,13 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 0 remove return statement at ("test/cases/small/add.c": line 6)
+
+int add()
+{
+}
+int main()
+{
+    return add();
+}
diff --git a/rtree-c/test/expected/add/reduction/r01110.c.hs b/rtree-c/test/expected/add/reduction/r01110.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r01110.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r011110.c b/rtree-c/test/expected/add/reduction/r011110.c
new file mode 100644
index 0000000..c9ba2cc
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r011110.c
@@ -0,0 +1,13 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r011110.c.hs b/rtree-c/test/expected/add/reduction/r011110.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r011110.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r011111.c b/rtree-c/test/expected/add/reduction/r011111.c
new file mode 100644
index 0000000..5de8f09
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r011111.c
@@ -0,0 +1,13 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove parameter at ("test/cases/small/add.c": line 1)
+// 1 remove empty compound at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int add()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r011111.c.hs b/rtree-c/test/expected/add/reduction/r011111.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r011111.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r1000.c.hs b/rtree-c/test/expected/add/reduction/r1000.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r1000.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r1001.c.hs b/rtree-c/test/expected/add/reduction/r1001.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r1001.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r1010.c.hs b/rtree-c/test/expected/add/reduction/r1010.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r1010.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r1011.c.hs b/rtree-c/test/expected/add/reduction/r1011.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r1011.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r11.c b/rtree-c/test/expected/add/reduction/r110.c
similarity index 69%
rename from rtree-c/test/expected/add/reduction/r11.c
rename to rtree-c/test/expected/add/reduction/r110.c
index 8ef1eed..ab0b03b 100644
--- a/rtree-c/test/expected/add/reduction/r11.c
+++ b/rtree-c/test/expected/add/reduction/r110.c
@@ -1,5 +1,6 @@
 // 1 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 0 remove empty compound at ("test/cases/small/add.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/add/reduction/r110.c.hs b/rtree-c/test/expected/add/reduction/r110.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r110.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/add/reduction/r111.c b/rtree-c/test/expected/add/reduction/r111.c
new file mode 100644
index 0000000..ae5dc16
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r111.c
@@ -0,0 +1,7 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove return statement at ("test/cases/small/add.c": line 6)
+// 1 remove empty compound at ("test/cases/small/add.c": line 5)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/add/reduction/r111.c.hs b/rtree-c/test/expected/add/reduction/r111.c.hs
new file mode 100644
index 0000000..2535b05
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r111.c.hs
@@ -0,0 +1,88 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "add" 1651297 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        , CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "b" 98 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "a" 97 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "b" 98 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "add" 1651297 () ) ()
+                                )
+                                [ CConst
+                                    ( CIntConst 10 () )
+                                , CConst
+                                    ( CIntConst 23 () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/clang-22382/extract.c b/rtree-c/test/expected/clang-22382/extract.c
index 8651efe..f85e239 100644
--- a/rtree-c/test/expected/clang-22382/extract.c
+++ b/rtree-c/test/expected/clang-22382/extract.c
@@ -1412,6 +1412,8 @@ static struct S0 func_59(uint32_t p_60,
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     safe_unary_minus_func_int8_t_s(0L < safe_add_func_int16_t_s_s(g_35.f3,
                                                                   0x16abL));
+    {
+    }
     safe_sub_func_int8_t_s_s(0x5cL,
                              safe_rshift_func_uint16_t_u_u(0xd7eeL, 14));
     g_158 -= 1;
@@ -1498,6 +1500,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     safe_rshift_func_int8_t_s_u(safe_lshift_func_uint16_t_u_u(g_158,
                                                               12) == 0x70b449b74578e65aLL,
                                 2);
+    {
+    }
     safe_rshift_func_uint16_t_u_u(g_755[5] < (0x70e0L != safe_sub_func_uint32_t_u_u((g_755[7], g_1109),
                                                                                     1uL) || g_1145[0].f2),
                                   2);
@@ -1532,6 +1536,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     l_168 += 1;
     g_86 |= 0xffL;
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
+    {
+    }
     g_251 += 1;
     safe_mul_func_int8_t_s_s(g_388.f3, 7uL);
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
diff --git a/rtree-c/test/expected/clang-22382/reduction/p0.path b/rtree-c/test/expected/clang-22382/reduction/p0.path
index ca29af7..4389dd3 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p0.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p0.path
@@ -2285,6 +2285,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1570)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1571)
 * remove check at ("test/cases/large/clang-22382.c": line 1570)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1570)
@@ -4329,6 +4330,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2245)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2245)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
@@ -4613,6 +4616,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2388)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2388)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2394)
 * do without param at ("test/cases/large/clang-22382.c": line 2394)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2394)
@@ -4708,6 +4713,8 @@
 * reduce to left at ("test/cases/large/clang-22382.c": line 2456)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2456)
 * do without param at ("test/cases/large/clang-22382.c": line 2456)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2463)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2463)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to left at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2474)
diff --git a/rtree-c/test/expected/clang-22382/reduction/p1.path b/rtree-c/test/expected/clang-22382/reduction/p1.path
index 05d92e8..088913a 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p1.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p1.path
@@ -2314,6 +2314,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1570)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1571)
 * remove check at ("test/cases/large/clang-22382.c": line 1570)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1570)
@@ -4358,6 +4359,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2245)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2245)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
@@ -4642,6 +4645,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2388)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2388)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2394)
 * do without param at ("test/cases/large/clang-22382.c": line 2394)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2394)
@@ -4737,6 +4742,8 @@
 * reduce to left at ("test/cases/large/clang-22382.c": line 2456)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2456)
 * do without param at ("test/cases/large/clang-22382.c": line 2456)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2463)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2463)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to left at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2474)
diff --git a/rtree-c/test/expected/clang-22382/reduction/p2.path b/rtree-c/test/expected/clang-22382/reduction/p2.path
index 129643e..1c15867 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p2.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p2.path
@@ -2343,6 +2343,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1570)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1571)
 * remove check at ("test/cases/large/clang-22382.c": line 1570)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1570)
@@ -4387,6 +4388,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2245)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2245)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
@@ -4671,6 +4674,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2388)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2388)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2394)
 * do without param at ("test/cases/large/clang-22382.c": line 2394)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2394)
@@ -4766,6 +4771,8 @@
 * reduce to left at ("test/cases/large/clang-22382.c": line 2456)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2456)
 * do without param at ("test/cases/large/clang-22382.c": line 2456)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2463)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2463)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to left at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2474)
diff --git a/rtree-c/test/expected/clang-22382/reduction/p3.path b/rtree-c/test/expected/clang-22382/reduction/p3.path
index acf96e7..9260fcd 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p3.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p3.path
@@ -2343,6 +2343,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1570)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1571)
 * remove check at ("test/cases/large/clang-22382.c": line 1570)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1570)
@@ -4387,6 +4388,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2245)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2245)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
@@ -4671,6 +4674,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2388)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2388)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2394)
 * do without param at ("test/cases/large/clang-22382.c": line 2394)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2394)
@@ -4766,6 +4771,8 @@
 * reduce to left at ("test/cases/large/clang-22382.c": line 2456)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2456)
 * do without param at ("test/cases/large/clang-22382.c": line 2456)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2463)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2463)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to left at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2474)
diff --git a/rtree-c/test/expected/clang-22382/reduction/p4.path b/rtree-c/test/expected/clang-22382/reduction/p4.path
index cde75b7..03c4e8d 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p4.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p4.path
@@ -2264,6 +2264,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1570)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1571)
 * remove check at ("test/cases/large/clang-22382.c": line 1570)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1570)
@@ -4308,6 +4309,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2245)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2245)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
@@ -4592,6 +4595,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2388)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2388)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2394)
 * do without param at ("test/cases/large/clang-22382.c": line 2394)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2394)
@@ -4687,6 +4692,8 @@
 * reduce to left at ("test/cases/large/clang-22382.c": line 2456)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2456)
 * do without param at ("test/cases/large/clang-22382.c": line 2456)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2463)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2463)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to left at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2474)
diff --git a/rtree-c/test/expected/clang-22382/reduction/p5.path b/rtree-c/test/expected/clang-22382/reduction/p5.path
index 7d0b949..7d44531 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p5.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p5.path
@@ -2033,6 +2033,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1570)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1571)
 * remove check at ("test/cases/large/clang-22382.c": line 1570)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1570)
@@ -4077,6 +4078,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2245)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2245)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
@@ -4361,6 +4364,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2388)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2388)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2394)
 * do without param at ("test/cases/large/clang-22382.c": line 2394)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2394)
@@ -4456,6 +4461,8 @@
 * reduce to left at ("test/cases/large/clang-22382.c": line 2456)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2456)
 * do without param at ("test/cases/large/clang-22382.c": line 2456)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2463)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2463)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to left at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2474)
diff --git a/rtree-c/test/expected/clang-22382/reduction/p6.path b/rtree-c/test/expected/clang-22382/reduction/p6.path
index 7598a7b..c5835a4 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p6.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p6.path
@@ -1540,6 +1540,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1570)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1571)
 * remove check at ("test/cases/large/clang-22382.c": line 1570)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1570)
@@ -3584,6 +3585,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2245)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2245)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
@@ -3868,6 +3871,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2388)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2388)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2394)
 * do without param at ("test/cases/large/clang-22382.c": line 2394)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2394)
@@ -3963,6 +3968,8 @@
 * reduce to left at ("test/cases/large/clang-22382.c": line 2456)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2456)
 * do without param at ("test/cases/large/clang-22382.c": line 2456)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2463)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2463)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to left at ("test/cases/large/clang-22382.c": line 2474)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2474)
diff --git a/rtree-c/test/expected/clang-22382/reduction/p7.path b/rtree-c/test/expected/clang-22382/reduction/p7.path
index 2ac1db7..992be92 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p7.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p7.path
@@ -399,6 +399,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 1295)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1295)
 * do without param at ("test/cases/large/clang-22382.c": line 1295)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1300)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 1300)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 1304)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1304)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1304)
@@ -580,6 +582,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1435)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1435)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1435)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1436)
 * remove check at ("test/cases/large/clang-22382.c": line 1435)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1435)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1435)
@@ -704,6 +707,7 @@
 * remove initializer at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to left at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to right at ("test/cases/large/clang-22382.c": line 1570)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1571)
 * remove check at ("test/cases/large/clang-22382.c": line 1570)
 * remove iterator at ("test/cases/large/clang-22382.c": line 1570)
 * reduce to operant at ("test/cases/large/clang-22382.c": line 1570)
@@ -1667,6 +1671,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 1905)
 * do without param at ("test/cases/large/clang-22382.c": line 1905)
 * do without param at ("test/cases/large/clang-22382.c": line 1905)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 1906)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 1906)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 1910)
 * do without param at ("test/cases/large/clang-22382.c": line 1910)
 * do without param at ("test/cases/large/clang-22382.c": line 1910)
@@ -2077,6 +2083,8 @@
 * replace by zero at ("test/cases/large/clang-22382.c": line 2189)
 * do without param at ("test/cases/large/clang-22382.c": line 2189)
 * expand compound statment at ("test/cases/large/clang-22382.c": line 2165)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2194)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2194)
 * inline variable l_1437 at ("test/cases/large/clang-22382.c": line 2204)
 * remove return statement at ("test/cases/large/clang-22382.c": line 2205)
 * expand compound statment at ("test/cases/large/clang-22382.c": line 2203)
@@ -2118,6 +2126,8 @@
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
 * do without param at ("test/cases/large/clang-22382.c": line 2238)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2245)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2245)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
 * do without param at ("test/cases/large/clang-22382.c": line 2255)
@@ -2359,6 +2369,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
 * do without param at ("test/cases/large/clang-22382.c": line 2381)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2388)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2388)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2394)
 * do without param at ("test/cases/large/clang-22382.c": line 2394)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2394)
@@ -2449,6 +2461,8 @@
 * reduce to left at ("test/cases/large/clang-22382.c": line 2456)
 * reduce to right at ("test/cases/large/clang-22382.c": line 2456)
 * do without param at ("test/cases/large/clang-22382.c": line 2456)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2463)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2463)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2475)
 * do without param at ("test/cases/large/clang-22382.c": line 2475)
 * do without param at ("test/cases/large/clang-22382.c": line 2475)
@@ -2508,6 +2522,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2526)
 * do without param at ("test/cases/large/clang-22382.c": line 2526)
 * do without param at ("test/cases/large/clang-22382.c": line 2526)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2529)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2529)
 * expand compound statment at ("test/cases/large/clang-22382.c": line 2502)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2536)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2539)
@@ -2606,6 +2622,8 @@
 * do without param at ("test/cases/large/clang-22382.c": line 2647)
 * do without param at ("test/cases/large/clang-22382.c": line 2647)
 * replace by zero at ("test/cases/large/clang-22382.c": line 2647)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2651)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2651)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2655)
 * do without param at ("test/cases/large/clang-22382.c": line 2655)
 * do without param at ("test/cases/large/clang-22382.c": line 2655)
@@ -2791,6 +2809,9 @@
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2825)
 * do without param at ("test/cases/large/clang-22382.c": line 2825)
 * do without param at ("test/cases/large/clang-22382.c": line 2825)
+* remove empty compound at ("test/cases/large/clang-22382.c": line 2831)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2831)
+* expand compound statment at ("test/cases/large/clang-22382.c": line 2828)
 * remove expr statement at ("test/cases/large/clang-22382.c": line 2837)
 * do without param at ("test/cases/large/clang-22382.c": line 2837)
 * do without param at ("test/cases/large/clang-22382.c": line 2837)
diff --git a/rtree-c/test/expected/clang-22382/reduction/p9.path b/rtree-c/test/expected/clang-22382/reduction/p9.path
index f6ceb31..08dd519 100644
--- a/rtree-c/test/expected/clang-22382/reduction/p9.path
+++ b/rtree-c/test/expected/clang-22382/reduction/p9.path
@@ -259,37 +259,45 @@
 1 remove condition at ("test/cases/large/clang-22382.c": line 2898)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2898)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2898)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2896)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2907)
 1 remove condition at ("test/cases/large/clang-22382.c": line 2908)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2908)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2908)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2906)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2912)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2915)
 1 remove condition at ("test/cases/large/clang-22382.c": line 2916)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2916)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2916)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2914)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2918)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2925)
 1 remove condition at ("test/cases/large/clang-22382.c": line 2926)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2926)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2926)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2924)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2934)
 1 remove condition at ("test/cases/large/clang-22382.c": line 2935)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2935)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2935)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2933)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2940)
 1 remove condition at ("test/cases/large/clang-22382.c": line 2941)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2941)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2941)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2939)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2945)
 1 remove condition at ("test/cases/large/clang-22382.c": line 2946)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2946)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2946)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2944)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2948)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2951)
 1 remove condition at ("test/cases/large/clang-22382.c": line 2952)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2952)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2952)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2950)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2954)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2955)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2958)
@@ -299,6 +307,7 @@
 1 remove condition at ("test/cases/large/clang-22382.c": line 2962)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2962)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2962)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2957)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2964)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2965)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2966)
@@ -306,10 +315,12 @@
 1 remove condition at ("test/cases/large/clang-22382.c": line 2972)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2972)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2972)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2970)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2981)
 1 remove condition at ("test/cases/large/clang-22382.c": line 2982)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2982)
 1 expand compound statment at ("test/cases/large/clang-22382.c": line 2982)
+1 remove empty compound at ("test/cases/large/clang-22382.c": line 2980)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2986)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2987)
 1 remove expr statement at ("test/cases/large/clang-22382.c": line 2988)
diff --git a/rtree-c/test/expected/clang-22382/reduction/x0.c b/rtree-c/test/expected/clang-22382/reduction/x0.c
index db30d61..a8c3395 100644
--- a/rtree-c/test/expected/clang-22382/reduction/x0.c
+++ b/rtree-c/test/expected/clang-22382/reduction/x0.c
@@ -1407,6 +1407,8 @@ static struct S0 func_59(uint32_t p_60,
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     safe_unary_minus_func_int8_t_s(0L < safe_add_func_int16_t_s_s(g_35.f3,
                                                                   0x16abL));
+    {
+    }
     safe_sub_func_int8_t_s_s(0x5cL,
                              safe_rshift_func_uint16_t_u_u(0xd7eeL, 14));
     g_158 -= 1;
@@ -1493,6 +1495,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     safe_rshift_func_int8_t_s_u(safe_lshift_func_uint16_t_u_u(g_158,
                                                               12) == 0x70b449b74578e65aLL,
                                 2);
+    {
+    }
     safe_rshift_func_uint16_t_u_u(g_755[5] < (0x70e0L != safe_sub_func_uint32_t_u_u((g_755[7], g_1109),
                                                                                     1uL) || g_1145[0].f2),
                                   2);
@@ -1527,6 +1531,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     l_168 += 1;
     g_86 |= 0xffL;
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
+    {
+    }
     g_251 += 1;
     safe_mul_func_int8_t_s_s(g_388.f3, 7uL);
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
diff --git a/rtree-c/test/expected/clang-22382/reduction/x1.c b/rtree-c/test/expected/clang-22382/reduction/x1.c
index 736d9f8..446acff 100644
--- a/rtree-c/test/expected/clang-22382/reduction/x1.c
+++ b/rtree-c/test/expected/clang-22382/reduction/x1.c
@@ -1406,6 +1406,8 @@ static struct S0 func_59(uint32_t p_60,
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     safe_unary_minus_func_int8_t_s(0L < safe_add_func_int16_t_s_s(g_35.f3,
                                                                   0x16abL));
+    {
+    }
     safe_sub_func_int8_t_s_s(0x5cL,
                              safe_rshift_func_uint16_t_u_u(0xd7eeL, 14));
     g_158 -= 1;
@@ -1492,6 +1494,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     safe_rshift_func_int8_t_s_u(safe_lshift_func_uint16_t_u_u(g_158,
                                                               12) == 0x70b449b74578e65aLL,
                                 2);
+    {
+    }
     safe_rshift_func_uint16_t_u_u(g_755[5] < (0x70e0L != safe_sub_func_uint32_t_u_u((g_755[7], g_1109),
                                                                                     1uL) || g_1145[0].f2),
                                   2);
@@ -1526,6 +1530,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     l_168 += 1;
     g_86 |= 0xffL;
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
+    {
+    }
     g_251 += 1;
     safe_mul_func_int8_t_s_s(g_388.f3, 7uL);
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
diff --git a/rtree-c/test/expected/clang-22382/reduction/x2.c b/rtree-c/test/expected/clang-22382/reduction/x2.c
index b2534d4..3a4eef7 100644
--- a/rtree-c/test/expected/clang-22382/reduction/x2.c
+++ b/rtree-c/test/expected/clang-22382/reduction/x2.c
@@ -1404,6 +1404,8 @@ static struct S0 func_59(uint32_t p_60,
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     safe_unary_minus_func_int8_t_s(0L < safe_add_func_int16_t_s_s(g_35.f3,
                                                                   0x16abL));
+    {
+    }
     safe_sub_func_int8_t_s_s(0x5cL,
                              safe_rshift_func_uint16_t_u_u(0xd7eeL, 14));
     g_158 -= 1;
@@ -1490,6 +1492,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     safe_rshift_func_int8_t_s_u(safe_lshift_func_uint16_t_u_u(g_158,
                                                               12) == 0x70b449b74578e65aLL,
                                 2);
+    {
+    }
     safe_rshift_func_uint16_t_u_u(g_755[5] < (0x70e0L != safe_sub_func_uint32_t_u_u((g_755[7], g_1109),
                                                                                     1uL) || g_1145[0].f2),
                                   2);
@@ -1524,6 +1528,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     l_168 += 1;
     g_86 |= 0xffL;
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
+    {
+    }
     g_251 += 1;
     safe_mul_func_int8_t_s_s(g_388.f3, 7uL);
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
diff --git a/rtree-c/test/expected/clang-22382/reduction/x3.c b/rtree-c/test/expected/clang-22382/reduction/x3.c
index c318b9a..9e2d896 100644
--- a/rtree-c/test/expected/clang-22382/reduction/x3.c
+++ b/rtree-c/test/expected/clang-22382/reduction/x3.c
@@ -1401,6 +1401,8 @@ static struct S0 func_59(uint32_t p_60,
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     safe_unary_minus_func_int8_t_s(0L < safe_add_func_int16_t_s_s(g_35.f3,
                                                                   0x16abL));
+    {
+    }
     safe_sub_func_int8_t_s_s(0x5cL,
                              safe_rshift_func_uint16_t_u_u(0xd7eeL, 14));
     g_158 -= 1;
@@ -1487,6 +1489,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     safe_rshift_func_int8_t_s_u(safe_lshift_func_uint16_t_u_u(g_158,
                                                               12) == 0x70b449b74578e65aLL,
                                 2);
+    {
+    }
     safe_rshift_func_uint16_t_u_u(g_755[5] < (0x70e0L != safe_sub_func_uint32_t_u_u((g_755[7], g_1109),
                                                                                     1uL) || g_1145[0].f2),
                                   2);
@@ -1521,6 +1525,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     l_168 += 1;
     g_86 |= 0xffL;
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
+    {
+    }
     g_251 += 1;
     safe_mul_func_int8_t_s_s(g_388.f3, 7uL);
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
diff --git a/rtree-c/test/expected/clang-22382/reduction/x4.c b/rtree-c/test/expected/clang-22382/reduction/x4.c
index ee2a945..1d8b66a 100644
--- a/rtree-c/test/expected/clang-22382/reduction/x4.c
+++ b/rtree-c/test/expected/clang-22382/reduction/x4.c
@@ -1331,6 +1331,8 @@ static struct S0 func_59(uint32_t p_60,
     int i, j;
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     0L < safe_add_func_int16_t_s_s(g_35.f3, 0x16abL);
+    {
+    }
     (0x5cL, safe_rshift_func_uint16_t_u_u(0xd7eeL, 14));
     g_158 -= 1;
     safe_lshift_func_uint16_t_u_s(safe_mul_func_uint8_t_u_u(1uL,
@@ -1411,6 +1413,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     safe_rshift_func_int8_t_s_u(safe_lshift_func_uint16_t_u_u(g_158,
                                                               12) == 0x70b449b74578e65aLL,
                                 2);
+    {
+    }
     safe_rshift_func_uint16_t_u_u(g_755[5] < (0x70e0L != safe_sub_func_uint32_t_u_u((g_755[7], g_1109),
                                                                                     1uL) || g_1145[0].f2),
                                   2);
@@ -1442,6 +1446,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     l_168 += 1;
     g_86 |= 0xffL;
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
+    {
+    }
     g_251 += 1;
     (g_388.f3, 7uL);
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
diff --git a/rtree-c/test/expected/clang-22382/reduction/x5.c b/rtree-c/test/expected/clang-22382/reduction/x5.c
index 4449a82..e26b3aa 100644
--- a/rtree-c/test/expected/clang-22382/reduction/x5.c
+++ b/rtree-c/test/expected/clang-22382/reduction/x5.c
@@ -1194,6 +1194,8 @@ static struct S0 func_59(uint32_t p_60,
     int i, j;
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     0L < (g_35.f3, 0x16abL);
+    {
+    }
     (0x5cL, safe_rshift_func_uint16_t_u_u(0xd7eeL, 14));
     g_158 -= 1;
     safe_lshift_func_uint16_t_u_s(safe_mul_func_uint8_t_u_u(1uL,
@@ -1262,6 +1264,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     safe_add_func_uint8_t_u_u(g_85, 1);
     (safe_lshift_func_uint16_t_u_u(g_158,
                                    12) == 0x70b449b74578e65aLL, 2);
+    {
+    }
     safe_rshift_func_uint16_t_u_u(g_755[5] < (0x70e0L != safe_sub_func_uint32_t_u_u((g_755[7], g_1109),
                                                                                     1uL) || g_1145[0].f2),
                                   2);
@@ -1292,6 +1296,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     l_168 += 1;
     g_86 |= 0xffL;
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
+    {
+    }
     g_251 += 1;
     (g_388.f3, 7uL);
     safe_mod_func_int64_t_s_s(252uL ^ g_251, 0x54eab2ce98b21cf8LL);
diff --git a/rtree-c/test/expected/clang-22382/reduction/x6.c b/rtree-c/test/expected/clang-22382/reduction/x6.c
index 884f4a9..7faf962 100644
--- a/rtree-c/test/expected/clang-22382/reduction/x6.c
+++ b/rtree-c/test/expected/clang-22382/reduction/x6.c
@@ -978,6 +978,8 @@ static struct S0 func_59(uint32_t p_60,
     int i, j;
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     0L < (g_35.f3, 0x16abL);
+    {
+    }
     (0x5cL, safe_rshift_func_uint16_t_u_u(0xd7eeL, 14));
     g_158 -= 1;
     safe_lshift_func_uint16_t_u_s((1uL, g_420[2][1] < p_64.f3),
@@ -1039,6 +1041,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     (g_85, 1);
     (safe_lshift_func_uint16_t_u_u(g_158,
                                    12) == 0x70b449b74578e65aLL, 2);
+    {
+    }
     safe_rshift_func_uint16_t_u_u(g_755[5] < (0x70e0L != safe_sub_func_uint32_t_u_u((g_755[7], g_1109),
                                                                                     1uL) || g_1145[0].f2),
                                   2);
@@ -1068,6 +1072,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     l_168 += 1;
     g_86 |= 0xffL;
     (252uL ^ g_251, 0x54eab2ce98b21cf8LL);
+    {
+    }
     g_251 += 1;
     (g_388.f3, 7uL);
     (252uL ^ g_251, 0x54eab2ce98b21cf8LL);
diff --git a/rtree-c/test/expected/clang-22382/reduction/x7.c b/rtree-c/test/expected/clang-22382/reduction/x7.c
index 2db04dd..01f5522 100644
--- a/rtree-c/test/expected/clang-22382/reduction/x7.c
+++ b/rtree-c/test/expected/clang-22382/reduction/x7.c
@@ -123,6 +123,8 @@ static int64_t func_1()
             g_506 &= 0x387e3cdf10492640LL;
         }
         (-4L, 5);
+        {
+        }
         g_1103 += 1;
         (-4L, 5);
         ((0x6d2bL, 12), g_1032[4]);
@@ -465,6 +467,8 @@ static uint16_t func_51(int16_t p_52,
     }
     (g_420[2][1], 255uL);
     ("index = [%d][%d][%d]\n", i, j, k);
+    {
+    }
     (65527uL, 0xbd2ee514L);
     for (; 0L < 6;)
     {
@@ -608,6 +612,8 @@ static uint16_t func_51(int16_t p_52,
                                 (~(l_1240.f0 < l_1362) && g_390, g_421[3][7][1]),
                                 l_1427), 4294967295uL), p_54);
         }
+        {
+        }
         {
             uint32_t l_1437 = 0xa9a030fbL;
             return l_1437;
@@ -638,6 +644,8 @@ static struct S0 func_59(uint32_t p_60,
     int i, j;
     g_1109 ^= 0xface4f9578fc59a3LL <= 0x61490d3a8ca6555aLL;
     0L < 0x16abL;
+    {
+    }
     (0x5cL, (0xd7eeL, 14));
     ((1uL, g_420[2][1] < p_64.f3), p_64.f0);
     (0L, 1);
@@ -692,6 +700,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     ("index = [%d][%d][%d]\n", i, j, k);
     (0x89ab98cfL, 1);
     ((0L, 12) == 0x70b449b74578e65aLL, 2);
+    {
+    }
     (g_755[5] < (0x70e0L != ((g_755[7], g_1109), 1uL) || g_1145[0].f2), 2);
     (1uL, 0x5e27L);
     for (j = 0; j < 3; j++)
@@ -716,6 +726,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
     (0xbeL, 253uL);
     l_168 += 1;
     (252uL ^ 0xb89a725eL, 0x54eab2ce98b21cf8LL);
+    {
+    }
     (g_388.f3, 7uL);
     (252uL ^ 0xb89a725eL, 0x54eab2ce98b21cf8LL);
     (l_168, 7);
@@ -734,6 +746,8 @@ static int32_t func_66(uint16_t p_67, struct S0 p_68)
         (0xbad58878L < 7uL != g_594, 4);
         (0x720fL == 0x14d4L, 0x1e7b790c5a96d6b6LL);
         ("index = [%d][%d][%d]\n", i, j, k);
+        {
+        }
     }
     func_78(0);
     (9uL, ((p_68.f2 <= 0x35c9L, l_230), 65534uL));
@@ -772,6 +786,8 @@ static int32_t func_71(uint8_t p_72, uint32_t p_73, uint32_t p_74)
     g_506 <= (g_388.f1 < g_420[1][5]);
     g_388.f1 -= 1;
     ((0x6d2bL, 12), g_1032[4]);
+    {
+    }
     (0x1823L, 11);
     ((g_388.f0, 0xd95d3b69L), (g_1032[4], 0x46L));
     (9uL, 1);
@@ -830,6 +846,10 @@ static uint8_t func_78(uint32_t p_79)
     (func_78(0), 0x89ab98cfL);
     (g_1756[0][0][6] || 0x96ae7fbL, 13);
     (0xbd2ee514L, 0);
+    {
+        {
+        }
+    }
     (8L, 0x9ed3L);
     {
         ((g_388.f0, 0xd95d3b69L), (g_1032[4], 0x46L));
diff --git a/rtree-c/test/expected/clang-23353/reduction/p0.path b/rtree-c/test/expected/clang-23353/reduction/p0.path
index 31e2f16..c43f922 100644
--- a/rtree-c/test/expected/clang-23353/reduction/p0.path
+++ b/rtree-c/test/expected/clang-23353/reduction/p0.path
@@ -495,6 +495,7 @@
 * remove parameter at ("test/cases/large/clang-23353.c": line 1250)
 * remove parameter at ("test/cases/large/clang-23353.c": line 1250)
 * remove variable func_49 at ("test/cases/large/clang-23353.c": line 1250)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 13)
 * remove static at ("test/cases/large/clang-23353.c": line 14)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 22)
 * do without param at ("test/cases/large/clang-23353.c": line 22)
diff --git a/rtree-c/test/expected/clang-23353/reduction/p1.path b/rtree-c/test/expected/clang-23353/reduction/p1.path
index ea4ad26..7582f88 100644
--- a/rtree-c/test/expected/clang-23353/reduction/p1.path
+++ b/rtree-c/test/expected/clang-23353/reduction/p1.path
@@ -495,6 +495,7 @@
 * remove parameter at ("test/cases/large/clang-23353.c": line 1250)
 * remove parameter at ("test/cases/large/clang-23353.c": line 1250)
 * remove variable func_49 at ("test/cases/large/clang-23353.c": line 1250)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 13)
 * remove static at ("test/cases/large/clang-23353.c": line 14)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 22)
 * do without param at ("test/cases/large/clang-23353.c": line 22)
diff --git a/rtree-c/test/expected/clang-23353/reduction/p10.path b/rtree-c/test/expected/clang-23353/reduction/p10.path
index 0c270ba..54cbdd1 100644
--- a/rtree-c/test/expected/clang-23353/reduction/p10.path
+++ b/rtree-c/test/expected/clang-23353/reduction/p10.path
@@ -363,6 +363,7 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3812)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3813)
 1 remove condition at ("test/cases/large/clang-23353.c": line 3814)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3815)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3814)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3821)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3822)
@@ -382,6 +383,7 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3836)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3837)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3838)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3840)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3839)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3846)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3847)
@@ -395,6 +397,7 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3855)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3856)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3857)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3859)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3858)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3865)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3866)
@@ -415,6 +418,7 @@
 1 inline variable l_1353 at ("test/cases/large/clang-23353.c": line 3882)
 1 inline variable l_1364 at ("test/cases/large/clang-23353.c": line 3883)
 1 inline variable l_1403 at ("test/cases/large/clang-23353.c": line 3884)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3875)
 1 remove check at ("test/cases/large/clang-23353.c": line 3874)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3871)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3890)
@@ -439,6 +443,7 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3909)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3910)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3911)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3913)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3912)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3919)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3920)
@@ -446,6 +451,8 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3922)
 1 remove condition at ("test/cases/large/clang-23353.c": line 3923)
 1 inline variable l_817 at ("test/cases/large/clang-23353.c": line 3927)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3926)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3924)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3923)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3934)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3935)
@@ -471,6 +478,8 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3955)
 1 remove variable l_124 at ("test/cases/large/clang-23353.c": line 3960)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3963)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3959)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3957)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3956)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3970)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3971)
@@ -497,6 +506,8 @@
 1 remove variable l_4144 at ("test/cases/large/clang-23353.c": line 3992)
 1 remove declaration at ("test/cases/large/clang-23353.c": line 3992)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3995)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3989)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3987)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3986)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 4000)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 4001)
diff --git a/rtree-c/test/expected/clang-23353/reduction/p7.path b/rtree-c/test/expected/clang-23353/reduction/p7.path
index 3c918e0..6d90f6f 100644
--- a/rtree-c/test/expected/clang-23353/reduction/p7.path
+++ b/rtree-c/test/expected/clang-23353/reduction/p7.path
@@ -5440,6 +5440,7 @@
 * reduce to operant at ("test/cases/large/clang-23353.c": line 3138)
 * remove expression at ("test/cases/large/clang-23353.c": line 3138)
 * remove return statement at ("test/cases/large/clang-23353.c": line 3144)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 3139)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 3148)
 * do without param at ("test/cases/large/clang-23353.c": line 3148)
 * do without param at ("test/cases/large/clang-23353.c": line 3148)
@@ -7151,6 +7152,7 @@
 * do without param at ("test/cases/large/clang-23353.c": line 3813)
 * remove condition at ("test/cases/large/clang-23353.c": line 3814)
 * reduce to operant at ("test/cases/large/clang-23353.c": line 3814)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 3815)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 3821)
 * do without param at ("test/cases/large/clang-23353.c": line 3821)
 * do without param at ("test/cases/large/clang-23353.c": line 3821)
@@ -7437,6 +7439,7 @@
 * reduce to operant at ("test/cases/large/clang-23353.c": line 3912)
 * reduce to operant at ("test/cases/large/clang-23353.c": line 3912)
 * reduce to operant at ("test/cases/large/clang-23353.c": line 3912)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 3913)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 3919)
 * do without param at ("test/cases/large/clang-23353.c": line 3919)
 * do without param at ("test/cases/large/clang-23353.c": line 3919)
diff --git a/rtree-c/test/expected/clang-23353/reduction/p8.path b/rtree-c/test/expected/clang-23353/reduction/p8.path
index dde2df6..3f90409 100644
--- a/rtree-c/test/expected/clang-23353/reduction/p8.path
+++ b/rtree-c/test/expected/clang-23353/reduction/p8.path
@@ -3566,6 +3566,8 @@
 * reduce to operant at ("test/cases/large/clang-23353.c": line 2728)
 * remove iterator at ("test/cases/large/clang-23353.c": line 2728)
 * reduce to operant at ("test/cases/large/clang-23353.c": line 2728)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 2741)
+* expand compound statment at ("test/cases/large/clang-23353.c": line 2741)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 2746)
 * reduce to left at ("test/cases/large/clang-23353.c": line 2746)
 * reduce to right at ("test/cases/large/clang-23353.c": line 2746)
@@ -4833,6 +4835,7 @@
 * reduce to operant at ("test/cases/large/clang-23353.c": line 3138)
 * remove expression at ("test/cases/large/clang-23353.c": line 3138)
 * remove return statement at ("test/cases/large/clang-23353.c": line 3144)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 3139)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 3148)
 * do without param at ("test/cases/large/clang-23353.c": line 3148)
 * do without param at ("test/cases/large/clang-23353.c": line 3148)
@@ -6500,6 +6503,7 @@
 * do without param at ("test/cases/large/clang-23353.c": line 3813)
 * remove condition at ("test/cases/large/clang-23353.c": line 3814)
 * reduce to operant at ("test/cases/large/clang-23353.c": line 3814)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 3815)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 3821)
 * do without param at ("test/cases/large/clang-23353.c": line 3821)
 * do without param at ("test/cases/large/clang-23353.c": line 3821)
@@ -6595,6 +6599,7 @@
 * remove expr statement at ("test/cases/large/clang-23353.c": line 3857)
 * do without param at ("test/cases/large/clang-23353.c": line 3857)
 * do without param at ("test/cases/large/clang-23353.c": line 3857)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 3859)
 * expand compound statment at ("test/cases/large/clang-23353.c": line 3858)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 3865)
 * do without param at ("test/cases/large/clang-23353.c": line 3865)
@@ -6703,6 +6708,7 @@
 * do without param at ("test/cases/large/clang-23353.c": line 3911)
 * do without param at ("test/cases/large/clang-23353.c": line 3911)
 * do without param at ("test/cases/large/clang-23353.c": line 3911)
+* remove empty compound at ("test/cases/large/clang-23353.c": line 3913)
 * expand compound statment at ("test/cases/large/clang-23353.c": line 3912)
 * remove expr statement at ("test/cases/large/clang-23353.c": line 3919)
 * do without param at ("test/cases/large/clang-23353.c": line 3919)
diff --git a/rtree-c/test/expected/clang-23353/reduction/p9.path b/rtree-c/test/expected/clang-23353/reduction/p9.path
index a52eaae..6ea0d58 100644
--- a/rtree-c/test/expected/clang-23353/reduction/p9.path
+++ b/rtree-c/test/expected/clang-23353/reduction/p9.path
@@ -363,6 +363,7 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3812)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3813)
 1 remove condition at ("test/cases/large/clang-23353.c": line 3814)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3815)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3814)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3821)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3822)
@@ -382,6 +383,7 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3836)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3837)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3838)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3840)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3839)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3846)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3847)
@@ -395,6 +397,7 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3855)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3856)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3857)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3859)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3858)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3865)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3866)
@@ -415,6 +418,7 @@
 1 inline variable l_1353 at ("test/cases/large/clang-23353.c": line 3882)
 1 inline variable l_1364 at ("test/cases/large/clang-23353.c": line 3883)
 1 inline variable l_1403 at ("test/cases/large/clang-23353.c": line 3884)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3875)
 1 remove check at ("test/cases/large/clang-23353.c": line 3874)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3871)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3890)
@@ -439,6 +443,7 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3909)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3910)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3911)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3913)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3912)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3919)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3920)
@@ -446,6 +451,8 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3922)
 1 remove condition at ("test/cases/large/clang-23353.c": line 3923)
 1 inline variable l_817 at ("test/cases/large/clang-23353.c": line 3927)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3926)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3924)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3923)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3934)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3935)
@@ -471,6 +478,8 @@
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3955)
 1 remove variable l_124 at ("test/cases/large/clang-23353.c": line 3960)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3963)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3959)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3957)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3956)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3970)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3971)
@@ -497,18 +506,45 @@
 1 remove variable l_4144 at ("test/cases/large/clang-23353.c": line 3992)
 1 remove declaration at ("test/cases/large/clang-23353.c": line 3992)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 3995)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3989)
+1 remove empty compound at ("test/cases/large/clang-23353.c": line 3987)
 1 expand compound statment at ("test/cases/large/clang-23353.c": line 3986)
 1 remove expr statement at ("test/cases/large/clang-23353.c": line 4000)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4001)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4002)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4003)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4004)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4005)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4006)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4007)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4008)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4009)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4010)
-1 remove expr statement at ("test/cases/large/clang-23353.c": line 4011)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4001)
+* do without param at ("test/cases/large/clang-23353.c": line 4001)
+* do without param at ("test/cases/large/clang-23353.c": line 4001)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4002)
+* do without param at ("test/cases/large/clang-23353.c": line 4002)
+* do without param at ("test/cases/large/clang-23353.c": line 4002)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4003)
+* do without param at ("test/cases/large/clang-23353.c": line 4003)
+* do without param at ("test/cases/large/clang-23353.c": line 4003)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4004)
+* do without param at ("test/cases/large/clang-23353.c": line 4004)
+* do without param at ("test/cases/large/clang-23353.c": line 4004)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4005)
+* do without param at ("test/cases/large/clang-23353.c": line 4005)
+* do without param at ("test/cases/large/clang-23353.c": line 4005)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4006)
+* do without param at ("test/cases/large/clang-23353.c": line 4006)
+* do without param at ("test/cases/large/clang-23353.c": line 4006)
+* do without param at ("test/cases/large/clang-23353.c": line 4006)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4007)
+* do without param at ("test/cases/large/clang-23353.c": line 4007)
+* do without param at ("test/cases/large/clang-23353.c": line 4007)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4008)
+* do without param at ("test/cases/large/clang-23353.c": line 4008)
+* do without param at ("test/cases/large/clang-23353.c": line 4008)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4009)
+* do without param at ("test/cases/large/clang-23353.c": line 4009)
+* do without param at ("test/cases/large/clang-23353.c": line 4009)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4010)
+* do without param at ("test/cases/large/clang-23353.c": line 4010)
+* do without param at ("test/cases/large/clang-23353.c": line 4010)
+* remove expr statement at ("test/cases/large/clang-23353.c": line 4011)
+* do without param at ("test/cases/large/clang-23353.c": line 4011)
+* reduce to left at ("test/cases/large/clang-23353.c": line 4011)
+* reduce to right at ("test/cases/large/clang-23353.c": line 4011)
+* do without param at ("test/cases/large/clang-23353.c": line 4011)
 * remove return statement at ("test/cases/large/clang-23353.c": line 4012)
 
diff --git a/rtree-c/test/expected/clang-23353/reduction/x7.c b/rtree-c/test/expected/clang-23353/reduction/x7.c
index 0137a4f..046ee09 100644
--- a/rtree-c/test/expected/clang-23353/reduction/x7.c
+++ b/rtree-c/test/expected/clang-23353/reduction/x7.c
@@ -2560,7 +2560,9 @@ int main(void)
     (g_803.f2, "g_803.f2", print_hash_value);
     (g_803.f3, "g_803.f3", print_hash_value);
     (g_803.f4, "g_803.f4", print_hash_value);
-    0xe07f0936a74b4fbfLL < -2270085556831825985;
+    if (0xe07f0936a74b4fbfLL < -2270085556831825985)
+    {
+    }
     (g_803.f5, "g_803.f5", print_hash_value);
     (g_804.f0, "g_804.f0", print_hash_value);
     (g_804.f1, "g_804.f1", print_hash_value);
@@ -2642,7 +2644,9 @@ int main(void)
     (g_2213.f2, "g_2213.f2", print_hash_value);
     (g_2213.f3, "g_2213.f3", print_hash_value);
     (g_2243, "g_2243", print_hash_value);
-    g_2976 != 0 && *g_2976 != 0 && * (*g_2976) != 0 && * (*g_2976) < 0;
+    if (g_2976 != 0 && *g_2976 != 0 && * (*g_2976) != 0 && * (*g_2976) < 0)
+    {
+    }
     (g_2309, "g_2309", print_hash_value);
     (g_2321.f0, "g_2321.f0", print_hash_value);
     (g_2321.f1, "g_2321.f1", print_hash_value);
diff --git a/rtree-c/test/expected/clang-23353/reduction/x8.c b/rtree-c/test/expected/clang-23353/reduction/x8.c
index 3af3148..80c2650 100644
--- a/rtree-c/test/expected/clang-23353/reduction/x8.c
+++ b/rtree-c/test/expected/clang-23353/reduction/x8.c
@@ -1486,6 +1486,8 @@ static const uint8_t func_43(uint64_t p_44,
                 int32_t l_1364 = 1L;
                 int32_t l_1403 = 1L;
             }
+            {
+            }
             l_1440 = l_1439;
             0 ? (void) 0 : ("l_1440 == &g_804", "t.c", 1622, __PRETTY_FUNCTION__);
             for (; 0xccL < 42;)
@@ -2495,7 +2497,9 @@ int main(void)
     ("g_803.f2", print_hash_value);
     ("g_803.f3", print_hash_value);
     ("g_803.f4", print_hash_value);
-    0xe07f0936a74b4fbfLL < -2270085556831825985;
+    if (0xe07f0936a74b4fbfLL < -2270085556831825985)
+    {
+    }
     ("g_803.f5", print_hash_value);
     ("g_804.f0", print_hash_value);
     ("g_804.f1", print_hash_value);
diff --git a/rtree-c/test/expected/clang-23353/reduction/x9.c b/rtree-c/test/expected/clang-23353/reduction/x9.c
index ac1e277..ae3fc4b 100644
--- a/rtree-c/test/expected/clang-23353/reduction/x9.c
+++ b/rtree-c/test/expected/clang-23353/reduction/x9.c
@@ -13,5 +13,16 @@ int main(void)
     {
     }
     ;
+    ("g_4141.f5", 0);
+    ("g_4181.f0", 0);
+    ("g_4181.f1", 0);
+    ("g_4181.f2", 0);
+    ("g_4181.f3", 0);
+    (65532uL, "g_4582", 0);
+    ("g_4585.f0", 0);
+    ("g_4585.f1", 0);
+    ("g_4585.f2", 0);
+    ("g_4585.f3", 0);
+    (0xffffffffuL ^ 0xffffffffuL, 0);
     return 0;
 }
diff --git a/rtree-c/test/expected/clang-26760/reduction/p9.path b/rtree-c/test/expected/clang-26760/reduction/p9.path
index f6f6c28..5d2a8e7 100644
--- a/rtree-c/test/expected/clang-26760/reduction/p9.path
+++ b/rtree-c/test/expected/clang-26760/reduction/p9.path
@@ -261,12 +261,14 @@
 1 remove condition at ("test/cases/large/clang-26760.c": line 13379)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13380)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13379)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13377)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13382)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13383)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13386)
 1 remove condition at ("test/cases/large/clang-26760.c": line 13387)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13388)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13387)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13385)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13390)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13391)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13392)
@@ -276,6 +278,7 @@
 1 remove condition at ("test/cases/large/clang-26760.c": line 13398)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13399)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13398)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13396)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13401)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13402)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13403)
@@ -284,27 +287,33 @@
 1 remove condition at ("test/cases/large/clang-26760.c": line 13408)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13409)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13408)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13406)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13417)
 1 remove condition at ("test/cases/large/clang-26760.c": line 13420)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13421)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13420)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13416)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13429)
 1 remove condition at ("test/cases/large/clang-26760.c": line 13430)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13431)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13430)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13428)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13440)
 1 remove condition at ("test/cases/large/clang-26760.c": line 13443)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13444)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13443)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13439)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13450)
 1 remove condition at ("test/cases/large/clang-26760.c": line 13451)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13452)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13451)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13449)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13454)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13459)
 1 remove condition at ("test/cases/large/clang-26760.c": line 13460)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13461)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13460)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13458)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13464)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13465)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13466)
@@ -315,6 +324,7 @@
 1 remove condition at ("test/cases/large/clang-26760.c": line 13479)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13480)
 1 expand compound statment at ("test/cases/large/clang-26760.c": line 13479)
+1 remove empty compound at ("test/cases/large/clang-26760.c": line 13475)
 1 remove expr statement at ("test/cases/large/clang-26760.c": line 13484)
 1 remove return statement at ("test/cases/large/clang-26760.c": line 13485)
 
diff --git a/rtree-c/test/expected/constant/reduction/r00000.c.hs b/rtree-c/test/expected/constant/reduction/r00000.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r00000.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r00001.c.hs b/rtree-c/test/expected/constant/reduction/r00001.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r00001.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r0001.c.hs b/rtree-c/test/expected/constant/reduction/r0001.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r0001.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r001.c.hs b/rtree-c/test/expected/constant/reduction/r001.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r001.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r01000.c.hs b/rtree-c/test/expected/constant/reduction/r01000.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r01000.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r01001.c.hs b/rtree-c/test/expected/constant/reduction/r01001.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r01001.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r0101.c.hs b/rtree-c/test/expected/constant/reduction/r0101.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r0101.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r011.c b/rtree-c/test/expected/constant/reduction/r0110.c
similarity index 76%
rename from rtree-c/test/expected/constant/reduction/r011.c
rename to rtree-c/test/expected/constant/reduction/r0110.c
index 0e611cb..10a730e 100644
--- a/rtree-c/test/expected/constant/reduction/r011.c
+++ b/rtree-c/test/expected/constant/reduction/r0110.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)
 // 1 remove return statement at ("test/cases/small/constant.c": line 5)
+// 0 remove empty compound at ("test/cases/small/constant.c": line 3)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r0110.c.hs b/rtree-c/test/expected/constant/reduction/r0110.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r0110.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r0111.c b/rtree-c/test/expected/constant/reduction/r0111.c
new file mode 100644
index 0000000..aaef730
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r0111.c
@@ -0,0 +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)
+// 1 remove return statement at ("test/cases/small/constant.c": line 5)
+// 1 remove empty compound at ("test/cases/small/constant.c": line 3)
+
+int x = 10;
+int main()
+{
+}
diff --git a/rtree-c/test/expected/constant/reduction/r0111.c.hs b/rtree-c/test/expected/constant/reduction/r0111.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r0111.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r10000.c.hs b/rtree-c/test/expected/constant/reduction/r10000.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r10000.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r10001.c.hs b/rtree-c/test/expected/constant/reduction/r10001.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r10001.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r1001.c.hs b/rtree-c/test/expected/constant/reduction/r1001.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r1001.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r101.c.hs b/rtree-c/test/expected/constant/reduction/r101.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r101.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r11000.c.hs b/rtree-c/test/expected/constant/reduction/r11000.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r11000.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r11001.c.hs b/rtree-c/test/expected/constant/reduction/r11001.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r11001.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r1101.c.hs b/rtree-c/test/expected/constant/reduction/r1101.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r1101.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r111.c b/rtree-c/test/expected/constant/reduction/r1110.c
similarity index 75%
rename from rtree-c/test/expected/constant/reduction/r111.c
rename to rtree-c/test/expected/constant/reduction/r1110.c
index 72a38fd..c03bf1d 100644
--- a/rtree-c/test/expected/constant/reduction/r111.c
+++ b/rtree-c/test/expected/constant/reduction/r1110.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)
 // 1 remove return statement at ("test/cases/small/constant.c": line 5)
+// 0 remove empty compound at ("test/cases/small/constant.c": line 3)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r1110.c.hs b/rtree-c/test/expected/constant/reduction/r1110.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r1110.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/constant/reduction/r1111.c b/rtree-c/test/expected/constant/reduction/r1111.c
new file mode 100644
index 0000000..ab1f2de
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r1111.c
@@ -0,0 +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)
+// 1 remove return statement at ("test/cases/small/constant.c": line 5)
+// 1 remove empty compound at ("test/cases/small/constant.c": line 3)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/constant/reduction/r1111.c.hs b/rtree-c/test/expected/constant/reduction/r1111.c.hs
new file mode 100644
index 0000000..f3fe70d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r1111.c.hs
@@ -0,0 +1,72 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "x" 120 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 10 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "y" 121 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 25 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CBinary CAddOp
+                                ( CVar
+                                    ( Ident "x" 120 () ) ()
+                                )
+                                ( CVar
+                                    ( Ident "y" 121 () ) ()
+                                ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r0000.c.hs b/rtree-c/test/expected/declaration/reduction/r0000.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r0000.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r0001.c.hs b/rtree-c/test/expected/declaration/reduction/r0001.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r0001.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r0010.c.hs b/rtree-c/test/expected/declaration/reduction/r0010.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r0010.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r0011.c.hs b/rtree-c/test/expected/declaration/reduction/r0011.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r0011.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r01.c b/rtree-c/test/expected/declaration/reduction/r010.c
similarity index 72%
rename from rtree-c/test/expected/declaration/reduction/r01.c
rename to rtree-c/test/expected/declaration/reduction/r010.c
index 4caade5..554e67c 100644
--- a/rtree-c/test/expected/declaration/reduction/r01.c
+++ b/rtree-c/test/expected/declaration/reduction/r010.c
@@ -1,5 +1,6 @@
 // 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
 // 1 remove expr statement at ("test/cases/small/declaration.c": line 4)
+// 0 remove empty compound at ("test/cases/small/declaration.c": line 3)
 
 int printf(const char *, ...);
 int main()
diff --git a/rtree-c/test/expected/declaration/reduction/r010.c.hs b/rtree-c/test/expected/declaration/reduction/r010.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r010.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r011.c b/rtree-c/test/expected/declaration/reduction/r011.c
new file mode 100644
index 0000000..abfa6ea
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r011.c
@@ -0,0 +1,8 @@
+// 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 1 remove expr statement at ("test/cases/small/declaration.c": line 4)
+// 1 remove empty compound at ("test/cases/small/declaration.c": line 3)
+
+int printf(const char *, ...);
+int main()
+{
+}
diff --git a/rtree-c/test/expected/declaration/reduction/r011.c.hs b/rtree-c/test/expected/declaration/reduction/r011.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r011.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r100.c.hs b/rtree-c/test/expected/declaration/reduction/r100.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r100.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r101.c.hs b/rtree-c/test/expected/declaration/reduction/r101.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r101.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r11.c b/rtree-c/test/expected/declaration/reduction/r110.c
similarity index 69%
rename from rtree-c/test/expected/declaration/reduction/r11.c
rename to rtree-c/test/expected/declaration/reduction/r110.c
index 6a962b2..a2a5cd3 100644
--- a/rtree-c/test/expected/declaration/reduction/r11.c
+++ b/rtree-c/test/expected/declaration/reduction/r110.c
@@ -1,5 +1,6 @@
 // 1 remove variable printf at ("test/cases/small/declaration.c": line 1)
 // 1 remove expr statement at ("test/cases/small/declaration.c": line 4)
+// 0 remove empty compound at ("test/cases/small/declaration.c": line 3)
 
 int main()
 {
diff --git a/rtree-c/test/expected/declaration/reduction/r110.c.hs b/rtree-c/test/expected/declaration/reduction/r110.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r110.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/declaration/reduction/r111.c b/rtree-c/test/expected/declaration/reduction/r111.c
new file mode 100644
index 0000000..975d1c6
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r111.c
@@ -0,0 +1,7 @@
+// 1 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 1 remove expr statement at ("test/cases/small/declaration.c": line 4)
+// 1 remove empty compound at ("test/cases/small/declaration.c": line 3)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/declaration/reduction/r111.c.hs b/rtree-c/test/expected/declaration/reduction/r111.c.hs
new file mode 100644
index 0000000..9608e86
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r111.c.hs
@@ -0,0 +1,61 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "printf" 232434916 () )
+                    )
+                    [ CFunDeclr
+                        ( CFunParamsNew
+                            [ CDecl
+                                [ CTypeQual
+                                    ( CConstQual () )
+                                , CTypeSpec
+                                    ( CCharType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr Nothing
+                                        [ CPtrDeclr [] () ] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ] True
+                        ) [] ()
+                    ] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "printf" 232434916 () ) ()
+                                )
+                                [ CConst
+                                    ( CStrConst "Hello, World!" () )
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r000.c.hs b/rtree-c/test/expected/definition/reduction/r000.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r000.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r001.c b/rtree-c/test/expected/definition/reduction/r0010.c
similarity index 78%
rename from rtree-c/test/expected/definition/reduction/r001.c
rename to rtree-c/test/expected/definition/reduction/r0010.c
index d774277..18561da 100644
--- a/rtree-c/test/expected/definition/reduction/r001.c
+++ b/rtree-c/test/expected/definition/reduction/r0010.c
@@ -1,6 +1,7 @@
 // 0 remove function f at ("test/cases/small/definition.c": line 1)
 // 0 remove return statement at ("test/cases/small/definition.c": line 2)
 // 1 remove return statement at ("test/cases/small/definition.c": line 6)
+// 0 remove empty compound at ("test/cases/small/definition.c": line 5)
 
 int f()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r0010.c.hs b/rtree-c/test/expected/definition/reduction/r0010.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r0010.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r0011.c b/rtree-c/test/expected/definition/reduction/r0011.c
new file mode 100644
index 0000000..65af645
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r0011.c
@@ -0,0 +1,12 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 0 remove return statement at ("test/cases/small/definition.c": line 2)
+// 1 remove return statement at ("test/cases/small/definition.c": line 6)
+// 1 remove empty compound at ("test/cases/small/definition.c": line 5)
+
+int f()
+{
+    return 0;
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/definition/reduction/r0011.c.hs b/rtree-c/test/expected/definition/reduction/r0011.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r0011.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r010.c b/rtree-c/test/expected/definition/reduction/r0100.c
similarity index 78%
rename from rtree-c/test/expected/definition/reduction/r010.c
rename to rtree-c/test/expected/definition/reduction/r0100.c
index 6ec9fb8..d1b2460 100644
--- a/rtree-c/test/expected/definition/reduction/r010.c
+++ b/rtree-c/test/expected/definition/reduction/r0100.c
@@ -1,5 +1,6 @@
 // 0 remove function f at ("test/cases/small/definition.c": line 1)
 // 1 remove return statement at ("test/cases/small/definition.c": line 2)
+// 0 remove empty compound at ("test/cases/small/definition.c": line 1)
 // 0 remove return statement at ("test/cases/small/definition.c": line 6)
 
 int f()
diff --git a/rtree-c/test/expected/definition/reduction/r0100.c.hs b/rtree-c/test/expected/definition/reduction/r0100.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r0100.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r011.c b/rtree-c/test/expected/definition/reduction/r01010.c
similarity index 62%
rename from rtree-c/test/expected/definition/reduction/r011.c
rename to rtree-c/test/expected/definition/reduction/r01010.c
index 5003e4d..4013d98 100644
--- a/rtree-c/test/expected/definition/reduction/r011.c
+++ b/rtree-c/test/expected/definition/reduction/r01010.c
@@ -1,6 +1,8 @@
 // 0 remove function f at ("test/cases/small/definition.c": line 1)
 // 1 remove return statement at ("test/cases/small/definition.c": line 2)
+// 0 remove empty compound at ("test/cases/small/definition.c": line 1)
 // 1 remove return statement at ("test/cases/small/definition.c": line 6)
+// 0 remove empty compound at ("test/cases/small/definition.c": line 5)
 
 int f()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r01010.c.hs b/rtree-c/test/expected/definition/reduction/r01010.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01010.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r01011.c b/rtree-c/test/expected/definition/reduction/r01011.c
new file mode 100644
index 0000000..ed36743
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01011.c
@@ -0,0 +1,12 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 1 remove return statement at ("test/cases/small/definition.c": line 2)
+// 0 remove empty compound at ("test/cases/small/definition.c": line 1)
+// 1 remove return statement at ("test/cases/small/definition.c": line 6)
+// 1 remove empty compound at ("test/cases/small/definition.c": line 5)
+
+int f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/definition/reduction/r01011.c.hs b/rtree-c/test/expected/definition/reduction/r01011.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01011.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r0110.c b/rtree-c/test/expected/definition/reduction/r0110.c
new file mode 100644
index 0000000..c24e77e
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r0110.c
@@ -0,0 +1,12 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 1 remove return statement at ("test/cases/small/definition.c": line 2)
+// 1 remove empty compound at ("test/cases/small/definition.c": line 1)
+// 0 remove return statement at ("test/cases/small/definition.c": line 6)
+
+int f()
+{
+}
+int main()
+{
+    return f();
+}
diff --git a/rtree-c/test/expected/definition/reduction/r0110.c.hs b/rtree-c/test/expected/definition/reduction/r0110.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r0110.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r01110.c b/rtree-c/test/expected/definition/reduction/r01110.c
new file mode 100644
index 0000000..8879ce9
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01110.c
@@ -0,0 +1,12 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 1 remove return statement at ("test/cases/small/definition.c": line 2)
+// 1 remove empty compound at ("test/cases/small/definition.c": line 1)
+// 1 remove return statement at ("test/cases/small/definition.c": line 6)
+// 0 remove empty compound at ("test/cases/small/definition.c": line 5)
+
+int f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/definition/reduction/r01110.c.hs b/rtree-c/test/expected/definition/reduction/r01110.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01110.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r01111.c b/rtree-c/test/expected/definition/reduction/r01111.c
new file mode 100644
index 0000000..7455363
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01111.c
@@ -0,0 +1,12 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 1 remove return statement at ("test/cases/small/definition.c": line 2)
+// 1 remove empty compound at ("test/cases/small/definition.c": line 1)
+// 1 remove return statement at ("test/cases/small/definition.c": line 6)
+// 1 remove empty compound at ("test/cases/small/definition.c": line 5)
+
+int f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/definition/reduction/r01111.c.hs b/rtree-c/test/expected/definition/reduction/r01111.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01111.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r10.c.hs b/rtree-c/test/expected/definition/reduction/r10.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r10.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r11.c b/rtree-c/test/expected/definition/reduction/r110.c
similarity index 68%
rename from rtree-c/test/expected/definition/reduction/r11.c
rename to rtree-c/test/expected/definition/reduction/r110.c
index 1564cc3..0c5a740 100644
--- a/rtree-c/test/expected/definition/reduction/r11.c
+++ b/rtree-c/test/expected/definition/reduction/r110.c
@@ -1,5 +1,6 @@
 // 1 remove function f at ("test/cases/small/definition.c": line 1)
 // 1 remove return statement at ("test/cases/small/definition.c": line 6)
+// 0 remove empty compound at ("test/cases/small/definition.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r110.c.hs b/rtree-c/test/expected/definition/reduction/r110.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r110.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/definition/reduction/r111.c b/rtree-c/test/expected/definition/reduction/r111.c
new file mode 100644
index 0000000..50a5445
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r111.c
@@ -0,0 +1,7 @@
+// 1 remove function f at ("test/cases/small/definition.c": line 1)
+// 1 remove return statement at ("test/cases/small/definition.c": line 6)
+// 1 remove empty compound at ("test/cases/small/definition.c": line 5)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/definition/reduction/r111.c.hs b/rtree-c/test/expected/definition/reduction/r111.c.hs
new file mode 100644
index 0000000..adadaee
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r111.c.hs
@@ -0,0 +1,54 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CConst
+                                ( CIntConst 0 () )
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                ) [] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r00000.c b/rtree-c/test/expected/for/reduction/r000000.c
similarity index 84%
rename from rtree-c/test/expected/for/reduction/r00000.c
rename to rtree-c/test/expected/for/reduction/r000000.c
index 59d6a66..cb0ad0b 100644
--- a/rtree-c/test/expected/for/reduction/r00000.c
+++ b/rtree-c/test/expected/for/reduction/r000000.c
@@ -3,6 +3,7 @@
 // 0 remove initializer at ("test/cases/small/for.c": line 4)
 // 0 reduce to left at ("test/cases/small/for.c": line 4)
 // 0 reduce to right at ("test/cases/small/for.c": line 4)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 static int a = 0;
 int main()
diff --git a/rtree-c/test/expected/for/reduction/r000000.c.hs b/rtree-c/test/expected/for/reduction/r000000.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r000000.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r000001.c b/rtree-c/test/expected/for/reduction/r000001.c
new file mode 100644
index 0000000..8300117
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r000001.c
@@ -0,0 +1,14 @@
+// 0 inline variable a at ("test/cases/small/for.c": line 1)
+// 0 remove static at ("test/cases/small/for.c": line 1)
+// 0 remove initializer at ("test/cases/small/for.c": line 4)
+// 0 reduce to left at ("test/cases/small/for.c": line 4)
+// 0 reduce to right at ("test/cases/small/for.c": line 4)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+static int a = 0;
+int main()
+{
+    for (a = 0;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r000001.c.hs b/rtree-c/test/expected/for/reduction/r000001.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r000001.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r00001.c b/rtree-c/test/expected/for/reduction/r000010.c
similarity index 84%
rename from rtree-c/test/expected/for/reduction/r00001.c
rename to rtree-c/test/expected/for/reduction/r000010.c
index 9e8dd57..958c7b6 100644
--- a/rtree-c/test/expected/for/reduction/r00001.c
+++ b/rtree-c/test/expected/for/reduction/r000010.c
@@ -3,6 +3,7 @@
 // 0 remove initializer at ("test/cases/small/for.c": line 4)
 // 0 reduce to left at ("test/cases/small/for.c": line 4)
 // 1 reduce to right at ("test/cases/small/for.c": line 4)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 static int a = 0;
 int main()
diff --git a/rtree-c/test/expected/for/reduction/r000010.c.hs b/rtree-c/test/expected/for/reduction/r000010.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r000010.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r000011.c b/rtree-c/test/expected/for/reduction/r000011.c
new file mode 100644
index 0000000..3e1f08b
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r000011.c
@@ -0,0 +1,14 @@
+// 0 inline variable a at ("test/cases/small/for.c": line 1)
+// 0 remove static at ("test/cases/small/for.c": line 1)
+// 0 remove initializer at ("test/cases/small/for.c": line 4)
+// 0 reduce to left at ("test/cases/small/for.c": line 4)
+// 1 reduce to right at ("test/cases/small/for.c": line 4)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+static int a = 0;
+int main()
+{
+    for (0;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r000011.c.hs b/rtree-c/test/expected/for/reduction/r000011.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r000011.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r0001.c b/rtree-c/test/expected/for/reduction/r00010.c
similarity index 82%
rename from rtree-c/test/expected/for/reduction/r0001.c
rename to rtree-c/test/expected/for/reduction/r00010.c
index d71841f..a58f913 100644
--- a/rtree-c/test/expected/for/reduction/r0001.c
+++ b/rtree-c/test/expected/for/reduction/r00010.c
@@ -2,6 +2,7 @@
 // 0 remove static at ("test/cases/small/for.c": line 1)
 // 0 remove initializer at ("test/cases/small/for.c": line 4)
 // 1 reduce to left at ("test/cases/small/for.c": line 4)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 static int a = 0;
 int main()
diff --git a/rtree-c/test/expected/for/reduction/r00010.c.hs b/rtree-c/test/expected/for/reduction/r00010.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r00010.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r00011.c b/rtree-c/test/expected/for/reduction/r00011.c
new file mode 100644
index 0000000..b988cd7
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r00011.c
@@ -0,0 +1,13 @@
+// 0 inline variable a at ("test/cases/small/for.c": line 1)
+// 0 remove static at ("test/cases/small/for.c": line 1)
+// 0 remove initializer at ("test/cases/small/for.c": line 4)
+// 1 reduce to left at ("test/cases/small/for.c": line 4)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+static int a = 0;
+int main()
+{
+    for (a;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r00011.c.hs b/rtree-c/test/expected/for/reduction/r00011.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r00011.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r001.c b/rtree-c/test/expected/for/reduction/r0010.c
similarity index 78%
rename from rtree-c/test/expected/for/reduction/r001.c
rename to rtree-c/test/expected/for/reduction/r0010.c
index a6df431..d8181bf 100644
--- a/rtree-c/test/expected/for/reduction/r001.c
+++ b/rtree-c/test/expected/for/reduction/r0010.c
@@ -1,6 +1,7 @@
 // 0 inline variable a at ("test/cases/small/for.c": line 1)
 // 0 remove static at ("test/cases/small/for.c": line 1)
 // 1 remove initializer at ("test/cases/small/for.c": line 4)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 static int a = 0;
 int main()
diff --git a/rtree-c/test/expected/for/reduction/r0010.c.hs b/rtree-c/test/expected/for/reduction/r0010.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r0010.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r0011.c b/rtree-c/test/expected/for/reduction/r0011.c
new file mode 100644
index 0000000..b96bfe1
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r0011.c
@@ -0,0 +1,12 @@
+// 0 inline variable a at ("test/cases/small/for.c": line 1)
+// 0 remove static at ("test/cases/small/for.c": line 1)
+// 1 remove initializer at ("test/cases/small/for.c": line 4)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+static int a = 0;
+int main()
+{
+    for (;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r0011.c.hs b/rtree-c/test/expected/for/reduction/r0011.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r0011.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r01000.c b/rtree-c/test/expected/for/reduction/r010000.c
similarity index 84%
rename from rtree-c/test/expected/for/reduction/r01000.c
rename to rtree-c/test/expected/for/reduction/r010000.c
index 900304c..5fe1c0b 100644
--- a/rtree-c/test/expected/for/reduction/r01000.c
+++ b/rtree-c/test/expected/for/reduction/r010000.c
@@ -3,6 +3,7 @@
 // 0 remove initializer at ("test/cases/small/for.c": line 4)
 // 0 reduce to left at ("test/cases/small/for.c": line 4)
 // 0 reduce to right at ("test/cases/small/for.c": line 4)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 int a = 0;
 int main()
diff --git a/rtree-c/test/expected/for/reduction/r010000.c.hs b/rtree-c/test/expected/for/reduction/r010000.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r010000.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r010001.c b/rtree-c/test/expected/for/reduction/r010001.c
new file mode 100644
index 0000000..4236d05
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r010001.c
@@ -0,0 +1,14 @@
+// 0 inline variable a at ("test/cases/small/for.c": line 1)
+// 1 remove static at ("test/cases/small/for.c": line 1)
+// 0 remove initializer at ("test/cases/small/for.c": line 4)
+// 0 reduce to left at ("test/cases/small/for.c": line 4)
+// 0 reduce to right at ("test/cases/small/for.c": line 4)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+int a = 0;
+int main()
+{
+    for (a = 0;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r010001.c.hs b/rtree-c/test/expected/for/reduction/r010001.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r010001.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r01001.c b/rtree-c/test/expected/for/reduction/r010010.c
similarity index 84%
rename from rtree-c/test/expected/for/reduction/r01001.c
rename to rtree-c/test/expected/for/reduction/r010010.c
index a5ace4a..811a7a6 100644
--- a/rtree-c/test/expected/for/reduction/r01001.c
+++ b/rtree-c/test/expected/for/reduction/r010010.c
@@ -3,6 +3,7 @@
 // 0 remove initializer at ("test/cases/small/for.c": line 4)
 // 0 reduce to left at ("test/cases/small/for.c": line 4)
 // 1 reduce to right at ("test/cases/small/for.c": line 4)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 int a = 0;
 int main()
diff --git a/rtree-c/test/expected/for/reduction/r010010.c.hs b/rtree-c/test/expected/for/reduction/r010010.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r010010.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r010011.c b/rtree-c/test/expected/for/reduction/r010011.c
new file mode 100644
index 0000000..de101b4
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r010011.c
@@ -0,0 +1,14 @@
+// 0 inline variable a at ("test/cases/small/for.c": line 1)
+// 1 remove static at ("test/cases/small/for.c": line 1)
+// 0 remove initializer at ("test/cases/small/for.c": line 4)
+// 0 reduce to left at ("test/cases/small/for.c": line 4)
+// 1 reduce to right at ("test/cases/small/for.c": line 4)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+int a = 0;
+int main()
+{
+    for (0;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r010011.c.hs b/rtree-c/test/expected/for/reduction/r010011.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r010011.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r0101.c b/rtree-c/test/expected/for/reduction/r01010.c
similarity index 81%
rename from rtree-c/test/expected/for/reduction/r0101.c
rename to rtree-c/test/expected/for/reduction/r01010.c
index a0adfc8..d0e4bbf 100644
--- a/rtree-c/test/expected/for/reduction/r0101.c
+++ b/rtree-c/test/expected/for/reduction/r01010.c
@@ -2,6 +2,7 @@
 // 1 remove static at ("test/cases/small/for.c": line 1)
 // 0 remove initializer at ("test/cases/small/for.c": line 4)
 // 1 reduce to left at ("test/cases/small/for.c": line 4)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 int a = 0;
 int main()
diff --git a/rtree-c/test/expected/for/reduction/r01010.c.hs b/rtree-c/test/expected/for/reduction/r01010.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r01010.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r01011.c b/rtree-c/test/expected/for/reduction/r01011.c
new file mode 100644
index 0000000..af38507
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r01011.c
@@ -0,0 +1,13 @@
+// 0 inline variable a at ("test/cases/small/for.c": line 1)
+// 1 remove static at ("test/cases/small/for.c": line 1)
+// 0 remove initializer at ("test/cases/small/for.c": line 4)
+// 1 reduce to left at ("test/cases/small/for.c": line 4)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+int a = 0;
+int main()
+{
+    for (a;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r01011.c.hs b/rtree-c/test/expected/for/reduction/r01011.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r01011.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r011.c b/rtree-c/test/expected/for/reduction/r0110.c
similarity index 78%
rename from rtree-c/test/expected/for/reduction/r011.c
rename to rtree-c/test/expected/for/reduction/r0110.c
index c3b59ac..a89475b 100644
--- a/rtree-c/test/expected/for/reduction/r011.c
+++ b/rtree-c/test/expected/for/reduction/r0110.c
@@ -1,6 +1,7 @@
 // 0 inline variable a at ("test/cases/small/for.c": line 1)
 // 1 remove static at ("test/cases/small/for.c": line 1)
 // 1 remove initializer at ("test/cases/small/for.c": line 4)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 int a = 0;
 int main()
diff --git a/rtree-c/test/expected/for/reduction/r0110.c.hs b/rtree-c/test/expected/for/reduction/r0110.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r0110.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r0111.c b/rtree-c/test/expected/for/reduction/r0111.c
new file mode 100644
index 0000000..d936ce0
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r0111.c
@@ -0,0 +1,12 @@
+// 0 inline variable a at ("test/cases/small/for.c": line 1)
+// 1 remove static at ("test/cases/small/for.c": line 1)
+// 1 remove initializer at ("test/cases/small/for.c": line 4)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+int a = 0;
+int main()
+{
+    for (;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r0111.c.hs b/rtree-c/test/expected/for/reduction/r0111.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r0111.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r1.c b/rtree-c/test/expected/for/reduction/r10.c
similarity index 61%
rename from rtree-c/test/expected/for/reduction/r1.c
rename to rtree-c/test/expected/for/reduction/r10.c
index b99962f..8c7a31c 100644
--- a/rtree-c/test/expected/for/reduction/r1.c
+++ b/rtree-c/test/expected/for/reduction/r10.c
@@ -1,4 +1,5 @@
 // 1 inline variable a at ("test/cases/small/for.c": line 1)
+// 0 remove empty compound at ("test/cases/small/for.c": line 4)
 
 int main()
 {
diff --git a/rtree-c/test/expected/for/reduction/r10.c.hs b/rtree-c/test/expected/for/reduction/r10.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r10.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/for/reduction/r11.c b/rtree-c/test/expected/for/reduction/r11.c
new file mode 100644
index 0000000..c3507ba
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r11.c
@@ -0,0 +1,9 @@
+// 1 inline variable a at ("test/cases/small/for.c": line 1)
+// 1 remove empty compound at ("test/cases/small/for.c": line 4)
+
+int main()
+{
+    for (;;)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/for/reduction/r11.c.hs b/rtree-c/test/expected/for/reduction/r11.c.hs
new file mode 100644
index 0000000..844af64
--- /dev/null
+++ b/rtree-c/test/expected/for/reduction/r11.c.hs
@@ -0,0 +1,57 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CStatic () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "a" 97 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitExpr
+                        ( CConst
+                            ( CIntConst 0 () )
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CFor
+                        ( CForInitializing
+                            ( Just
+                                ( CAssign CAssignOp
+                                    ( CVar
+                                        ( Ident "a" 97 () ) ()
+                                    )
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            )
+                        ) Nothing Nothing
+                        ( CCompound [] [] () ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00000000.c b/rtree-c/test/expected/functions/reduction/r000000000.c
similarity index 89%
rename from rtree-c/test/expected/functions/reduction/r00000000.c
rename to rtree-c/test/expected/functions/reduction/r000000000.c
index 543338b..48db573 100644
--- a/rtree-c/test/expected/functions/reduction/r00000000.c
+++ b/rtree-c/test/expected/functions/reduction/r000000000.c
@@ -3,6 +3,7 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
 // 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
diff --git a/rtree-c/test/expected/functions/reduction/r000000000.c.hs b/rtree-c/test/expected/functions/reduction/r000000000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 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 0000000..df1433b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000001.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+    a;
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000001.c.hs b/rtree-c/test/expected/functions/reduction/r000000001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00000001.c b/rtree-c/test/expected/functions/reduction/r00000001.c
index 66abac8..e8511e7 100644
--- a/rtree-c/test/expected/functions/reduction/r00000001.c
+++ b/rtree-c/test/expected/functions/reduction/r00000001.c
@@ -3,8 +3,8 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
 // 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
-// 0 do without param at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
 int f(int a)
@@ -16,5 +16,5 @@ int g(int a)
 }
 int main()
 {
-    return f(g(0));
+    return f(0);
 }
diff --git a/rtree-c/test/expected/functions/reduction/r00000001.c.hs b/rtree-c/test/expected/functions/reduction/r00000001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000001.c b/rtree-c/test/expected/functions/reduction/r00000010.c
similarity index 76%
rename from rtree-c/test/expected/functions/reduction/r000001.c
rename to rtree-c/test/expected/functions/reduction/r00000010.c
index df38e38..6ba5aed 100644
--- a/rtree-c/test/expected/functions/reduction/r000001.c
+++ b/rtree-c/test/expected/functions/reduction/r00000010.c
@@ -3,7 +3,9 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
 // 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f(int a)
 {
diff --git a/rtree-c/test/expected/functions/reduction/r00000010.c.hs b/rtree-c/test/expected/functions/reduction/r00000010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00000011.c b/rtree-c/test/expected/functions/reduction/r00000011.c
new file mode 100644
index 0000000..6414c87
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+    a;
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00000011.c.hs b/rtree-c/test/expected/functions/reduction/r00000011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000001000.c b/rtree-c/test/expected/functions/reduction/r000001000.c
new file mode 100644
index 0000000..66c3869
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000001000.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+    a;
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000001000.c.hs b/rtree-c/test/expected/functions/reduction/r000001000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000001000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000001001.c b/rtree-c/test/expected/functions/reduction/r000001001.c
new file mode 100644
index 0000000..0a87c9a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000001001.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+    a;
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000001001.c.hs b/rtree-c/test/expected/functions/reduction/r000001001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000001001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0000001.c b/rtree-c/test/expected/functions/reduction/r00000101.c
similarity index 88%
rename from rtree-c/test/expected/functions/reduction/r0000001.c
rename to rtree-c/test/expected/functions/reduction/r00000101.c
index f7b815a..da6fa13 100644
--- a/rtree-c/test/expected/functions/reduction/r0000001.c
+++ b/rtree-c/test/expected/functions/reduction/r00000101.c
@@ -3,6 +3,7 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
 // 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r00000101.c.hs b/rtree-c/test/expected/functions/reduction/r00000101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00000110.c b/rtree-c/test/expected/functions/reduction/r00000110.c
new file mode 100644
index 0000000..d0159c2
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000110.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+    a;
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00000110.c.hs b/rtree-c/test/expected/functions/reduction/r00000110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00000111.c b/rtree-c/test/expected/functions/reduction/r00000111.c
new file mode 100644
index 0000000..fde2f96
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000111.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+    a;
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00000111.c.hs b/rtree-c/test/expected/functions/reduction/r00000111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00000111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00001000.c b/rtree-c/test/expected/functions/reduction/r0000100000.c
similarity index 81%
rename from rtree-c/test/expected/functions/reduction/r00001000.c
rename to rtree-c/test/expected/functions/reduction/r0000100000.c
index 6367eec..044cb46 100644
--- a/rtree-c/test/expected/functions/reduction/r00001000.c
+++ b/rtree-c/test/expected/functions/reduction/r0000100000.c
@@ -3,6 +3,8 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
diff --git a/rtree-c/test/expected/functions/reduction/r0000100000.c.hs b/rtree-c/test/expected/functions/reduction/r0000100000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000100000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00001001.c b/rtree-c/test/expected/functions/reduction/r0000100001.c
similarity index 81%
rename from rtree-c/test/expected/functions/reduction/r00001001.c
rename to rtree-c/test/expected/functions/reduction/r0000100001.c
index d166d3f..95b3b77 100644
--- a/rtree-c/test/expected/functions/reduction/r00001001.c
+++ b/rtree-c/test/expected/functions/reduction/r0000100001.c
@@ -3,6 +3,8 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
diff --git a/rtree-c/test/expected/functions/reduction/r0000100001.c.hs b/rtree-c/test/expected/functions/reduction/r0000100001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000100001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0000101.c b/rtree-c/test/expected/functions/reduction/r000010001.c
similarity index 79%
rename from rtree-c/test/expected/functions/reduction/r0000101.c
rename to rtree-c/test/expected/functions/reduction/r000010001.c
index e904596..e8a82a0 100644
--- a/rtree-c/test/expected/functions/reduction/r0000101.c
+++ b/rtree-c/test/expected/functions/reduction/r000010001.c
@@ -3,6 +3,8 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r000010001.c.hs b/rtree-c/test/expected/functions/reduction/r000010001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000011.c b/rtree-c/test/expected/functions/reduction/r000010010.c
similarity index 68%
rename from rtree-c/test/expected/functions/reduction/r000011.c
rename to rtree-c/test/expected/functions/reduction/r000010010.c
index f110d87..7e926cb 100644
--- a/rtree-c/test/expected/functions/reduction/r000011.c
+++ b/rtree-c/test/expected/functions/reduction/r000010010.c
@@ -3,7 +3,10 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f(int a)
 {
diff --git a/rtree-c/test/expected/functions/reduction/r000010010.c.hs b/rtree-c/test/expected/functions/reduction/r000010010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
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 0000000..aaacd6a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound 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/r000010011.c.hs b/rtree-c/test/expected/functions/reduction/r000010011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0000101000.c b/rtree-c/test/expected/functions/reduction/r0000101000.c
new file mode 100644
index 0000000..d924cca
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000101000.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000101000.c.hs b/rtree-c/test/expected/functions/reduction/r0000101000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000101000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0000101001.c b/rtree-c/test/expected/functions/reduction/r0000101001.c
new file mode 100644
index 0000000..9b4469d
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000101001.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000101001.c.hs b/rtree-c/test/expected/functions/reduction/r0000101001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000101001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 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 0000000..f63f0f3
--- /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 parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010101.c.hs b/rtree-c/test/expected/functions/reduction/r000010101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000010110.c b/rtree-c/test/expected/functions/reduction/r000010110.c
new file mode 100644
index 0000000..2eca743
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010110.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound 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/r000010110.c.hs b/rtree-c/test/expected/functions/reduction/r000010110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000010111.c b/rtree-c/test/expected/functions/reduction/r000010111.c
new file mode 100644
index 0000000..d21e381
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010111.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound 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/r000010111.c.hs b/rtree-c/test/expected/functions/reduction/r000010111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0000110000.c b/rtree-c/test/expected/functions/reduction/r0000110000.c
new file mode 100644
index 0000000..fb999eb
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000110000.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000110000.c.hs b/rtree-c/test/expected/functions/reduction/r0000110000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000110000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0000110001.c b/rtree-c/test/expected/functions/reduction/r0000110001.c
new file mode 100644
index 0000000..c8328b8
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000110001.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000110001.c.hs b/rtree-c/test/expected/functions/reduction/r0000110001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000110001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000011001.c b/rtree-c/test/expected/functions/reduction/r000011001.c
new file mode 100644
index 0000000..ebe2ee0
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000011001.c.hs b/rtree-c/test/expected/functions/reduction/r000011001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000011010.c b/rtree-c/test/expected/functions/reduction/r000011010.c
new file mode 100644
index 0000000..56ae3fa
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011010.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound 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/r000011010.c.hs b/rtree-c/test/expected/functions/reduction/r000011010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000011011.c b/rtree-c/test/expected/functions/reduction/r000011011.c
new file mode 100644
index 0000000..3fe5856
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound 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/r000011011.c.hs b/rtree-c/test/expected/functions/reduction/r000011011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0000111000.c b/rtree-c/test/expected/functions/reduction/r0000111000.c
new file mode 100644
index 0000000..06f58d0
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000111000.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000111000.c.hs b/rtree-c/test/expected/functions/reduction/r0000111000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000111000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0000111001.c b/rtree-c/test/expected/functions/reduction/r0000111001.c
new file mode 100644
index 0000000..2ebf0ce
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000111001.c
@@ -0,0 +1,21 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000111001.c.hs b/rtree-c/test/expected/functions/reduction/r0000111001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000111001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000011101.c b/rtree-c/test/expected/functions/reduction/r000011101.c
new file mode 100644
index 0000000..cd95483
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000011101.c.hs b/rtree-c/test/expected/functions/reduction/r000011101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000011110.c b/rtree-c/test/expected/functions/reduction/r000011110.c
new file mode 100644
index 0000000..4481f1c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011110.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound 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/r000011110.c.hs b/rtree-c/test/expected/functions/reduction/r000011110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000011111.c b/rtree-c/test/expected/functions/reduction/r000011111.c
new file mode 100644
index 0000000..3fb1ad9
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011111.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound 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/r000011111.c.hs b/rtree-c/test/expected/functions/reduction/r000011111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0001000.c b/rtree-c/test/expected/functions/reduction/r00010000.c
similarity index 88%
rename from rtree-c/test/expected/functions/reduction/r0001000.c
rename to rtree-c/test/expected/functions/reduction/r00010000.c
index 9f79ff2..126a8d1 100644
--- a/rtree-c/test/expected/functions/reduction/r0001000.c
+++ b/rtree-c/test/expected/functions/reduction/r00010000.c
@@ -3,6 +3,7 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
 // 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r00010000.c.hs b/rtree-c/test/expected/functions/reduction/r00010000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0001001.c b/rtree-c/test/expected/functions/reduction/r00010001.c
similarity index 88%
rename from rtree-c/test/expected/functions/reduction/r0001001.c
rename to rtree-c/test/expected/functions/reduction/r00010001.c
index 707a844..fc0970d 100644
--- a/rtree-c/test/expected/functions/reduction/r0001001.c
+++ b/rtree-c/test/expected/functions/reduction/r00010001.c
@@ -3,6 +3,7 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
 // 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r00010001.c.hs b/rtree-c/test/expected/functions/reduction/r00010001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000101.c b/rtree-c/test/expected/functions/reduction/r00010010.c
similarity index 76%
rename from rtree-c/test/expected/functions/reduction/r000101.c
rename to rtree-c/test/expected/functions/reduction/r00010010.c
index f84ccce..e3f27b3 100644
--- a/rtree-c/test/expected/functions/reduction/r000101.c
+++ b/rtree-c/test/expected/functions/reduction/r00010010.c
@@ -3,7 +3,9 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
 // 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f(int a)
 {
diff --git a/rtree-c/test/expected/functions/reduction/r00010010.c.hs b/rtree-c/test/expected/functions/reduction/r00010010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00010011.c b/rtree-c/test/expected/functions/reduction/r00010011.c
new file mode 100644
index 0000000..44533ba
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+    a;
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00010011.c.hs b/rtree-c/test/expected/functions/reduction/r00010011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00010100.c b/rtree-c/test/expected/functions/reduction/r00010100.c
new file mode 100644
index 0000000..ba46fdc
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+    a;
+}
+int g()
+{
+}
+int main()
+{
+    return f(g());
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00010100.c.hs b/rtree-c/test/expected/functions/reduction/r00010100.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00010101.c b/rtree-c/test/expected/functions/reduction/r00010101.c
new file mode 100644
index 0000000..6c4744a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+    a;
+}
+int g()
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00010101.c.hs b/rtree-c/test/expected/functions/reduction/r00010101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00010110.c b/rtree-c/test/expected/functions/reduction/r00010110.c
new file mode 100644
index 0000000..ca1b3c1
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010110.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+    a;
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00010110.c.hs b/rtree-c/test/expected/functions/reduction/r00010110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00010111.c b/rtree-c/test/expected/functions/reduction/r00010111.c
new file mode 100644
index 0000000..49ed8c8
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010111.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+    a;
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00010111.c.hs b/rtree-c/test/expected/functions/reduction/r00010111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00010111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0001100.c b/rtree-c/test/expected/functions/reduction/r000110000.c
similarity index 79%
rename from rtree-c/test/expected/functions/reduction/r0001100.c
rename to rtree-c/test/expected/functions/reduction/r000110000.c
index 77f5940..b365e37 100644
--- a/rtree-c/test/expected/functions/reduction/r0001100.c
+++ b/rtree-c/test/expected/functions/reduction/r000110000.c
@@ -3,6 +3,8 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r000110000.c.hs b/rtree-c/test/expected/functions/reduction/r000110000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0001101.c b/rtree-c/test/expected/functions/reduction/r000110001.c
similarity index 79%
rename from rtree-c/test/expected/functions/reduction/r0001101.c
rename to rtree-c/test/expected/functions/reduction/r000110001.c
index 796824d..4bd0d70 100644
--- a/rtree-c/test/expected/functions/reduction/r0001101.c
+++ b/rtree-c/test/expected/functions/reduction/r000110001.c
@@ -3,6 +3,8 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r000110001.c.hs b/rtree-c/test/expected/functions/reduction/r000110001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111.c b/rtree-c/test/expected/functions/reduction/r000110010.c
similarity index 68%
rename from rtree-c/test/expected/functions/reduction/r000111.c
rename to rtree-c/test/expected/functions/reduction/r000110010.c
index b5e02bd..7b2540b 100644
--- a/rtree-c/test/expected/functions/reduction/r000111.c
+++ b/rtree-c/test/expected/functions/reduction/r000110010.c
@@ -3,7 +3,10 @@
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f(int a)
 {
diff --git a/rtree-c/test/expected/functions/reduction/r000110010.c.hs b/rtree-c/test/expected/functions/reduction/r000110010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000110011.c b/rtree-c/test/expected/functions/reduction/r000110011.c
new file mode 100644
index 0000000..8aca3ea
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000110011.c.hs b/rtree-c/test/expected/functions/reduction/r000110011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000110100.c b/rtree-c/test/expected/functions/reduction/r000110100.c
new file mode 100644
index 0000000..6835182
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f(g());
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000110100.c.hs b/rtree-c/test/expected/functions/reduction/r000110100.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000110101.c b/rtree-c/test/expected/functions/reduction/r000110101.c
new file mode 100644
index 0000000..384c0d2
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000110101.c.hs b/rtree-c/test/expected/functions/reduction/r000110101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000110110.c b/rtree-c/test/expected/functions/reduction/r000110110.c
new file mode 100644
index 0000000..b417ad1
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110110.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000110110.c.hs b/rtree-c/test/expected/functions/reduction/r000110110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000110111.c b/rtree-c/test/expected/functions/reduction/r000110111.c
new file mode 100644
index 0000000..e8152a5
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110111.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000110111.c.hs b/rtree-c/test/expected/functions/reduction/r000110111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000110111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111000.c b/rtree-c/test/expected/functions/reduction/r000111000.c
new file mode 100644
index 0000000..8bd0be2
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f(g());
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000111000.c.hs b/rtree-c/test/expected/functions/reduction/r000111000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111001.c b/rtree-c/test/expected/functions/reduction/r000111001.c
new file mode 100644
index 0000000..034bad1
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000111001.c.hs b/rtree-c/test/expected/functions/reduction/r000111001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111010.c b/rtree-c/test/expected/functions/reduction/r000111010.c
new file mode 100644
index 0000000..8aff078
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111010.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000111010.c.hs b/rtree-c/test/expected/functions/reduction/r000111010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111011.c b/rtree-c/test/expected/functions/reduction/r000111011.c
new file mode 100644
index 0000000..dc0f73f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000111011.c.hs b/rtree-c/test/expected/functions/reduction/r000111011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111100.c b/rtree-c/test/expected/functions/reduction/r000111100.c
new file mode 100644
index 0000000..786a700
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f(g());
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000111100.c.hs b/rtree-c/test/expected/functions/reduction/r000111100.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111101.c b/rtree-c/test/expected/functions/reduction/r000111101.c
new file mode 100644
index 0000000..3d92a46
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000111101.c.hs b/rtree-c/test/expected/functions/reduction/r000111101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111110.c b/rtree-c/test/expected/functions/reduction/r000111110.c
new file mode 100644
index 0000000..706ec04
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111110.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000111110.c.hs b/rtree-c/test/expected/functions/reduction/r000111110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r000111111.c b/rtree-c/test/expected/functions/reduction/r000111111.c
new file mode 100644
index 0000000..09dff47
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111111.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000111111.c.hs b/rtree-c/test/expected/functions/reduction/r000111111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000111111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0010000.c.hs b/rtree-c/test/expected/functions/reduction/r0010000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0010000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0010001.c.hs b/rtree-c/test/expected/functions/reduction/r0010001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0010001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r001001.c.hs b/rtree-c/test/expected/functions/reduction/r001001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00101.c b/rtree-c/test/expected/functions/reduction/r001010.c
similarity index 84%
rename from rtree-c/test/expected/functions/reduction/r00101.c
rename to rtree-c/test/expected/functions/reduction/r001010.c
index f516cce..a8be415 100644
--- a/rtree-c/test/expected/functions/reduction/r00101.c
+++ b/rtree-c/test/expected/functions/reduction/r001010.c
@@ -3,6 +3,7 @@
 // 1 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove expr statement at ("test/cases/small/functions.c": line 2)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f(int a)
 {
diff --git a/rtree-c/test/expected/functions/reduction/r001010.c.hs b/rtree-c/test/expected/functions/reduction/r001010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
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 0000000..482b030
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001011.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+    a;
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001011.c.hs b/rtree-c/test/expected/functions/reduction/r001011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0011000.c b/rtree-c/test/expected/functions/reduction/r00110000.c
similarity index 88%
rename from rtree-c/test/expected/functions/reduction/r0011000.c
rename to rtree-c/test/expected/functions/reduction/r00110000.c
index 145db02..f7a9ac3 100644
--- a/rtree-c/test/expected/functions/reduction/r0011000.c
+++ b/rtree-c/test/expected/functions/reduction/r00110000.c
@@ -2,6 +2,7 @@
 // 0 remove parameter at ("test/cases/small/functions.c": line 1)
 // 1 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
diff --git a/rtree-c/test/expected/functions/reduction/r00110000.c.hs b/rtree-c/test/expected/functions/reduction/r00110000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00110000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00110001.c b/rtree-c/test/expected/functions/reduction/r00110001.c
new file mode 100644
index 0000000..b3958ef
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00110001.c
@@ -0,0 +1,16 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00110001.c.hs b/rtree-c/test/expected/functions/reduction/r00110001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00110001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0011001.c b/rtree-c/test/expected/functions/reduction/r0011001.c
index f5dec94..9e67135 100644
--- a/rtree-c/test/expected/functions/reduction/r0011001.c
+++ b/rtree-c/test/expected/functions/reduction/r0011001.c
@@ -2,8 +2,8 @@
 // 0 remove parameter at ("test/cases/small/functions.c": line 1)
 // 1 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
-// 0 do without param at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
 int f(int a)
diff --git a/rtree-c/test/expected/functions/reduction/r0011001.c.hs b/rtree-c/test/expected/functions/reduction/r0011001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00111.c b/rtree-c/test/expected/functions/reduction/r0011010.c
similarity index 72%
rename from rtree-c/test/expected/functions/reduction/r00111.c
rename to rtree-c/test/expected/functions/reduction/r0011010.c
index 2b415fe..0112bf7 100644
--- a/rtree-c/test/expected/functions/reduction/r00111.c
+++ b/rtree-c/test/expected/functions/reduction/r0011010.c
@@ -2,7 +2,9 @@
 // 0 remove parameter at ("test/cases/small/functions.c": line 1)
 // 1 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f(int a)
 {
diff --git a/rtree-c/test/expected/functions/reduction/r0011010.c.hs b/rtree-c/test/expected/functions/reduction/r0011010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0011011.c b/rtree-c/test/expected/functions/reduction/r0011011.c
new file mode 100644
index 0000000..8118804
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011011.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0011011.c.hs b/rtree-c/test/expected/functions/reduction/r0011011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00111000.c b/rtree-c/test/expected/functions/reduction/r00111000.c
new file mode 100644
index 0000000..12fb566
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00111000.c
@@ -0,0 +1,16 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int main()
+{
+    return f(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00111000.c.hs b/rtree-c/test/expected/functions/reduction/r00111000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00111000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r00111001.c b/rtree-c/test/expected/functions/reduction/r00111001.c
new file mode 100644
index 0000000..3ed3627
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00111001.c
@@ -0,0 +1,16 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int f(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00111001.c.hs b/rtree-c/test/expected/functions/reduction/r00111001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00111001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r001101.c b/rtree-c/test/expected/functions/reduction/r0011101.c
similarity index 86%
rename from rtree-c/test/expected/functions/reduction/r001101.c
rename to rtree-c/test/expected/functions/reduction/r0011101.c
index 77375d6..34c0b22 100644
--- a/rtree-c/test/expected/functions/reduction/r001101.c
+++ b/rtree-c/test/expected/functions/reduction/r0011101.c
@@ -2,6 +2,7 @@
 // 0 remove parameter at ("test/cases/small/functions.c": line 1)
 // 1 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r0011101.c.hs b/rtree-c/test/expected/functions/reduction/r0011101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0011110.c b/rtree-c/test/expected/functions/reduction/r0011110.c
new file mode 100644
index 0000000..6a6a735
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011110.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0011110.c.hs b/rtree-c/test/expected/functions/reduction/r0011110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0011111.c b/rtree-c/test/expected/functions/reduction/r0011111.c
new file mode 100644
index 0000000..913cb4a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011111.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove expr statement at ("test/cases/small/functions.c": line 2)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0011111.c.hs b/rtree-c/test/expected/functions/reduction/r0011111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01000.c b/rtree-c/test/expected/functions/reduction/r0100000.c
similarity index 73%
rename from rtree-c/test/expected/functions/reduction/r01000.c
rename to rtree-c/test/expected/functions/reduction/r0100000.c
index dc88096..b226fa8 100644
--- a/rtree-c/test/expected/functions/reduction/r01000.c
+++ b/rtree-c/test/expected/functions/reduction/r0100000.c
@@ -2,6 +2,8 @@
 // 1 remove parameter at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 
 int f()
diff --git a/rtree-c/test/expected/functions/reduction/r0100000.c.hs b/rtree-c/test/expected/functions/reduction/r0100000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0100000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01001.c b/rtree-c/test/expected/functions/reduction/r01000010.c
similarity index 64%
rename from rtree-c/test/expected/functions/reduction/r01001.c
rename to rtree-c/test/expected/functions/reduction/r01000010.c
index 84b75cc..d446336 100644
--- a/rtree-c/test/expected/functions/reduction/r01001.c
+++ b/rtree-c/test/expected/functions/reduction/r01000010.c
@@ -2,7 +2,10 @@
 // 1 remove parameter at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f()
 {
diff --git a/rtree-c/test/expected/functions/reduction/r01000010.c.hs b/rtree-c/test/expected/functions/reduction/r01000010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01000010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01000011.c b/rtree-c/test/expected/functions/reduction/r01000011.c
new file mode 100644
index 0000000..ee3d907
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01000011.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01000011.c.hs b/rtree-c/test/expected/functions/reduction/r01000011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01000011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0100010.c b/rtree-c/test/expected/functions/reduction/r0100010.c
new file mode 100644
index 0000000..443b15d
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0100010.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f();
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0100010.c.hs b/rtree-c/test/expected/functions/reduction/r0100010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0100010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01000110.c b/rtree-c/test/expected/functions/reduction/r01000110.c
new file mode 100644
index 0000000..e876058
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01000110.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01000110.c.hs b/rtree-c/test/expected/functions/reduction/r01000110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01000110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01000111.c b/rtree-c/test/expected/functions/reduction/r01000111.c
new file mode 100644
index 0000000..14798b8
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01000111.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01000111.c.hs b/rtree-c/test/expected/functions/reduction/r01000111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01000111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0100100.c b/rtree-c/test/expected/functions/reduction/r0100100.c
new file mode 100644
index 0000000..e8cb96d
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0100100.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f();
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0100100.c.hs b/rtree-c/test/expected/functions/reduction/r0100100.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0100100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01001010.c b/rtree-c/test/expected/functions/reduction/r01001010.c
new file mode 100644
index 0000000..7f1bee8
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01001010.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01001010.c.hs b/rtree-c/test/expected/functions/reduction/r01001010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01001010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01001011.c b/rtree-c/test/expected/functions/reduction/r01001011.c
new file mode 100644
index 0000000..8c561f8
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01001011.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01001011.c.hs b/rtree-c/test/expected/functions/reduction/r01001011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01001011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0100110.c b/rtree-c/test/expected/functions/reduction/r0100110.c
new file mode 100644
index 0000000..265e090
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0100110.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f();
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0100110.c.hs b/rtree-c/test/expected/functions/reduction/r0100110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0100110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01001110.c b/rtree-c/test/expected/functions/reduction/r01001110.c
new file mode 100644
index 0000000..4fb5bc1
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01001110.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01001110.c.hs b/rtree-c/test/expected/functions/reduction/r01001110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01001110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01001111.c b/rtree-c/test/expected/functions/reduction/r01001111.c
new file mode 100644
index 0000000..d0bbeee
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01001111.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01001111.c.hs b/rtree-c/test/expected/functions/reduction/r01001111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01001111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01010.c b/rtree-c/test/expected/functions/reduction/r0101000.c
similarity index 73%
rename from rtree-c/test/expected/functions/reduction/r01010.c
rename to rtree-c/test/expected/functions/reduction/r0101000.c
index a65ecc2..e0b3f2a 100644
--- a/rtree-c/test/expected/functions/reduction/r01010.c
+++ b/rtree-c/test/expected/functions/reduction/r0101000.c
@@ -2,6 +2,8 @@
 // 1 remove parameter at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 
 int f()
diff --git a/rtree-c/test/expected/functions/reduction/r0101000.c.hs b/rtree-c/test/expected/functions/reduction/r0101000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0101000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01011.c b/rtree-c/test/expected/functions/reduction/r01010010.c
similarity index 64%
rename from rtree-c/test/expected/functions/reduction/r01011.c
rename to rtree-c/test/expected/functions/reduction/r01010010.c
index ca4938d..a3a0e5c 100644
--- a/rtree-c/test/expected/functions/reduction/r01011.c
+++ b/rtree-c/test/expected/functions/reduction/r01010010.c
@@ -2,7 +2,10 @@
 // 1 remove parameter at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f()
 {
diff --git a/rtree-c/test/expected/functions/reduction/r01010010.c.hs b/rtree-c/test/expected/functions/reduction/r01010010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01010010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01010011.c b/rtree-c/test/expected/functions/reduction/r01010011.c
new file mode 100644
index 0000000..b9603a7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01010011.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01010011.c.hs b/rtree-c/test/expected/functions/reduction/r01010011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01010011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0101010.c b/rtree-c/test/expected/functions/reduction/r0101010.c
new file mode 100644
index 0000000..24f5faf
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0101010.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f();
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0101010.c.hs b/rtree-c/test/expected/functions/reduction/r0101010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0101010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01010110.c b/rtree-c/test/expected/functions/reduction/r01010110.c
new file mode 100644
index 0000000..a406fcf
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01010110.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01010110.c.hs b/rtree-c/test/expected/functions/reduction/r01010110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01010110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01010111.c b/rtree-c/test/expected/functions/reduction/r01010111.c
new file mode 100644
index 0000000..3024a6f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01010111.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01010111.c.hs b/rtree-c/test/expected/functions/reduction/r01010111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01010111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0101100.c b/rtree-c/test/expected/functions/reduction/r0101100.c
new file mode 100644
index 0000000..f6494af
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0101100.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f();
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0101100.c.hs b/rtree-c/test/expected/functions/reduction/r0101100.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0101100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01011010.c b/rtree-c/test/expected/functions/reduction/r01011010.c
new file mode 100644
index 0000000..900fe3a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011010.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01011010.c.hs b/rtree-c/test/expected/functions/reduction/r01011010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01011011.c b/rtree-c/test/expected/functions/reduction/r01011011.c
new file mode 100644
index 0000000..0db36fa
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011011.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01011011.c.hs b/rtree-c/test/expected/functions/reduction/r01011011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0101110.c b/rtree-c/test/expected/functions/reduction/r0101110.c
new file mode 100644
index 0000000..74e7f5f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0101110.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+    return f();
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0101110.c.hs b/rtree-c/test/expected/functions/reduction/r0101110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0101110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01011110.c b/rtree-c/test/expected/functions/reduction/r01011110.c
new file mode 100644
index 0000000..c0112d8
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011110.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01011110.c.hs b/rtree-c/test/expected/functions/reduction/r01011110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01011111.c b/rtree-c/test/expected/functions/reduction/r01011111.c
new file mode 100644
index 0000000..4ed5b05
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011111.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01011111.c.hs b/rtree-c/test/expected/functions/reduction/r01011111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0110.c b/rtree-c/test/expected/functions/reduction/r01100.c
similarity index 81%
rename from rtree-c/test/expected/functions/reduction/r0110.c
rename to rtree-c/test/expected/functions/reduction/r01100.c
index 17ab352..12115d8 100644
--- a/rtree-c/test/expected/functions/reduction/r0110.c
+++ b/rtree-c/test/expected/functions/reduction/r01100.c
@@ -1,6 +1,7 @@
 // 0 remove function f at ("test/cases/small/functions.c": line 1)
 // 1 remove parameter at ("test/cases/small/functions.c": line 1)
 // 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 
 int f()
diff --git a/rtree-c/test/expected/functions/reduction/r01100.c.hs b/rtree-c/test/expected/functions/reduction/r01100.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r0111.c b/rtree-c/test/expected/functions/reduction/r011010.c
similarity index 67%
rename from rtree-c/test/expected/functions/reduction/r0111.c
rename to rtree-c/test/expected/functions/reduction/r011010.c
index a55517c..9b4eaf7 100644
--- a/rtree-c/test/expected/functions/reduction/r0111.c
+++ b/rtree-c/test/expected/functions/reduction/r011010.c
@@ -1,7 +1,9 @@
 // 0 remove function f at ("test/cases/small/functions.c": line 1)
 // 1 remove parameter at ("test/cases/small/functions.c": line 1)
 // 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int f()
 {
diff --git a/rtree-c/test/expected/functions/reduction/r011010.c.hs b/rtree-c/test/expected/functions/reduction/r011010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r011011.c b/rtree-c/test/expected/functions/reduction/r011011.c
new file mode 100644
index 0000000..3c0138d
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011011.c
@@ -0,0 +1,13 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r011011.c.hs b/rtree-c/test/expected/functions/reduction/r011011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r01110.c b/rtree-c/test/expected/functions/reduction/r01110.c
new file mode 100644
index 0000000..eb43471
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01110.c
@@ -0,0 +1,13 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+
+int f()
+{
+}
+int main()
+{
+    return f();
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01110.c.hs b/rtree-c/test/expected/functions/reduction/r01110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r011110.c b/rtree-c/test/expected/functions/reduction/r011110.c
new file mode 100644
index 0000000..37961a1
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011110.c
@@ -0,0 +1,13 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r011110.c.hs b/rtree-c/test/expected/functions/reduction/r011110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r011111.c b/rtree-c/test/expected/functions/reduction/r011111.c
new file mode 100644
index 0000000..b93e5cf
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011111.c
@@ -0,0 +1,13 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove parameter at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 1)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r011111.c.hs b/rtree-c/test/expected/functions/reduction/r011111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r100000.c b/rtree-c/test/expected/functions/reduction/r1000000.c
similarity index 86%
rename from rtree-c/test/expected/functions/reduction/r100000.c
rename to rtree-c/test/expected/functions/reduction/r1000000.c
index 39b03b4..bff2a37 100644
--- a/rtree-c/test/expected/functions/reduction/r100000.c
+++ b/rtree-c/test/expected/functions/reduction/r1000000.c
@@ -1,6 +1,7 @@
 // 1 remove function f at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
diff --git a/rtree-c/test/expected/functions/reduction/r1000000.c.hs b/rtree-c/test/expected/functions/reduction/r1000000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 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 0000000..164f025
--- /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 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000001.c.hs b/rtree-c/test/expected/functions/reduction/r1000001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r100001.c b/rtree-c/test/expected/functions/reduction/r100001.c
index da7a428..2863daa 100644
--- a/rtree-c/test/expected/functions/reduction/r100001.c
+++ b/rtree-c/test/expected/functions/reduction/r100001.c
@@ -1,8 +1,8 @@
 // 1 remove function f at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
-// 0 do without param at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
 int g(int a)
@@ -10,5 +10,5 @@ int g(int a)
 }
 int main()
 {
-    return g(0);
+    return 0;
 }
diff --git a/rtree-c/test/expected/functions/reduction/r100001.c.hs b/rtree-c/test/expected/functions/reduction/r100001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r1001.c b/rtree-c/test/expected/functions/reduction/r100010.c
similarity index 68%
rename from rtree-c/test/expected/functions/reduction/r1001.c
rename to rtree-c/test/expected/functions/reduction/r100010.c
index 51e8857..9d5a4af 100644
--- a/rtree-c/test/expected/functions/reduction/r1001.c
+++ b/rtree-c/test/expected/functions/reduction/r100010.c
@@ -1,7 +1,9 @@
 // 1 remove function f at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int g(int a)
 {
diff --git a/rtree-c/test/expected/functions/reduction/r100010.c.hs b/rtree-c/test/expected/functions/reduction/r100010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
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 0000000..a658d65
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100011.c
@@ -0,0 +1,13 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r100011.c.hs b/rtree-c/test/expected/functions/reduction/r100011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r1001000.c b/rtree-c/test/expected/functions/reduction/r1001000.c
new file mode 100644
index 0000000..04b6aa2
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1001000.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 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1001000.c.hs b/rtree-c/test/expected/functions/reduction/r1001000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1001000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r1001001.c b/rtree-c/test/expected/functions/reduction/r1001001.c
new file mode 100644
index 0000000..363816b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1001001.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 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1001001.c.hs b/rtree-c/test/expected/functions/reduction/r1001001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1001001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r10001.c b/rtree-c/test/expected/functions/reduction/r100101.c
similarity index 84%
rename from rtree-c/test/expected/functions/reduction/r10001.c
rename to rtree-c/test/expected/functions/reduction/r100101.c
index 5d3a6ec..3e8eef3 100644
--- a/rtree-c/test/expected/functions/reduction/r10001.c
+++ b/rtree-c/test/expected/functions/reduction/r100101.c
@@ -1,6 +1,7 @@
 // 1 remove function f at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r100101.c.hs b/rtree-c/test/expected/functions/reduction/r100101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r100110.c b/rtree-c/test/expected/functions/reduction/r100110.c
new file mode 100644
index 0000000..92d376d
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100110.c
@@ -0,0 +1,13 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r100110.c.hs b/rtree-c/test/expected/functions/reduction/r100110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r100111.c b/rtree-c/test/expected/functions/reduction/r100111.c
new file mode 100644
index 0000000..80e3350
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100111.c
@@ -0,0 +1,13 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 0 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r100111.c.hs b/rtree-c/test/expected/functions/reduction/r100111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r10100.c b/rtree-c/test/expected/functions/reduction/r101000.c
similarity index 84%
rename from rtree-c/test/expected/functions/reduction/r10100.c
rename to rtree-c/test/expected/functions/reduction/r101000.c
index 81115f1..7e065ea 100644
--- a/rtree-c/test/expected/functions/reduction/r10100.c
+++ b/rtree-c/test/expected/functions/reduction/r101000.c
@@ -1,6 +1,7 @@
 // 1 remove function f at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 0 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r101000.c.hs b/rtree-c/test/expected/functions/reduction/r101000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r10101.c b/rtree-c/test/expected/functions/reduction/r101001.c
similarity index 84%
rename from rtree-c/test/expected/functions/reduction/r10101.c
rename to rtree-c/test/expected/functions/reduction/r101001.c
index 2abbb2b..d3ad348 100644
--- a/rtree-c/test/expected/functions/reduction/r10101.c
+++ b/rtree-c/test/expected/functions/reduction/r101001.c
@@ -1,6 +1,7 @@
 // 1 remove function f at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 0 remove return statement at ("test/cases/small/functions.c": line 9)
 // 1 do without param at ("test/cases/small/functions.c": line 9)
 
diff --git a/rtree-c/test/expected/functions/reduction/r101001.c.hs b/rtree-c/test/expected/functions/reduction/r101001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r1011.c b/rtree-c/test/expected/functions/reduction/r101010.c
similarity index 67%
rename from rtree-c/test/expected/functions/reduction/r1011.c
rename to rtree-c/test/expected/functions/reduction/r101010.c
index 348a8cf..d36ae12 100644
--- a/rtree-c/test/expected/functions/reduction/r1011.c
+++ b/rtree-c/test/expected/functions/reduction/r101010.c
@@ -1,7 +1,9 @@
 // 1 remove function f at ("test/cases/small/functions.c": line 1)
 // 0 remove function g at ("test/cases/small/functions.c": line 5)
 // 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int g()
 {
diff --git a/rtree-c/test/expected/functions/reduction/r101010.c.hs b/rtree-c/test/expected/functions/reduction/r101010.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
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 0000000..8501d66
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101011.c
@@ -0,0 +1,13 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r101011.c.hs b/rtree-c/test/expected/functions/reduction/r101011.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r101100.c b/rtree-c/test/expected/functions/reduction/r101100.c
new file mode 100644
index 0000000..41d7930
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101100.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 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 do without param at ("test/cases/small/functions.c": line 9)
+
+int g()
+{
+}
+int main()
+{
+    return g();
+}
diff --git a/rtree-c/test/expected/functions/reduction/r101100.c.hs b/rtree-c/test/expected/functions/reduction/r101100.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r101101.c b/rtree-c/test/expected/functions/reduction/r101101.c
new file mode 100644
index 0000000..68db56c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101101.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 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 0 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 do without param at ("test/cases/small/functions.c": line 9)
+
+int g()
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r101101.c.hs b/rtree-c/test/expected/functions/reduction/r101101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r101110.c b/rtree-c/test/expected/functions/reduction/r101110.c
new file mode 100644
index 0000000..add83b8
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101110.c
@@ -0,0 +1,13 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r101110.c.hs b/rtree-c/test/expected/functions/reduction/r101110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r101111.c b/rtree-c/test/expected/functions/reduction/r101111.c
new file mode 100644
index 0000000..53335d9
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101111.c
@@ -0,0 +1,13 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove parameter at ("test/cases/small/functions.c": line 5)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int g()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r101111.c.hs b/rtree-c/test/expected/functions/reduction/r101111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r11000.c.hs b/rtree-c/test/expected/functions/reduction/r11000.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r11000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r11001.c.hs b/rtree-c/test/expected/functions/reduction/r11001.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r11001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r1101.c.hs b/rtree-c/test/expected/functions/reduction/r1101.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r111.c b/rtree-c/test/expected/functions/reduction/r1110.c
similarity index 75%
rename from rtree-c/test/expected/functions/reduction/r111.c
rename to rtree-c/test/expected/functions/reduction/r1110.c
index 58c45c0..bb933fa 100644
--- a/rtree-c/test/expected/functions/reduction/r111.c
+++ b/rtree-c/test/expected/functions/reduction/r1110.c
@@ -1,6 +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 5)
 // 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 0 remove empty compound at ("test/cases/small/functions.c": line 8)
 
 int main()
 {
diff --git a/rtree-c/test/expected/functions/reduction/r1110.c.hs b/rtree-c/test/expected/functions/reduction/r1110.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/functions/reduction/r1111.c b/rtree-c/test/expected/functions/reduction/r1111.c
new file mode 100644
index 0000000..63f3bfb
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1111.c
@@ -0,0 +1,8 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 5)
+// 1 remove return statement at ("test/cases/small/functions.c": line 9)
+// 1 remove empty compound at ("test/cases/small/functions.c": line 8)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1111.c.hs b/rtree-c/test/expected/functions/reduction/r1111.c.hs
new file mode 100644
index 0000000..f1350f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CVar
+                                ( Ident "a" 97 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "g" 103 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CIntType () )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "f" 102 () ) ()
+                                )
+                                [ CCall
+                                    ( CVar
+                                        ( Ident "g" 103 () ) ()
+                                    )
+                                    [ CConst
+                                        ( CIntConst 42 () )
+                                    ] ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/llvm-26760/reduction/p0.path b/rtree-c/test/expected/llvm-26760/reduction/p0.path
index df502ae..036e488 100644
--- a/rtree-c/test/expected/llvm-26760/reduction/p0.path
+++ b/rtree-c/test/expected/llvm-26760/reduction/p0.path
@@ -28,4 +28,5 @@
 * reduce to right at ("test/cases/large/llvm-26760.c": line 24)
 * reduce to left at ("test/cases/large/llvm-26760.c": line 24)
 * reduce to right at ("test/cases/large/llvm-26760.c": line 24)
+* remove empty compound at ("test/cases/large/llvm-26760.c": line 28)
 
diff --git a/rtree-c/test/expected/llvm-26760/reduction/p1.path b/rtree-c/test/expected/llvm-26760/reduction/p1.path
index 6d81e1a..b572383 100644
--- a/rtree-c/test/expected/llvm-26760/reduction/p1.path
+++ b/rtree-c/test/expected/llvm-26760/reduction/p1.path
@@ -1,3 +1,4 @@
 1 remove variable g_100 at ("test/cases/large/llvm-26760.c": line 6)
 1 remove function func_33 at ("test/cases/large/llvm-26760.c": line 7)
+* remove empty compound at ("test/cases/large/llvm-26760.c": line 28)
 
diff --git a/rtree-c/test/expected/llvm-26760/reduction/p2.path b/rtree-c/test/expected/llvm-26760/reduction/p2.path
new file mode 100644
index 0000000..e8c9085
--- /dev/null
+++ b/rtree-c/test/expected/llvm-26760/reduction/p2.path
@@ -0,0 +1,4 @@
+1 remove variable g_100 at ("test/cases/large/llvm-26760.c": line 6)
+1 remove function func_33 at ("test/cases/large/llvm-26760.c": line 7)
+1 remove empty compound at ("test/cases/large/llvm-26760.c": line 28)
+
diff --git a/rtree-c/test/expected/llvm-26760/reduction/x2.c b/rtree-c/test/expected/llvm-26760/reduction/x2.c
new file mode 100644
index 0000000..de5eef3
--- /dev/null
+++ b/rtree-c/test/expected/llvm-26760/reduction/x2.c
@@ -0,0 +1,7 @@
+typedef signed int8_t;
+typedef short int16_t;
+typedef int int32_t;
+typedef unsigned uint32_t;
+int main()
+{
+}
diff --git a/rtree-c/test/expected/main/reduction/r.c b/rtree-c/test/expected/main/reduction/r.c
deleted file mode 100644
index d3a1f6a..0000000
--- a/rtree-c/test/expected/main/reduction/r.c
+++ /dev/null
@@ -1,4 +0,0 @@
-
-int main()
-{
-}
diff --git a/rtree-c/test/expected/main/reduction/r0.c b/rtree-c/test/expected/main/reduction/r0.c
new file mode 100644
index 0000000..88f1f21
--- /dev/null
+++ b/rtree-c/test/expected/main/reduction/r0.c
@@ -0,0 +1,5 @@
+// 0 remove empty compound at ("test/cases/small/main.c": line 2)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/main/reduction/r0.c.hs b/rtree-c/test/expected/main/reduction/r0.c.hs
new file mode 100644
index 0000000..0d620f0
--- /dev/null
+++ b/rtree-c/test/expected/main/reduction/r0.c.hs
@@ -0,0 +1,17 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/main/reduction/r1.c b/rtree-c/test/expected/main/reduction/r1.c
new file mode 100644
index 0000000..dbd7ca4
--- /dev/null
+++ b/rtree-c/test/expected/main/reduction/r1.c
@@ -0,0 +1,5 @@
+// 1 remove empty compound at ("test/cases/small/main.c": line 2)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/main/reduction/r1.c.hs b/rtree-c/test/expected/main/reduction/r1.c.hs
new file mode 100644
index 0000000..0d620f0
--- /dev/null
+++ b/rtree-c/test/expected/main/reduction/r1.c.hs
@@ -0,0 +1,17 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r00000.c.hs b/rtree-c/test/expected/struct/reduction/r00000.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r00000.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r00001.c.hs b/rtree-c/test/expected/struct/reduction/r00001.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r00001.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r00010.c.hs b/rtree-c/test/expected/struct/reduction/r00010.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r00010.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r00011.c b/rtree-c/test/expected/struct/reduction/r000110.c
similarity index 85%
rename from rtree-c/test/expected/struct/reduction/r00011.c
rename to rtree-c/test/expected/struct/reduction/r000110.c
index d8242be..c96ab6b 100644
--- a/rtree-c/test/expected/struct/reduction/r00011.c
+++ b/rtree-c/test/expected/struct/reduction/r000110.c
@@ -3,6 +3,7 @@
 // 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
 // 1 remove return statement at ("test/cases/small/struct.c": line 7)
+// 0 remove empty compound at ("test/cases/small/struct.c": line 5)
 
 struct point {
     int x; int y;
diff --git a/rtree-c/test/expected/struct/reduction/r000110.c.hs b/rtree-c/test/expected/struct/reduction/r000110.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r000110.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r10011.c b/rtree-c/test/expected/struct/reduction/r000111.c
similarity index 65%
rename from rtree-c/test/expected/struct/reduction/r10011.c
rename to rtree-c/test/expected/struct/reduction/r000111.c
index 5469ecc..026c454 100644
--- a/rtree-c/test/expected/struct/reduction/r10011.c
+++ b/rtree-c/test/expected/struct/reduction/r000111.c
@@ -1,12 +1,14 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
+// 0 remove declaration at ("test/cases/small/struct.c": line 1)
 // 0 remove initializer at ("test/cases/small/struct.c": line 3)
 // 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
 // 1 remove return statement at ("test/cases/small/struct.c": line 7)
+// 1 remove empty compound at ("test/cases/small/struct.c": line 5)
 
 struct point {
     int x; int y;
-} p1 = { 0, 0 };
+};
+struct point p1 = { 0, 0 };
 int main()
 {
 }
diff --git a/rtree-c/test/expected/struct/reduction/r000111.c.hs b/rtree-c/test/expected/struct/reduction/r000111.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r000111.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r0010.c.hs b/rtree-c/test/expected/struct/reduction/r0010.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r0010.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r0011.c b/rtree-c/test/expected/struct/reduction/r00110.c
similarity index 82%
rename from rtree-c/test/expected/struct/reduction/r0011.c
rename to rtree-c/test/expected/struct/reduction/r00110.c
index 7dfcde9..4da04d6 100644
--- a/rtree-c/test/expected/struct/reduction/r0011.c
+++ b/rtree-c/test/expected/struct/reduction/r00110.c
@@ -2,6 +2,7 @@
 // 0 remove initializer at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
+// 0 remove empty compound at ("test/cases/small/struct.c": line 5)
 
 struct point {
     int x; int y;
diff --git a/rtree-c/test/expected/struct/reduction/r00110.c.hs b/rtree-c/test/expected/struct/reduction/r00110.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r00110.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r10101.c b/rtree-c/test/expected/struct/reduction/r00111.c
similarity index 65%
rename from rtree-c/test/expected/struct/reduction/r10101.c
rename to rtree-c/test/expected/struct/reduction/r00111.c
index 4e1f4fc..c1731bd 100644
--- a/rtree-c/test/expected/struct/reduction/r10101.c
+++ b/rtree-c/test/expected/struct/reduction/r00111.c
@@ -1,8 +1,8 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
+// 0 remove declaration at ("test/cases/small/struct.c": line 1)
 // 0 remove initializer at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 0 remove declaration at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
+// 1 remove empty compound at ("test/cases/small/struct.c": line 5)
 
 struct point {
     int x; int y;
diff --git a/rtree-c/test/expected/struct/reduction/r00111.c.hs b/rtree-c/test/expected/struct/reduction/r00111.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r00111.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r01000.c.hs b/rtree-c/test/expected/struct/reduction/r01000.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r01000.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r01001.c.hs b/rtree-c/test/expected/struct/reduction/r01001.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r01001.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r01010.c.hs b/rtree-c/test/expected/struct/reduction/r01010.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r01010.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r01011.c b/rtree-c/test/expected/struct/reduction/r010110.c
similarity index 85%
rename from rtree-c/test/expected/struct/reduction/r01011.c
rename to rtree-c/test/expected/struct/reduction/r010110.c
index c4816c5..816ba47 100644
--- a/rtree-c/test/expected/struct/reduction/r01011.c
+++ b/rtree-c/test/expected/struct/reduction/r010110.c
@@ -3,6 +3,7 @@
 // 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
 // 1 remove return statement at ("test/cases/small/struct.c": line 7)
+// 0 remove empty compound at ("test/cases/small/struct.c": line 5)
 
 struct point {
     int x; int y;
diff --git a/rtree-c/test/expected/struct/reduction/r010110.c.hs b/rtree-c/test/expected/struct/reduction/r010110.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r010110.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r11011.c b/rtree-c/test/expected/struct/reduction/r010111.c
similarity index 67%
rename from rtree-c/test/expected/struct/reduction/r11011.c
rename to rtree-c/test/expected/struct/reduction/r010111.c
index 2aa7cdc..b678598 100644
--- a/rtree-c/test/expected/struct/reduction/r11011.c
+++ b/rtree-c/test/expected/struct/reduction/r010111.c
@@ -1,12 +1,14 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
+// 0 remove declaration at ("test/cases/small/struct.c": line 1)
 // 1 remove initializer at ("test/cases/small/struct.c": line 3)
 // 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
 // 1 remove return statement at ("test/cases/small/struct.c": line 7)
+// 1 remove empty compound at ("test/cases/small/struct.c": line 5)
 
 struct point {
     int x; int y;
-} p1;
+};
+struct point p1;
 int main()
 {
 }
diff --git a/rtree-c/test/expected/struct/reduction/r010111.c.hs b/rtree-c/test/expected/struct/reduction/r010111.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r010111.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r0110.c.hs b/rtree-c/test/expected/struct/reduction/r0110.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r0110.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r0111.c b/rtree-c/test/expected/struct/reduction/r01110.c
similarity index 82%
rename from rtree-c/test/expected/struct/reduction/r0111.c
rename to rtree-c/test/expected/struct/reduction/r01110.c
index 3f85b55..c17e7f2 100644
--- a/rtree-c/test/expected/struct/reduction/r0111.c
+++ b/rtree-c/test/expected/struct/reduction/r01110.c
@@ -2,6 +2,7 @@
 // 1 remove initializer at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
+// 0 remove empty compound at ("test/cases/small/struct.c": line 5)
 
 struct point {
     int x; int y;
diff --git a/rtree-c/test/expected/struct/reduction/r01110.c.hs b/rtree-c/test/expected/struct/reduction/r01110.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r01110.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r11101.c b/rtree-c/test/expected/struct/reduction/r01111.c
similarity index 65%
rename from rtree-c/test/expected/struct/reduction/r11101.c
rename to rtree-c/test/expected/struct/reduction/r01111.c
index 95b2c71..ee15510 100644
--- a/rtree-c/test/expected/struct/reduction/r11101.c
+++ b/rtree-c/test/expected/struct/reduction/r01111.c
@@ -1,8 +1,8 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
+// 0 remove declaration at ("test/cases/small/struct.c": line 1)
 // 1 remove initializer at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 0 remove declaration at ("test/cases/small/struct.c": line 3)
 // 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
+// 1 remove empty compound at ("test/cases/small/struct.c": line 5)
 
 struct point {
     int x; int y;
diff --git a/rtree-c/test/expected/struct/reduction/r01111.c.hs b/rtree-c/test/expected/struct/reduction/r01111.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r01111.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r10.c b/rtree-c/test/expected/struct/reduction/r10.c
new file mode 100644
index 0000000..624856a
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r10.c
@@ -0,0 +1,6 @@
+// 1 remove declaration at ("test/cases/small/struct.c": line 1)
+// 0 remove empty compound at ("test/cases/small/struct.c": line 5)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/struct/reduction/r10.c.hs b/rtree-c/test/expected/struct/reduction/r10.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r10.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r10000.c b/rtree-c/test/expected/struct/reduction/r10000.c
deleted file mode 100644
index 5f24f5d..0000000
--- a/rtree-c/test/expected/struct/reduction/r10000.c
+++ /dev/null
@@ -1,14 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 0 remove initializer at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 0 remove return statement at ("test/cases/small/struct.c": line 7)
-
-struct point {
-    int x; int y;
-} p1 = { 0, 0 };
-int main()
-{
-    struct point p2;
-    return p1.x;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r10001.c b/rtree-c/test/expected/struct/reduction/r10001.c
deleted file mode 100644
index 26d3d48..0000000
--- a/rtree-c/test/expected/struct/reduction/r10001.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 0 remove initializer at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 1 remove return statement at ("test/cases/small/struct.c": line 7)
-
-struct point {
-    int x; int y;
-} p1 = { 0, 0 };
-int main()
-{
-    struct point p2;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r10010.c b/rtree-c/test/expected/struct/reduction/r10010.c
deleted file mode 100644
index 6bc2399..0000000
--- a/rtree-c/test/expected/struct/reduction/r10010.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 0 remove initializer at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 0 remove return statement at ("test/cases/small/struct.c": line 7)
-
-struct point {
-    int x; int y;
-} p1 = { 0, 0 };
-int main()
-{
-    return p1.x;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r10100.c b/rtree-c/test/expected/struct/reduction/r10100.c
deleted file mode 100644
index 7b5ca3c..0000000
--- a/rtree-c/test/expected/struct/reduction/r10100.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 0 remove initializer at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 0 remove declaration at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p2 at ("test/cases/small/struct.c": line 6)
-
-struct point {
-    int x; int y;
-};
-int main()
-{
-    struct point p2;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r10110.c b/rtree-c/test/expected/struct/reduction/r10110.c
deleted file mode 100644
index 628ff25..0000000
--- a/rtree-c/test/expected/struct/reduction/r10110.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 0 remove initializer at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 1 remove declaration at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p2 at ("test/cases/small/struct.c": line 6)
-
-int main()
-{
-    struct point {
-        int x; int y;
-    } p2;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r101110.c b/rtree-c/test/expected/struct/reduction/r101110.c
deleted file mode 100644
index 5fa60af..0000000
--- a/rtree-c/test/expected/struct/reduction/r101110.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 0 remove initializer at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 1 remove declaration at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 0 remove declaration at ("test/cases/small/struct.c": line 6)
-
-int main()
-{
-    struct point {
-        int x; int y;
-    };
-}
diff --git a/rtree-c/test/expected/struct/reduction/r101111.c b/rtree-c/test/expected/struct/reduction/r101111.c
deleted file mode 100644
index 81a3361..0000000
--- a/rtree-c/test/expected/struct/reduction/r101111.c
+++ /dev/null
@@ -1,10 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 0 remove initializer at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 1 remove declaration at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 1 remove declaration at ("test/cases/small/struct.c": line 6)
-
-int main()
-{
-}
diff --git a/rtree-c/test/expected/struct/reduction/r11.c b/rtree-c/test/expected/struct/reduction/r11.c
new file mode 100644
index 0000000..d947367
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r11.c
@@ -0,0 +1,6 @@
+// 1 remove declaration at ("test/cases/small/struct.c": line 1)
+// 1 remove empty compound at ("test/cases/small/struct.c": line 5)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/struct/reduction/r11.c.hs b/rtree-c/test/expected/struct/reduction/r11.c.hs
new file mode 100644
index 0000000..b37197c
--- /dev/null
+++ b/rtree-c/test/expected/struct/reduction/r11.c.hs
@@ -0,0 +1,126 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        )
+                        ( Just
+                            [ CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "x" 120 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            , CDecl
+                                [ CTypeSpec
+                                    ( CIntType () )
+                                ]
+                                [ CDeclarationItem
+                                    ( CDeclr
+                                        ( Just
+                                            ( Ident "y" 121 () )
+                                        ) [] Nothing [] ()
+                                    ) Nothing Nothing
+                                ] ()
+                            ]
+                        ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "point" 232421476 () )
+                        ) Nothing [] ()
+                    ) ()
+                )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "p1" 6384 () )
+                    ) [] Nothing [] ()
+                )
+                ( Just
+                    ( CInitList
+                        ( CInitializerList
+                            [
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ,
+                                ( []
+                                , CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ]
+                        ) ()
+                    )
+                ) Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "point" 232421476 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "p2" 6512 () )
+                                ) [] Nothing [] ()
+                            ) Nothing Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CMember
+                                ( CVar
+                                    ( Ident "p1" 6384 () ) ()
+                                )
+                                ( Ident "x" 120 () ) False ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/struct/reduction/r11000.c b/rtree-c/test/expected/struct/reduction/r11000.c
deleted file mode 100644
index ad29f2c..0000000
--- a/rtree-c/test/expected/struct/reduction/r11000.c
+++ /dev/null
@@ -1,14 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 1 remove initializer at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 0 remove return statement at ("test/cases/small/struct.c": line 7)
-
-struct point {
-    int x; int y;
-} p1;
-int main()
-{
-    struct point p2;
-    return p1.x;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r11001.c b/rtree-c/test/expected/struct/reduction/r11001.c
deleted file mode 100644
index ad64bd6..0000000
--- a/rtree-c/test/expected/struct/reduction/r11001.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 1 remove initializer at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 1 remove return statement at ("test/cases/small/struct.c": line 7)
-
-struct point {
-    int x; int y;
-} p1;
-int main()
-{
-    struct point p2;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r11010.c b/rtree-c/test/expected/struct/reduction/r11010.c
deleted file mode 100644
index 6e462e9..0000000
--- a/rtree-c/test/expected/struct/reduction/r11010.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 1 remove initializer at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 0 remove return statement at ("test/cases/small/struct.c": line 7)
-
-struct point {
-    int x; int y;
-} p1;
-int main()
-{
-    return p1.x;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r11100.c b/rtree-c/test/expected/struct/reduction/r11100.c
deleted file mode 100644
index 24ab4dd..0000000
--- a/rtree-c/test/expected/struct/reduction/r11100.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 1 remove initializer at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 0 remove declaration at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p2 at ("test/cases/small/struct.c": line 6)
-
-struct point {
-    int x; int y;
-};
-int main()
-{
-    struct point p2;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r11110.c b/rtree-c/test/expected/struct/reduction/r11110.c
deleted file mode 100644
index b5434f3..0000000
--- a/rtree-c/test/expected/struct/reduction/r11110.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 1 remove initializer at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 1 remove declaration at ("test/cases/small/struct.c": line 3)
-// 0 remove variable p2 at ("test/cases/small/struct.c": line 6)
-
-int main()
-{
-    struct point {
-        int x; int y;
-    } p2;
-}
diff --git a/rtree-c/test/expected/struct/reduction/r111110.c b/rtree-c/test/expected/struct/reduction/r111110.c
deleted file mode 100644
index ebe40cb..0000000
--- a/rtree-c/test/expected/struct/reduction/r111110.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 1 remove initializer at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 1 remove declaration at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 0 remove declaration at ("test/cases/small/struct.c": line 6)
-
-int main()
-{
-    struct point {
-        int x; int y;
-    };
-}
diff --git a/rtree-c/test/expected/struct/reduction/r111111.c b/rtree-c/test/expected/struct/reduction/r111111.c
deleted file mode 100644
index fc01730..0000000
--- a/rtree-c/test/expected/struct/reduction/r111111.c
+++ /dev/null
@@ -1,10 +0,0 @@
-// 1 remove declaration at ("test/cases/small/struct.c": line 1)
-// 1 remove initializer at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p1 at ("test/cases/small/struct.c": line 3)
-// 1 remove declaration at ("test/cases/small/struct.c": line 3)
-// 1 remove variable p2 at ("test/cases/small/struct.c": line 6)
-// 1 remove declaration at ("test/cases/small/struct.c": line 6)
-
-int main()
-{
-}
diff --git a/rtree-c/test/expected/structfn/main.c b/rtree-c/test/expected/structfn/main.c
index 0f9a21f..2b7618c 100644
--- a/rtree-c/test/expected/structfn/main.c
+++ b/rtree-c/test/expected/structfn/main.c
@@ -1,9 +1,9 @@
 struct S0 { };
-struct S0 g0 = { };
 void fn(struct S0 a)
 {
 }
 int main()
 {
+    struct S0 g0 = { };
     fn(g0);
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r000000.c b/rtree-c/test/expected/structfn/reduction/r0000000.c
similarity index 69%
rename from rtree-c/test/expected/structfn/reduction/r000000.c
rename to rtree-c/test/expected/structfn/reduction/r0000000.c
index 4818fbf..3e57168 100644
--- a/rtree-c/test/expected/structfn/reduction/r000000.c
+++ b/rtree-c/test/expected/structfn/reduction/r0000000.c
@@ -1,16 +1,17 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0 = { };
 void fn(struct S0 a)
 {
 }
 int main()
 {
+    struct S0 g0 = { };
     fn(g0);
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0000000.c.hs b/rtree-c/test/expected/structfn/reduction/r0000000.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0000000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r000001.c b/rtree-c/test/expected/structfn/reduction/r0000001.c
similarity index 69%
rename from rtree-c/test/expected/structfn/reduction/r000001.c
rename to rtree-c/test/expected/structfn/reduction/r0000001.c
index 7b0dc93..981450d 100644
--- a/rtree-c/test/expected/structfn/reduction/r000001.c
+++ b/rtree-c/test/expected/structfn/reduction/r0000001.c
@@ -1,15 +1,16 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0 = { };
 void fn(struct S0 a)
 {
 }
 int main()
 {
+    struct S0 g0 = { };
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0000001.c.hs b/rtree-c/test/expected/structfn/reduction/r0000001.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0000001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r101000.c b/rtree-c/test/expected/structfn/reduction/r0000010.c
similarity index 60%
rename from rtree-c/test/expected/structfn/reduction/r101000.c
rename to rtree-c/test/expected/structfn/reduction/r0000010.c
index 40e99c0..6512413 100644
--- a/rtree-c/test/expected/structfn/reduction/r101000.c
+++ b/rtree-c/test/expected/structfn/reduction/r0000010.c
@@ -1,9 +1,10 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 void fn(struct S0 a)
diff --git a/rtree-c/test/expected/structfn/reduction/r0000010.c.hs b/rtree-c/test/expected/structfn/reduction/r0000010.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0000010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r00100.c b/rtree-c/test/expected/structfn/reduction/r0000011.c
similarity index 60%
rename from rtree-c/test/expected/structfn/reduction/r00100.c
rename to rtree-c/test/expected/structfn/reduction/r0000011.c
index 6645ae0..a85e07f 100644
--- a/rtree-c/test/expected/structfn/reduction/r00100.c
+++ b/rtree-c/test/expected/structfn/reduction/r0000011.c
@@ -1,8 +1,10 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 void fn(struct S0 a)
diff --git a/rtree-c/test/expected/structfn/reduction/r0000011.c.hs b/rtree-c/test/expected/structfn/reduction/r0000011.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0000011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r110000.c b/rtree-c/test/expected/structfn/reduction/r0000100.c
similarity index 56%
rename from rtree-c/test/expected/structfn/reduction/r110000.c
rename to rtree-c/test/expected/structfn/reduction/r0000100.c
index 08082c8..22e31a3 100644
--- a/rtree-c/test/expected/structfn/reduction/r110000.c
+++ b/rtree-c/test/expected/structfn/reduction/r0000100.c
@@ -1,15 +1,17 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
-struct S0 { } g0;
+struct S0 { };
 void fn(struct S0 a)
 {
 }
 int main()
 {
+    struct S0 g0;
     fn(g0);
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0000100.c.hs b/rtree-c/test/expected/structfn/reduction/r0000100.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0000100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r110001.c b/rtree-c/test/expected/structfn/reduction/r0000101.c
similarity index 55%
rename from rtree-c/test/expected/structfn/reduction/r110001.c
rename to rtree-c/test/expected/structfn/reduction/r0000101.c
index 755f0aa..e899a6f 100644
--- a/rtree-c/test/expected/structfn/reduction/r110001.c
+++ b/rtree-c/test/expected/structfn/reduction/r0000101.c
@@ -1,14 +1,16 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
-struct S0 { } g0;
+struct S0 { };
 void fn(struct S0 a)
 {
 }
 int main()
 {
+    struct S0 g0;
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0000101.c.hs b/rtree-c/test/expected/structfn/reduction/r0000101.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0000101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r01100.c b/rtree-c/test/expected/structfn/reduction/r0000110.c
similarity index 60%
rename from rtree-c/test/expected/structfn/reduction/r01100.c
rename to rtree-c/test/expected/structfn/reduction/r0000110.c
index 9b4032a..4ea2822 100644
--- a/rtree-c/test/expected/structfn/reduction/r01100.c
+++ b/rtree-c/test/expected/structfn/reduction/r0000110.c
@@ -1,8 +1,10 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 void fn(struct S0 a)
diff --git a/rtree-c/test/expected/structfn/reduction/r0000110.c.hs b/rtree-c/test/expected/structfn/reduction/r0000110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0000110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r111000.c b/rtree-c/test/expected/structfn/reduction/r0000111.c
similarity index 60%
rename from rtree-c/test/expected/structfn/reduction/r111000.c
rename to rtree-c/test/expected/structfn/reduction/r0000111.c
index 1f65dcd..1bc7b92 100644
--- a/rtree-c/test/expected/structfn/reduction/r111000.c
+++ b/rtree-c/test/expected/structfn/reduction/r0000111.c
@@ -1,9 +1,10 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 void fn(struct S0 a)
diff --git a/rtree-c/test/expected/structfn/reduction/r0000111.c.hs b/rtree-c/test/expected/structfn/reduction/r0000111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0000111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r000100.c b/rtree-c/test/expected/structfn/reduction/r000100.c
deleted file mode 100644
index 8bd0f08..0000000
--- a/rtree-c/test/expected/structfn/reduction/r000100.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-// 0 do without param at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { };
-struct S0 g0 = { };
-int main()
-{
-    g0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r100000.c b/rtree-c/test/expected/structfn/reduction/r0001000.c
similarity index 55%
rename from rtree-c/test/expected/structfn/reduction/r100000.c
rename to rtree-c/test/expected/structfn/reduction/r0001000.c
index bc6043b..db57c41 100644
--- a/rtree-c/test/expected/structfn/reduction/r100000.c
+++ b/rtree-c/test/expected/structfn/reduction/r0001000.c
@@ -1,15 +1,17 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
-struct S0 { } g0 = { };
+struct S0 { };
 void fn(struct S0 a)
 {
 }
 int main()
 {
+    struct S0 g0 = { };
     fn(g0);
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0001000.c.hs b/rtree-c/test/expected/structfn/reduction/r0001000.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r100001.c b/rtree-c/test/expected/structfn/reduction/r0001001.c
similarity index 54%
rename from rtree-c/test/expected/structfn/reduction/r100001.c
rename to rtree-c/test/expected/structfn/reduction/r0001001.c
index 77e6f7f..01374e1 100644
--- a/rtree-c/test/expected/structfn/reduction/r100001.c
+++ b/rtree-c/test/expected/structfn/reduction/r0001001.c
@@ -1,14 +1,16 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
-struct S0 { } g0 = { };
+struct S0 { };
 void fn(struct S0 a)
 {
 }
 int main()
 {
+    struct S0 g0 = { };
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0001001.c.hs b/rtree-c/test/expected/structfn/reduction/r0001001.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r000101.c b/rtree-c/test/expected/structfn/reduction/r000101.c
deleted file mode 100644
index 751fd99..0000000
--- a/rtree-c/test/expected/structfn/reduction/r000101.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-// 1 do without param at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { };
-struct S0 g0 = { };
-int main()
-{
-    0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r0001010.c b/rtree-c/test/expected/structfn/reduction/r0001010.c
new file mode 100644
index 0000000..7c5dfc5
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001010.c
@@ -0,0 +1,15 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+struct S0 { };
+void fn(struct S0 a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0001010.c.hs b/rtree-c/test/expected/structfn/reduction/r0001010.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0001011.c b/rtree-c/test/expected/structfn/reduction/r0001011.c
new file mode 100644
index 0000000..4d85154
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001011.c
@@ -0,0 +1,15 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+struct S0 { };
+void fn(struct S0 a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0001011.c.hs b/rtree-c/test/expected/structfn/reduction/r0001011.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0001100.c b/rtree-c/test/expected/structfn/reduction/r0001100.c
new file mode 100644
index 0000000..a03b049
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001100.c
@@ -0,0 +1,17 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
+
+struct S0 { };
+void fn(struct S0 a)
+{
+}
+int main()
+{
+    struct S0 g0;
+    fn(g0);
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0001100.c.hs b/rtree-c/test/expected/structfn/reduction/r0001100.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0001101.c b/rtree-c/test/expected/structfn/reduction/r0001101.c
new file mode 100644
index 0000000..4f707f5
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001101.c
@@ -0,0 +1,16 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+
+struct S0 { };
+void fn(struct S0 a)
+{
+}
+int main()
+{
+    struct S0 g0;
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0001101.c.hs b/rtree-c/test/expected/structfn/reduction/r0001101.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0001110.c b/rtree-c/test/expected/structfn/reduction/r0001110.c
new file mode 100644
index 0000000..3bdc2c1
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001110.c
@@ -0,0 +1,15 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+struct S0 { };
+void fn(struct S0 a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0001110.c.hs b/rtree-c/test/expected/structfn/reduction/r0001110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0001111.c b/rtree-c/test/expected/structfn/reduction/r0001111.c
new file mode 100644
index 0000000..8cc4ada
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001111.c
@@ -0,0 +1,15 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+struct S0 { };
+void fn(struct S0 a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0001111.c.hs b/rtree-c/test/expected/structfn/reduction/r0001111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0001111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r000010.c b/rtree-c/test/expected/structfn/reduction/r0010000.c
similarity index 69%
rename from rtree-c/test/expected/structfn/reduction/r000010.c
rename to rtree-c/test/expected/structfn/reduction/r0010000.c
index 0378baf..a13f5c0 100644
--- a/rtree-c/test/expected/structfn/reduction/r000010.c
+++ b/rtree-c/test/expected/structfn/reduction/r0010000.c
@@ -1,16 +1,17 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0 = { };
 void fn()
 {
 }
 int main()
 {
+    struct S0 g0 = { };
     fn();
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0010000.c.hs b/rtree-c/test/expected/structfn/reduction/r0010000.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0010000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r000011.c b/rtree-c/test/expected/structfn/reduction/r0010001.c
similarity index 68%
rename from rtree-c/test/expected/structfn/reduction/r000011.c
rename to rtree-c/test/expected/structfn/reduction/r0010001.c
index 99337bb..a2b7112 100644
--- a/rtree-c/test/expected/structfn/reduction/r000011.c
+++ b/rtree-c/test/expected/structfn/reduction/r0010001.c
@@ -1,15 +1,16 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0 = { };
 void fn()
 {
 }
 int main()
 {
+    struct S0 g0 = { };
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0010001.c.hs b/rtree-c/test/expected/structfn/reduction/r0010001.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0010001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r1010010.c b/rtree-c/test/expected/structfn/reduction/r0010010.c
similarity index 72%
rename from rtree-c/test/expected/structfn/reduction/r1010010.c
rename to rtree-c/test/expected/structfn/reduction/r0010010.c
index d60649a..90f48fd 100644
--- a/rtree-c/test/expected/structfn/reduction/r1010010.c
+++ b/rtree-c/test/expected/structfn/reduction/r0010010.c
@@ -1,10 +1,10 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
 void fn()
diff --git a/rtree-c/test/expected/structfn/reduction/r0010010.c.hs b/rtree-c/test/expected/structfn/reduction/r0010010.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0010010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r001011.c b/rtree-c/test/expected/structfn/reduction/r00100110.c
similarity index 63%
rename from rtree-c/test/expected/structfn/reduction/r001011.c
rename to rtree-c/test/expected/structfn/reduction/r00100110.c
index e2c2a11..aaa77aa 100644
--- a/rtree-c/test/expected/structfn/reduction/r001011.c
+++ b/rtree-c/test/expected/structfn/reduction/r00100110.c
@@ -1,9 +1,11 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 void fn()
diff --git a/rtree-c/test/expected/structfn/reduction/r00100110.c.hs b/rtree-c/test/expected/structfn/reduction/r00100110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00100110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r1010011.c b/rtree-c/test/expected/structfn/reduction/r00100111.c
similarity index 63%
rename from rtree-c/test/expected/structfn/reduction/r1010011.c
rename to rtree-c/test/expected/structfn/reduction/r00100111.c
index f493de8..673794b 100644
--- a/rtree-c/test/expected/structfn/reduction/r1010011.c
+++ b/rtree-c/test/expected/structfn/reduction/r00100111.c
@@ -1,10 +1,11 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 void fn()
diff --git a/rtree-c/test/expected/structfn/reduction/r00100111.c.hs b/rtree-c/test/expected/structfn/reduction/r00100111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00100111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r010010.c b/rtree-c/test/expected/structfn/reduction/r0010100.c
similarity index 69%
rename from rtree-c/test/expected/structfn/reduction/r010010.c
rename to rtree-c/test/expected/structfn/reduction/r0010100.c
index db4ed44..0a0c25b 100644
--- a/rtree-c/test/expected/structfn/reduction/r010010.c
+++ b/rtree-c/test/expected/structfn/reduction/r0010100.c
@@ -1,16 +1,17 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0;
 void fn()
 {
 }
 int main()
 {
+    struct S0 g0;
     fn();
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0010100.c.hs b/rtree-c/test/expected/structfn/reduction/r0010100.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0010100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r010011.c b/rtree-c/test/expected/structfn/reduction/r0010101.c
similarity index 69%
rename from rtree-c/test/expected/structfn/reduction/r010011.c
rename to rtree-c/test/expected/structfn/reduction/r0010101.c
index 4415f22..a318e80 100644
--- a/rtree-c/test/expected/structfn/reduction/r010011.c
+++ b/rtree-c/test/expected/structfn/reduction/r0010101.c
@@ -1,15 +1,16 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0;
 void fn()
 {
 }
 int main()
 {
+    struct S0 g0;
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r0010101.c.hs b/rtree-c/test/expected/structfn/reduction/r0010101.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0010101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r1110010.c b/rtree-c/test/expected/structfn/reduction/r0010110.c
similarity index 72%
rename from rtree-c/test/expected/structfn/reduction/r1110010.c
rename to rtree-c/test/expected/structfn/reduction/r0010110.c
index 4b369e1..9f7a2fd 100644
--- a/rtree-c/test/expected/structfn/reduction/r1110010.c
+++ b/rtree-c/test/expected/structfn/reduction/r0010110.c
@@ -1,10 +1,10 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
 void fn()
diff --git a/rtree-c/test/expected/structfn/reduction/r0010110.c.hs b/rtree-c/test/expected/structfn/reduction/r0010110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0010110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r1110011.c b/rtree-c/test/expected/structfn/reduction/r00101110.c
similarity index 63%
rename from rtree-c/test/expected/structfn/reduction/r1110011.c
rename to rtree-c/test/expected/structfn/reduction/r00101110.c
index 2c9e59e..a172bc1 100644
--- a/rtree-c/test/expected/structfn/reduction/r1110011.c
+++ b/rtree-c/test/expected/structfn/reduction/r00101110.c
@@ -1,10 +1,11 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 void fn()
diff --git a/rtree-c/test/expected/structfn/reduction/r00101110.c.hs b/rtree-c/test/expected/structfn/reduction/r00101110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00101110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r011011.c b/rtree-c/test/expected/structfn/reduction/r00101111.c
similarity index 63%
rename from rtree-c/test/expected/structfn/reduction/r011011.c
rename to rtree-c/test/expected/structfn/reduction/r00101111.c
index b8288d5..9d1b94d 100644
--- a/rtree-c/test/expected/structfn/reduction/r011011.c
+++ b/rtree-c/test/expected/structfn/reduction/r00101111.c
@@ -1,9 +1,11 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 void fn()
diff --git a/rtree-c/test/expected/structfn/reduction/r00101111.c.hs b/rtree-c/test/expected/structfn/reduction/r00101111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00101111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0011000.c b/rtree-c/test/expected/structfn/reduction/r0011000.c
new file mode 100644
index 0000000..3d8d1ea
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011000.c
@@ -0,0 +1,17 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
+
+struct S0 { };
+void fn()
+{
+}
+int main()
+{
+    struct S0 g0 = { };
+    fn();
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0011000.c.hs b/rtree-c/test/expected/structfn/reduction/r0011000.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0011001.c b/rtree-c/test/expected/structfn/reduction/r0011001.c
new file mode 100644
index 0000000..27a50c2
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011001.c
@@ -0,0 +1,16 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+
+struct S0 { };
+void fn()
+{
+}
+int main()
+{
+    struct S0 g0 = { };
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0011001.c.hs b/rtree-c/test/expected/structfn/reduction/r0011001.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r001010.c b/rtree-c/test/expected/structfn/reduction/r0011010.c
similarity index 72%
rename from rtree-c/test/expected/structfn/reduction/r001010.c
rename to rtree-c/test/expected/structfn/reduction/r0011010.c
index fdbf7cf..78433e4 100644
--- a/rtree-c/test/expected/structfn/reduction/r001010.c
+++ b/rtree-c/test/expected/structfn/reduction/r0011010.c
@@ -1,9 +1,10 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
 void fn()
diff --git a/rtree-c/test/expected/structfn/reduction/r0011010.c.hs b/rtree-c/test/expected/structfn/reduction/r0011010.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r00110110.c b/rtree-c/test/expected/structfn/reduction/r00110110.c
new file mode 100644
index 0000000..f9d37d5
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00110110.c
@@ -0,0 +1,16 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+struct S0 { };
+void fn()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r00110110.c.hs b/rtree-c/test/expected/structfn/reduction/r00110110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00110110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r00110111.c b/rtree-c/test/expected/structfn/reduction/r00110111.c
new file mode 100644
index 0000000..880e516
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00110111.c
@@ -0,0 +1,16 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+struct S0 { };
+void fn()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r00110111.c.hs b/rtree-c/test/expected/structfn/reduction/r00110111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00110111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0011100.c b/rtree-c/test/expected/structfn/reduction/r0011100.c
new file mode 100644
index 0000000..6e7740e
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011100.c
@@ -0,0 +1,17 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
+
+struct S0 { };
+void fn()
+{
+}
+int main()
+{
+    struct S0 g0;
+    fn();
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0011100.c.hs b/rtree-c/test/expected/structfn/reduction/r0011100.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011100.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r0011101.c b/rtree-c/test/expected/structfn/reduction/r0011101.c
new file mode 100644
index 0000000..d0f5fda
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011101.c
@@ -0,0 +1,16 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+
+struct S0 { };
+void fn()
+{
+}
+int main()
+{
+    struct S0 g0;
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r0011101.c.hs b/rtree-c/test/expected/structfn/reduction/r0011101.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r011010.c b/rtree-c/test/expected/structfn/reduction/r0011110.c
similarity index 72%
rename from rtree-c/test/expected/structfn/reduction/r011010.c
rename to rtree-c/test/expected/structfn/reduction/r0011110.c
index c72c3e4..cb725e1 100644
--- a/rtree-c/test/expected/structfn/reduction/r011010.c
+++ b/rtree-c/test/expected/structfn/reduction/r0011110.c
@@ -1,9 +1,10 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
 void fn()
diff --git a/rtree-c/test/expected/structfn/reduction/r0011110.c.hs b/rtree-c/test/expected/structfn/reduction/r0011110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r0011110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r00111110.c b/rtree-c/test/expected/structfn/reduction/r00111110.c
new file mode 100644
index 0000000..4df3289
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00111110.c
@@ -0,0 +1,16 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+struct S0 { };
+void fn()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r00111110.c.hs b/rtree-c/test/expected/structfn/reduction/r00111110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00111110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r00111111.c b/rtree-c/test/expected/structfn/reduction/r00111111.c
new file mode 100644
index 0000000..b7a92cb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00111111.c
@@ -0,0 +1,16 @@
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove parameter at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+struct S0 { };
+void fn()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r00111111.c.hs b/rtree-c/test/expected/structfn/reduction/r00111111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r00111111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r010000.c b/rtree-c/test/expected/structfn/reduction/r010000.c
index 7166b0c..a859011 100644
--- a/rtree-c/test/expected/structfn/reduction/r010000.c
+++ b/rtree-c/test/expected/structfn/reduction/r010000.c
@@ -1,16 +1,13 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 do without param at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0;
-void fn(struct S0 a)
-{
-}
 int main()
 {
-    fn(g0);
+    struct S0 g0 = { };
+    g0;
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r010000.c.hs b/rtree-c/test/expected/structfn/reduction/r010000.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r010000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r010001.c b/rtree-c/test/expected/structfn/reduction/r010001.c
index cfe3a5e..d7aedfc 100644
--- a/rtree-c/test/expected/structfn/reduction/r010001.c
+++ b/rtree-c/test/expected/structfn/reduction/r010001.c
@@ -1,15 +1,13 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 do without param at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0;
-void fn(struct S0 a)
-{
-}
 int main()
 {
+    struct S0 g0 = { };
+    0;
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r010001.c.hs b/rtree-c/test/expected/structfn/reduction/r010001.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r010001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r00011.c b/rtree-c/test/expected/structfn/reduction/r01001.c
similarity index 90%
rename from rtree-c/test/expected/structfn/reduction/r00011.c
rename to rtree-c/test/expected/structfn/reduction/r01001.c
index 63d972b..93f2d60 100644
--- a/rtree-c/test/expected/structfn/reduction/r00011.c
+++ b/rtree-c/test/expected/structfn/reduction/r01001.c
@@ -1,11 +1,11 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0 = { };
 int main()
 {
+    struct S0 g0 = { };
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r01001.c.hs b/rtree-c/test/expected/structfn/reduction/r01001.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r01001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r00110.c b/rtree-c/test/expected/structfn/reduction/r01010.c
similarity index 96%
rename from rtree-c/test/expected/structfn/reduction/r00110.c
rename to rtree-c/test/expected/structfn/reduction/r01010.c
index e3294f9..a0d46e5 100644
--- a/rtree-c/test/expected/structfn/reduction/r00110.c
+++ b/rtree-c/test/expected/structfn/reduction/r01010.c
@@ -1,8 +1,8 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
 int main()
diff --git a/rtree-c/test/expected/structfn/reduction/r01010.c.hs b/rtree-c/test/expected/structfn/reduction/r01010.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r01010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r101011.c b/rtree-c/test/expected/structfn/reduction/r010110.c
similarity index 81%
rename from rtree-c/test/expected/structfn/reduction/r101011.c
rename to rtree-c/test/expected/structfn/reduction/r010110.c
index d2e4883..c4efcd3 100644
--- a/rtree-c/test/expected/structfn/reduction/r101011.c
+++ b/rtree-c/test/expected/structfn/reduction/r010110.c
@@ -1,9 +1,9 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 int main()
diff --git a/rtree-c/test/expected/structfn/reduction/r010110.c.hs b/rtree-c/test/expected/structfn/reduction/r010110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r010110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r00111.c b/rtree-c/test/expected/structfn/reduction/r010111.c
similarity index 81%
rename from rtree-c/test/expected/structfn/reduction/r00111.c
rename to rtree-c/test/expected/structfn/reduction/r010111.c
index 4c065ac..9fcc6cb 100644
--- a/rtree-c/test/expected/structfn/reduction/r00111.c
+++ b/rtree-c/test/expected/structfn/reduction/r010111.c
@@ -1,8 +1,9 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 int main()
diff --git a/rtree-c/test/expected/structfn/reduction/r010111.c.hs b/rtree-c/test/expected/structfn/reduction/r010111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r010111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r010100.c b/rtree-c/test/expected/structfn/reduction/r011000.c
similarity index 79%
rename from rtree-c/test/expected/structfn/reduction/r010100.c
rename to rtree-c/test/expected/structfn/reduction/r011000.c
index bc7df3b..d0b2d9a 100644
--- a/rtree-c/test/expected/structfn/reduction/r010100.c
+++ b/rtree-c/test/expected/structfn/reduction/r011000.c
@@ -1,13 +1,13 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-// 0 do without param at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 do without param at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0;
 int main()
 {
+    struct S0 g0;
     g0;
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r011000.c.hs b/rtree-c/test/expected/structfn/reduction/r011000.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r011000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r010101.c b/rtree-c/test/expected/structfn/reduction/r011001.c
similarity index 79%
rename from rtree-c/test/expected/structfn/reduction/r010101.c
rename to rtree-c/test/expected/structfn/reduction/r011001.c
index 7013526..4433b1b 100644
--- a/rtree-c/test/expected/structfn/reduction/r010101.c
+++ b/rtree-c/test/expected/structfn/reduction/r011001.c
@@ -1,13 +1,13 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-// 1 do without param at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 do without param at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0;
 int main()
 {
+    struct S0 g0;
     0;
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r011001.c.hs b/rtree-c/test/expected/structfn/reduction/r011001.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r011001.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r01011.c b/rtree-c/test/expected/structfn/reduction/r01101.c
similarity index 92%
rename from rtree-c/test/expected/structfn/reduction/r01011.c
rename to rtree-c/test/expected/structfn/reduction/r01101.c
index 5b51609..740041a 100644
--- a/rtree-c/test/expected/structfn/reduction/r01011.c
+++ b/rtree-c/test/expected/structfn/reduction/r01101.c
@@ -1,11 +1,11 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 0 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
-struct S0 g0;
 int main()
 {
+    struct S0 g0;
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r01101.c.hs b/rtree-c/test/expected/structfn/reduction/r01101.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r01101.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r01110.c b/rtree-c/test/expected/structfn/reduction/r01110.c
index 0ac93a5..bb206e7 100644
--- a/rtree-c/test/expected/structfn/reduction/r01110.c
+++ b/rtree-c/test/expected/structfn/reduction/r01110.c
@@ -1,8 +1,8 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 struct S0 { };
 int main()
diff --git a/rtree-c/test/expected/structfn/reduction/r01110.c.hs b/rtree-c/test/expected/structfn/reduction/r01110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r01110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r111011.c b/rtree-c/test/expected/structfn/reduction/r011110.c
similarity index 81%
rename from rtree-c/test/expected/structfn/reduction/r111011.c
rename to rtree-c/test/expected/structfn/reduction/r011110.c
index 2563e60..68a0fc5 100644
--- a/rtree-c/test/expected/structfn/reduction/r111011.c
+++ b/rtree-c/test/expected/structfn/reduction/r011110.c
@@ -1,9 +1,9 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 int main()
diff --git a/rtree-c/test/expected/structfn/reduction/r011110.c.hs b/rtree-c/test/expected/structfn/reduction/r011110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r011110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r01111.c b/rtree-c/test/expected/structfn/reduction/r011111.c
similarity index 81%
rename from rtree-c/test/expected/structfn/reduction/r01111.c
rename to rtree-c/test/expected/structfn/reduction/r011111.c
index 59dd377..5a23fd1 100644
--- a/rtree-c/test/expected/structfn/reduction/r01111.c
+++ b/rtree-c/test/expected/structfn/reduction/r011111.c
@@ -1,8 +1,9 @@
 // 0 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove initializer at ("test/cases/small/structfn.c": line 4)
+// 1 remove variable g0 at ("test/cases/small/structfn.c": line 4)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 struct S0 { };
 int main()
diff --git a/rtree-c/test/expected/structfn/reduction/r011111.c.hs b/rtree-c/test/expected/structfn/reduction/r011111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r011111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r110010.c b/rtree-c/test/expected/structfn/reduction/r1000.c
similarity index 51%
rename from rtree-c/test/expected/structfn/reduction/r110010.c
rename to rtree-c/test/expected/structfn/reduction/r1000.c
index 8b5cf2d..3c6bd32 100644
--- a/rtree-c/test/expected/structfn/reduction/r110010.c
+++ b/rtree-c/test/expected/structfn/reduction/r1000.c
@@ -1,11 +1,8 @@
 // 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
-struct S0 { } g0;
 void fn()
 {
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r1000.c.hs b/rtree-c/test/expected/structfn/reduction/r1000.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r1000.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r100011.c b/rtree-c/test/expected/structfn/reduction/r100011.c
deleted file mode 100644
index 35b3aba..0000000
--- a/rtree-c/test/expected/structfn/reduction/r100011.c
+++ /dev/null
@@ -1,14 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { } g0 = { };
-void fn()
-{
-}
-int main()
-{
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r110011.c b/rtree-c/test/expected/structfn/reduction/r10010.c
similarity index 50%
rename from rtree-c/test/expected/structfn/reduction/r110011.c
rename to rtree-c/test/expected/structfn/reduction/r10010.c
index 53c8c35..5768756 100644
--- a/rtree-c/test/expected/structfn/reduction/r110011.c
+++ b/rtree-c/test/expected/structfn/reduction/r10010.c
@@ -1,11 +1,9 @@
 // 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
-struct S0 { } g0;
 void fn()
 {
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r10010.c.hs b/rtree-c/test/expected/structfn/reduction/r10010.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r10010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r100100.c b/rtree-c/test/expected/structfn/reduction/r100100.c
deleted file mode 100644
index d63281f..0000000
--- a/rtree-c/test/expected/structfn/reduction/r100100.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-// 0 do without param at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { } g0 = { };
-int main()
-{
-    g0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r100101.c b/rtree-c/test/expected/structfn/reduction/r100101.c
deleted file mode 100644
index 3d361d9..0000000
--- a/rtree-c/test/expected/structfn/reduction/r100101.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-// 1 do without param at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { } g0 = { };
-int main()
-{
-    0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r10011.c b/rtree-c/test/expected/structfn/reduction/r10011.c
index d306c44..9930cbc 100644
--- a/rtree-c/test/expected/structfn/reduction/r10011.c
+++ b/rtree-c/test/expected/structfn/reduction/r10011.c
@@ -1,10 +1,12 @@
 // 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
-struct S0 { } g0 = { };
+void fn()
+{
+}
 int main()
 {
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r10011.c.hs b/rtree-c/test/expected/structfn/reduction/r10011.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r10011.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r100010.c b/rtree-c/test/expected/structfn/reduction/r1010.c
similarity index 50%
rename from rtree-c/test/expected/structfn/reduction/r100010.c
rename to rtree-c/test/expected/structfn/reduction/r1010.c
index d56d15d..9c301d2 100644
--- a/rtree-c/test/expected/structfn/reduction/r100010.c
+++ b/rtree-c/test/expected/structfn/reduction/r1010.c
@@ -1,11 +1,8 @@
 // 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
-struct S0 { } g0 = { };
 void fn()
 {
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r1010.c.hs b/rtree-c/test/expected/structfn/reduction/r1010.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r1010.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r101010.c b/rtree-c/test/expected/structfn/reduction/r101010.c
deleted file mode 100644
index b1a2346..0000000
--- a/rtree-c/test/expected/structfn/reduction/r101010.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { };
-int main()
-{
-    0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r10110.c b/rtree-c/test/expected/structfn/reduction/r10110.c
new file mode 100644
index 0000000..5570993
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r10110.c
@@ -0,0 +1,12 @@
+// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+void fn()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r10110.c.hs b/rtree-c/test/expected/structfn/reduction/r10110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r10110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r101100.c b/rtree-c/test/expected/structfn/reduction/r101100.c
deleted file mode 100644
index 112b943..0000000
--- a/rtree-c/test/expected/structfn/reduction/r101100.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-
-void fn(struct S0 { } a)
-{
-}
-int main()
-{
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r1011010.c b/rtree-c/test/expected/structfn/reduction/r1011010.c
deleted file mode 100644
index ea713d6..0000000
--- a/rtree-c/test/expected/structfn/reduction/r1011010.c
+++ /dev/null
@@ -1,15 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-void fn()
-{
-}
-int main()
-{
-    fn();
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r1011011.c b/rtree-c/test/expected/structfn/reduction/r1011011.c
deleted file mode 100644
index ef207a0..0000000
--- a/rtree-c/test/expected/structfn/reduction/r1011011.c
+++ /dev/null
@@ -1,14 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-void fn()
-{
-}
-int main()
-{
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r10111.c b/rtree-c/test/expected/structfn/reduction/r10111.c
new file mode 100644
index 0000000..93c9c08
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r10111.c
@@ -0,0 +1,12 @@
+// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
+// 0 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 2)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
+
+void fn()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/structfn/reduction/r10111.c.hs b/rtree-c/test/expected/structfn/reduction/r10111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r10111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r101110.c b/rtree-c/test/expected/structfn/reduction/r101110.c
deleted file mode 100644
index 6a5ae95..0000000
--- a/rtree-c/test/expected/structfn/reduction/r101110.c
+++ /dev/null
@@ -1,11 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-int main()
-{
-    0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r111110.c b/rtree-c/test/expected/structfn/reduction/r110.c
similarity index 51%
rename from rtree-c/test/expected/structfn/reduction/r111110.c
rename to rtree-c/test/expected/structfn/reduction/r110.c
index 9c6f1ca..471dc6a 100644
--- a/rtree-c/test/expected/structfn/reduction/r111110.c
+++ b/rtree-c/test/expected/structfn/reduction/r110.c
@@ -1,9 +1,6 @@
 // 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 0 remove expr statement at ("test/cases/small/structfn.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/structfn/reduction/r110.c.hs b/rtree-c/test/expected/structfn/reduction/r110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r110100.c b/rtree-c/test/expected/structfn/reduction/r110100.c
deleted file mode 100644
index 94d8e20..0000000
--- a/rtree-c/test/expected/structfn/reduction/r110100.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-// 0 do without param at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { } g0;
-int main()
-{
-    g0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r110101.c b/rtree-c/test/expected/structfn/reduction/r110101.c
deleted file mode 100644
index 49570de..0000000
--- a/rtree-c/test/expected/structfn/reduction/r110101.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-// 1 do without param at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { } g0;
-int main()
-{
-    0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r11011.c b/rtree-c/test/expected/structfn/reduction/r1110.c
similarity index 57%
rename from rtree-c/test/expected/structfn/reduction/r11011.c
rename to rtree-c/test/expected/structfn/reduction/r1110.c
index 3b08003..43f4280 100644
--- a/rtree-c/test/expected/structfn/reduction/r11011.c
+++ b/rtree-c/test/expected/structfn/reduction/r1110.c
@@ -1,10 +1,8 @@
 // 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 0 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 0 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
-struct S0 { } g0;
 int main()
 {
 }
diff --git a/rtree-c/test/expected/structfn/reduction/r1110.c.hs b/rtree-c/test/expected/structfn/reduction/r1110.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r1110.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r111010.c b/rtree-c/test/expected/structfn/reduction/r111010.c
deleted file mode 100644
index 3127014..0000000
--- a/rtree-c/test/expected/structfn/reduction/r111010.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 0 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-struct S0 { };
-int main()
-{
-    0;
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r101111.c b/rtree-c/test/expected/structfn/reduction/r1111.c
similarity index 50%
rename from rtree-c/test/expected/structfn/reduction/r101111.c
rename to rtree-c/test/expected/structfn/reduction/r1111.c
index 517aa53..9cfccf2 100644
--- a/rtree-c/test/expected/structfn/reduction/r101111.c
+++ b/rtree-c/test/expected/structfn/reduction/r1111.c
@@ -1,9 +1,7 @@
 // 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 0 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
+// 1 remove function fn at ("test/cases/small/structfn.c": line 2)
+// 1 remove expr statement at ("test/cases/small/structfn.c": line 5)
+// 1 remove empty compound at ("test/cases/small/structfn.c": line 3)
 
 int main()
 {
diff --git a/rtree-c/test/expected/structfn/reduction/r1111.c.hs b/rtree-c/test/expected/structfn/reduction/r1111.c.hs
new file mode 100644
index 0000000..b208dcb
--- /dev/null
+++ b/rtree-c/test/expected/structfn/reduction/r1111.c.hs
@@ -0,0 +1,103 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CTypeSpec
+                ( CSUType
+                    ( CStruct CStructTag
+                        ( Just
+                            ( Ident "S0" 6227 () )
+                        )
+                        ( Just [] ) [] ()
+                    ) ()
+                )
+            ] [] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "fn" 14182 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CSUType
+                                    ( CStruct CStructTag
+                                        ( Just
+                                            ( Ident "S0" 6227 () )
+                                        ) Nothing [] ()
+                                    ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CSUType
+                                ( CStruct CStructTag
+                                    ( Just
+                                        ( Ident "S0" 6227 () )
+                                    ) Nothing [] ()
+                                ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "g0" 6247 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitList
+                                    ( CInitializerList [] ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CExpr
+                        ( Just
+                            ( CCall
+                                ( CVar
+                                    ( Ident "fn" 14182 () ) ()
+                                )
+                                [ CVar
+                                    ( Ident "g0" 6247 () ) ()
+                                ] ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/structfn/reduction/r111100.c b/rtree-c/test/expected/structfn/reduction/r111100.c
deleted file mode 100644
index 04b5240..0000000
--- a/rtree-c/test/expected/structfn/reduction/r111100.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 0 remove parameter at ("test/cases/small/structfn.c": line 3)
-
-void fn(struct S0 { } a)
-{
-}
-int main()
-{
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r1111010.c b/rtree-c/test/expected/structfn/reduction/r1111010.c
deleted file mode 100644
index 26c61ac..0000000
--- a/rtree-c/test/expected/structfn/reduction/r1111010.c
+++ /dev/null
@@ -1,15 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 0 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-void fn()
-{
-}
-int main()
-{
-    fn();
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r1111011.c b/rtree-c/test/expected/structfn/reduction/r1111011.c
deleted file mode 100644
index f5d0620..0000000
--- a/rtree-c/test/expected/structfn/reduction/r1111011.c
+++ /dev/null
@@ -1,14 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 0 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove parameter at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-void fn()
-{
-}
-int main()
-{
-}
diff --git a/rtree-c/test/expected/structfn/reduction/r111111.c b/rtree-c/test/expected/structfn/reduction/r111111.c
deleted file mode 100644
index d2ccbfa..0000000
--- a/rtree-c/test/expected/structfn/reduction/r111111.c
+++ /dev/null
@@ -1,10 +0,0 @@
-// 1 remove declaration at ("test/cases/small/structfn.c": line 1)
-// 1 remove initializer at ("test/cases/small/structfn.c": line 2)
-// 1 remove variable g0 at ("test/cases/small/structfn.c": line 2)
-// 1 remove declaration at ("test/cases/small/structfn.c": line 2)
-// 1 remove function fn at ("test/cases/small/structfn.c": line 3)
-// 1 remove expr statement at ("test/cases/small/structfn.c": line 4)
-
-int main()
-{
-}
diff --git a/rtree-c/test/expected/typedef/reduction/r0000.c b/rtree-c/test/expected/typedef/reduction/r00000.c
similarity index 83%
rename from rtree-c/test/expected/typedef/reduction/r0000.c
rename to rtree-c/test/expected/typedef/reduction/r00000.c
index e5cb677..092f0c0 100644
--- a/rtree-c/test/expected/typedef/reduction/r0000.c
+++ b/rtree-c/test/expected/typedef/reduction/r00000.c
@@ -1,5 +1,6 @@
 // 0 remove function f at ("test/cases/small/typedef.c": line 4)
 // 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
 // 0 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 0 remove return statement at ("test/cases/small/typedef.c": line 9)
 
diff --git a/rtree-c/test/expected/typedef/reduction/r00000.c.hs b/rtree-c/test/expected/typedef/reduction/r00000.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00000.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r0001.c b/rtree-c/test/expected/typedef/reduction/r00001.c
similarity index 83%
rename from rtree-c/test/expected/typedef/reduction/r0001.c
rename to rtree-c/test/expected/typedef/reduction/r00001.c
index 0965039..fb5d9b5 100644
--- a/rtree-c/test/expected/typedef/reduction/r0001.c
+++ b/rtree-c/test/expected/typedef/reduction/r00001.c
@@ -1,5 +1,6 @@
 // 0 remove function f at ("test/cases/small/typedef.c": line 4)
 // 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
 // 0 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 1 remove return statement at ("test/cases/small/typedef.c": line 9)
 
diff --git a/rtree-c/test/expected/typedef/reduction/r00001.c.hs b/rtree-c/test/expected/typedef/reduction/r00001.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00001.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r0010.c b/rtree-c/test/expected/typedef/reduction/r00010.c
similarity index 82%
rename from rtree-c/test/expected/typedef/reduction/r0010.c
rename to rtree-c/test/expected/typedef/reduction/r00010.c
index f6a29d2..5f73d65 100644
--- a/rtree-c/test/expected/typedef/reduction/r0010.c
+++ b/rtree-c/test/expected/typedef/reduction/r00010.c
@@ -1,5 +1,6 @@
 // 0 remove function f at ("test/cases/small/typedef.c": line 4)
 // 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
 // 1 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 0 remove return statement at ("test/cases/small/typedef.c": line 9)
 
diff --git a/rtree-c/test/expected/typedef/reduction/r00010.c.hs b/rtree-c/test/expected/typedef/reduction/r00010.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00010.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r0011.c b/rtree-c/test/expected/typedef/reduction/r000110.c
similarity index 70%
rename from rtree-c/test/expected/typedef/reduction/r0011.c
rename to rtree-c/test/expected/typedef/reduction/r000110.c
index cee26a3..98559cb 100644
--- a/rtree-c/test/expected/typedef/reduction/r0011.c
+++ b/rtree-c/test/expected/typedef/reduction/r000110.c
@@ -1,7 +1,9 @@
 // 0 remove function f at ("test/cases/small/typedef.c": line 4)
 // 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
 // 1 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 7)
 
 typedef int uint64;
 void f(uint64 a)
diff --git a/rtree-c/test/expected/typedef/reduction/r000110.c.hs b/rtree-c/test/expected/typedef/reduction/r000110.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r000110.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r000111.c b/rtree-c/test/expected/typedef/reduction/r000111.c
new file mode 100644
index 0000000..2e32ead
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r000111.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 7)
+
+typedef int uint64;
+void f(uint64 a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r000111.c.hs b/rtree-c/test/expected/typedef/reduction/r000111.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r000111.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r00100.c b/rtree-c/test/expected/typedef/reduction/r00100.c
new file mode 100644
index 0000000..231bd00
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00100.c
@@ -0,0 +1,15 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 0 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 0 remove return statement at ("test/cases/small/typedef.c": line 9)
+
+typedef int uint64;
+void f(uint64 a)
+{
+}
+int main()
+{
+    uint64 x = 1;
+    return x;
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r00100.c.hs b/rtree-c/test/expected/typedef/reduction/r00100.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00100.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r00101.c b/rtree-c/test/expected/typedef/reduction/r00101.c
new file mode 100644
index 0000000..3214e43
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00101.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 0 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+
+typedef int uint64;
+void f(uint64 a)
+{
+}
+int main()
+{
+    uint64 x = 1;
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r00101.c.hs b/rtree-c/test/expected/typedef/reduction/r00101.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00101.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r00110.c b/rtree-c/test/expected/typedef/reduction/r00110.c
new file mode 100644
index 0000000..6c9eb8f
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00110.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 0 remove return statement at ("test/cases/small/typedef.c": line 9)
+
+typedef int uint64;
+void f(uint64 a)
+{
+}
+int main()
+{
+    return 1;
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r00110.c.hs b/rtree-c/test/expected/typedef/reduction/r00110.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r00110.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r001110.c b/rtree-c/test/expected/typedef/reduction/r001110.c
new file mode 100644
index 0000000..fd87f6b
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r001110.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 7)
+
+typedef int uint64;
+void f(uint64 a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r001110.c.hs b/rtree-c/test/expected/typedef/reduction/r001110.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r001110.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r001111.c b/rtree-c/test/expected/typedef/reduction/r001111.c
new file mode 100644
index 0000000..6d59fc6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r001111.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 0 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 7)
+
+typedef int uint64;
+void f(uint64 a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r001111.c.hs b/rtree-c/test/expected/typedef/reduction/r001111.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r001111.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r0100.c b/rtree-c/test/expected/typedef/reduction/r01000.c
similarity index 83%
rename from rtree-c/test/expected/typedef/reduction/r0100.c
rename to rtree-c/test/expected/typedef/reduction/r01000.c
index 4cfd2ac..738f0ec 100644
--- a/rtree-c/test/expected/typedef/reduction/r0100.c
+++ b/rtree-c/test/expected/typedef/reduction/r01000.c
@@ -1,5 +1,6 @@
 // 0 remove function f at ("test/cases/small/typedef.c": line 4)
 // 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
 // 0 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 0 remove return statement at ("test/cases/small/typedef.c": line 9)
 
diff --git a/rtree-c/test/expected/typedef/reduction/r01000.c.hs b/rtree-c/test/expected/typedef/reduction/r01000.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01000.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r0101.c b/rtree-c/test/expected/typedef/reduction/r01001.c
similarity index 82%
rename from rtree-c/test/expected/typedef/reduction/r0101.c
rename to rtree-c/test/expected/typedef/reduction/r01001.c
index ea9c783..7bce9f6 100644
--- a/rtree-c/test/expected/typedef/reduction/r0101.c
+++ b/rtree-c/test/expected/typedef/reduction/r01001.c
@@ -1,5 +1,6 @@
 // 0 remove function f at ("test/cases/small/typedef.c": line 4)
 // 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
 // 0 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 1 remove return statement at ("test/cases/small/typedef.c": line 9)
 
diff --git a/rtree-c/test/expected/typedef/reduction/r01001.c.hs b/rtree-c/test/expected/typedef/reduction/r01001.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01001.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r0110.c b/rtree-c/test/expected/typedef/reduction/r01010.c
similarity index 82%
rename from rtree-c/test/expected/typedef/reduction/r0110.c
rename to rtree-c/test/expected/typedef/reduction/r01010.c
index e54fbe7..f68c94e 100644
--- a/rtree-c/test/expected/typedef/reduction/r0110.c
+++ b/rtree-c/test/expected/typedef/reduction/r01010.c
@@ -1,5 +1,6 @@
 // 0 remove function f at ("test/cases/small/typedef.c": line 4)
 // 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
 // 1 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 0 remove return statement at ("test/cases/small/typedef.c": line 9)
 
diff --git a/rtree-c/test/expected/typedef/reduction/r01010.c.hs b/rtree-c/test/expected/typedef/reduction/r01010.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01010.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r0111.c b/rtree-c/test/expected/typedef/reduction/r010110.c
similarity index 69%
rename from rtree-c/test/expected/typedef/reduction/r0111.c
rename to rtree-c/test/expected/typedef/reduction/r010110.c
index 5a69909..68b93d1 100644
--- a/rtree-c/test/expected/typedef/reduction/r0111.c
+++ b/rtree-c/test/expected/typedef/reduction/r010110.c
@@ -1,7 +1,9 @@
 // 0 remove function f at ("test/cases/small/typedef.c": line 4)
 // 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
 // 1 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 7)
 
 typedef int uint64;
 void f()
diff --git a/rtree-c/test/expected/typedef/reduction/r010110.c.hs b/rtree-c/test/expected/typedef/reduction/r010110.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r010110.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r010111.c b/rtree-c/test/expected/typedef/reduction/r010111.c
new file mode 100644
index 0000000..12edac8
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r010111.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 7)
+
+typedef int uint64;
+void f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r010111.c.hs b/rtree-c/test/expected/typedef/reduction/r010111.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r010111.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r01100.c b/rtree-c/test/expected/typedef/reduction/r01100.c
new file mode 100644
index 0000000..be3236c
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01100.c
@@ -0,0 +1,15 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 0 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 0 remove return statement at ("test/cases/small/typedef.c": line 9)
+
+typedef int uint64;
+void f()
+{
+}
+int main()
+{
+    uint64 x = 1;
+    return x;
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r01100.c.hs b/rtree-c/test/expected/typedef/reduction/r01100.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01100.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r01101.c b/rtree-c/test/expected/typedef/reduction/r01101.c
new file mode 100644
index 0000000..ffddec5
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01101.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 0 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+
+typedef int uint64;
+void f()
+{
+}
+int main()
+{
+    uint64 x = 1;
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r01101.c.hs b/rtree-c/test/expected/typedef/reduction/r01101.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01101.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r01110.c b/rtree-c/test/expected/typedef/reduction/r01110.c
new file mode 100644
index 0000000..c07bc66
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01110.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 0 remove return statement at ("test/cases/small/typedef.c": line 9)
+
+typedef int uint64;
+void f()
+{
+}
+int main()
+{
+    return 1;
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r01110.c.hs b/rtree-c/test/expected/typedef/reduction/r01110.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r01110.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r011110.c b/rtree-c/test/expected/typedef/reduction/r011110.c
new file mode 100644
index 0000000..29233a1
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r011110.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 7)
+
+typedef int uint64;
+void f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r011110.c.hs b/rtree-c/test/expected/typedef/reduction/r011110.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r011110.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r011111.c b/rtree-c/test/expected/typedef/reduction/r011111.c
new file mode 100644
index 0000000..f7fb805
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r011111.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/typedef.c": line 4)
+// 1 remove parameter at ("test/cases/small/typedef.c": line 4)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 7)
+
+typedef int uint64;
+void f()
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r011111.c.hs b/rtree-c/test/expected/typedef/reduction/r011111.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r011111.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r100.c.hs b/rtree-c/test/expected/typedef/reduction/r100.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r100.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r101.c.hs b/rtree-c/test/expected/typedef/reduction/r101.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r101.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r110.c.hs b/rtree-c/test/expected/typedef/reduction/r110.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r110.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r111.c b/rtree-c/test/expected/typedef/reduction/r1110.c
similarity index 77%
rename from rtree-c/test/expected/typedef/reduction/r111.c
rename to rtree-c/test/expected/typedef/reduction/r1110.c
index 89442c7..8c8eedc 100644
--- a/rtree-c/test/expected/typedef/reduction/r111.c
+++ b/rtree-c/test/expected/typedef/reduction/r1110.c
@@ -1,6 +1,7 @@
 // 1 remove function f at ("test/cases/small/typedef.c": line 4)
 // 1 inline variable x at ("test/cases/small/typedef.c": line 8)
 // 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 0 remove empty compound at ("test/cases/small/typedef.c": line 7)
 
 typedef int uint64;
 int main()
diff --git a/rtree-c/test/expected/typedef/reduction/r1110.c.hs b/rtree-c/test/expected/typedef/reduction/r1110.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r1110.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/typedef/reduction/r1111.c b/rtree-c/test/expected/typedef/reduction/r1111.c
new file mode 100644
index 0000000..7ae8e89
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r1111.c
@@ -0,0 +1,9 @@
+// 1 remove function f at ("test/cases/small/typedef.c": line 4)
+// 1 inline variable x at ("test/cases/small/typedef.c": line 8)
+// 1 remove return statement at ("test/cases/small/typedef.c": line 9)
+// 1 remove empty compound at ("test/cases/small/typedef.c": line 7)
+
+typedef int uint64;
+int main()
+{
+}
diff --git a/rtree-c/test/expected/typedef/reduction/r1111.c.hs b/rtree-c/test/expected/typedef/reduction/r1111.c.hs
new file mode 100644
index 0000000..8d49dd6
--- /dev/null
+++ b/rtree-c/test/expected/typedef/reduction/r1111.c.hs
@@ -0,0 +1,94 @@
+CTranslUnit
+    [ CDeclExt
+        ( CDecl
+            [ CStorageSpec
+                ( CTypedef () )
+            , CTypeSpec
+                ( CIntType () )
+            ]
+            [ CDeclarationItem
+                ( CDeclr
+                    ( Just
+                        ( Ident "uint64" 245092139 () )
+                    ) [] Nothing [] ()
+                ) Nothing Nothing
+            ] ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CVoidType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "f" 102 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew
+                        [ CDecl
+                            [ CTypeSpec
+                                ( CTypeDef
+                                    ( Ident "uint64" 245092139 () ) ()
+                                )
+                            ]
+                            [ CDeclarationItem
+                                ( CDeclr
+                                    ( Just
+                                        ( Ident "a" 97 () )
+                                    ) [] Nothing [] ()
+                                ) Nothing Nothing
+                            ] ()
+                        ] False
+                    ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound [] [] () ) ()
+        )
+    , CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CTypeDef
+                                ( Ident "uint64" 245092139 () ) ()
+                            )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "x" 120 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 1 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CReturn
+                        ( Just
+                            ( CVar
+                                ( Ident "x" 120 () ) ()
+                            )
+                        ) ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000.c.hs b/rtree-c/test/expected/while-loops/reduction/r0000.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0000.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001.c.hs b/rtree-c/test/expected/while-loops/reduction/r0001.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r0010.c.hs b/rtree-c/test/expected/while-loops/reduction/r0010.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0010.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r0011.c.hs b/rtree-c/test/expected/while-loops/reduction/r0011.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0011.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r0100.c b/rtree-c/test/expected/while-loops/reduction/r0100.c
new file mode 100644
index 0000000..416317d
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0100.c
@@ -0,0 +1,12 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 1 remove expr statement at ("test/cases/small/while-loops.c": line 4)
+// 0 remove empty compound at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+
+int main()
+{
+    int i = 0;
+    while (i < 10)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0100.c.hs b/rtree-c/test/expected/while-loops/reduction/r0100.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0100.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r0101.c b/rtree-c/test/expected/while-loops/reduction/r0101.c
new file mode 100644
index 0000000..e501a6c
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0101.c
@@ -0,0 +1,12 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 1 remove expr statement at ("test/cases/small/while-loops.c": line 4)
+// 0 remove empty compound at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0101.c.hs b/rtree-c/test/expected/while-loops/reduction/r0101.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0101.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r01.c b/rtree-c/test/expected/while-loops/reduction/r011.c
similarity index 70%
rename from rtree-c/test/expected/while-loops/reduction/r01.c
rename to rtree-c/test/expected/while-loops/reduction/r011.c
index 7b9e05d..cab76ed 100644
--- a/rtree-c/test/expected/while-loops/reduction/r01.c
+++ b/rtree-c/test/expected/while-loops/reduction/r011.c
@@ -1,5 +1,6 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 1 remove expr statement at ("test/cases/small/while-loops.c": line 4)
+// 1 remove empty compound at ("test/cases/small/while-loops.c": line 3)
 
 int main()
 {
diff --git a/rtree-c/test/expected/while-loops/reduction/r011.c.hs b/rtree-c/test/expected/while-loops/reduction/r011.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r011.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r1.c b/rtree-c/test/expected/while-loops/reduction/r1.c
deleted file mode 100644
index f34ba2b..0000000
--- a/rtree-c/test/expected/while-loops/reduction/r1.c
+++ /dev/null
@@ -1,5 +0,0 @@
-// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
-
-int main()
-{
-}
diff --git a/rtree-c/test/expected/while-loops/reduction/r100.c b/rtree-c/test/expected/while-loops/reduction/r100.c
new file mode 100644
index 0000000..1351a25
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r100.c
@@ -0,0 +1,10 @@
+// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove empty compound 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 (0 < 10)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r100.c.hs b/rtree-c/test/expected/while-loops/reduction/r100.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r100.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r101.c b/rtree-c/test/expected/while-loops/reduction/r101.c
new file mode 100644
index 0000000..5afe597
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r101.c
@@ -0,0 +1,10 @@
+// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove empty compound 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/r101.c.hs b/rtree-c/test/expected/while-loops/reduction/r101.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r101.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r110.c b/rtree-c/test/expected/while-loops/reduction/r110.c
new file mode 100644
index 0000000..7c5f996
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r110.c
@@ -0,0 +1,7 @@
+// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 1 remove empty compound at ("test/cases/small/while-loops.c": line 3)
+// 0 remove empty compound at ("test/cases/small/while-loops.c": line 1)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r110.c.hs b/rtree-c/test/expected/while-loops/reduction/r110.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r110.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/expected/while-loops/reduction/r111.c b/rtree-c/test/expected/while-loops/reduction/r111.c
new file mode 100644
index 0000000..afa6daf
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r111.c
@@ -0,0 +1,7 @@
+// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 1 remove empty compound at ("test/cases/small/while-loops.c": line 3)
+// 1 remove empty compound at ("test/cases/small/while-loops.c": line 1)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r111.c.hs b/rtree-c/test/expected/while-loops/reduction/r111.c.hs
new file mode 100644
index 0000000..a2acb51
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r111.c.hs
@@ -0,0 +1,63 @@
+CTranslUnit
+    [ CFDefExt
+        ( CFunDef
+            [ CTypeSpec
+                ( CIntType () )
+            ]
+            ( CDeclr
+                ( Just
+                    ( Ident "main" 232419565 () )
+                )
+                [ CFunDeclr
+                    ( CFunParamsNew [] False ) [] ()
+                ] Nothing [] ()
+            ) []
+            ( CCompound []
+                [ CBlockDecl
+                    ( CDecl
+                        [ CTypeSpec
+                            ( CIntType () )
+                        ]
+                        [ CDeclarationItem
+                            ( CDeclr
+                                ( Just
+                                    ( Ident "i" 105 () )
+                                ) [] Nothing [] ()
+                            )
+                            ( Just
+                                ( CInitExpr
+                                    ( CConst
+                                        ( CIntConst 0 () )
+                                    ) ()
+                                )
+                            ) Nothing
+                        ] ()
+                    )
+                , CBlockStmt
+                    ( CWhile
+                        ( CBinary CLeOp
+                            ( CVar
+                                ( Ident "i" 105 () ) ()
+                            )
+                            ( CConst
+                                ( CIntConst 10 () )
+                            ) ()
+                        )
+                        ( CCompound []
+                            [ CBlockStmt
+                                ( CExpr
+                                    ( Just
+                                        ( CUnary CPostIncOp
+                                            ( CVar
+                                                ( Ident "i" 105 () ) ()
+                                            ) ()
+                                        )
+                                    ) ()
+                                )
+                            ] ()
+                        ) False ()
+                    )
+                ] ()
+            ) ()
+        )
+    ] ()
diff --git a/rtree-c/test/src/ReduceCSpec.hs b/rtree-c/test/src/ReduceCSpec.hs
index f2a221e..6ae8593 100644
--- a/rtree-c/test/src/ReduceCSpec.hs
+++ b/rtree-c/test/src/ReduceCSpec.hs
@@ -30,11 +30,13 @@ import Data.String
 import qualified Language.C.System.GCC as C
 import ReduceC
 import System.Directory.Internal.Prelude (tryIOError)
+import System.IO
 import System.Process.Typed
+import Text.Pretty.Simple
 
 spec :: Spec
 spec = do
-  specSmallCases
+  focus $ specSmallCases
   specLargeCases
 
 specLargeCases :: Spec
@@ -115,15 +117,17 @@ specSmallCases = do
             forM_ (RTree.iinputs (defaultReduceC c)) \(i, _) -> do
               let rfile = expected </> "reduction" </> "r" <> debugShow i <.> "c"
               renderWithChoices rfile (IRTree.probe (defaultReduceC c) i)
+              withFile (rfile <.> "hs") WriteMode \h ->
+                pHPrint h (c $> ())
         )
-        do
-          it "should validate all reductions" $ \a -> do
-            when (takeExtension a == ".c") do
-              validate a
+       do 
+        it "should validate all reductions" $ \a -> do
+         when (takeExtension a == ".c") do
+           validate a
 
 validate :: FilePath -> IO ()
 validate fp = do
-  (ec, _, stderr) <- readProcess (proc "clang" ["-o", "/dev/null", fp])
+  (ec, _, stderr_) <- readProcess (proc "clang" ["-o", "/dev/null", fp])
   case ec of
     ExitFailure _ ->
       expectationFailure $
@@ -134,7 +138,7 @@ validate fp = do
                 . LazyText.unlines
                 . filter (LazyText.isInfixOf "error")
                 . LazyText.lines
-                $ LazyText.decodeUtf8 stderr
+                $ LazyText.decodeUtf8 stderr_
              )
     ExitSuccess -> pure ()
 
-- 
GitLab